blob: c61e938bd8dcc36e964c9737c3d405132ec5b35c [file] [log] [blame]
Andrew Scullb4b6d4a2019-01-02 15:54:55 +00001.. -*- coding: utf-8; mode: rst -*-
2
3.. _codec:
4
5***************
6Codec Interface
7***************
8
9A V4L2 codec can compress, decompress, transform, or otherwise convert
10video data from one format into another format, in memory. Typically
11such devices are memory-to-memory devices (i.e. devices with the
12``V4L2_CAP_VIDEO_M2M`` or ``V4L2_CAP_VIDEO_M2M_MPLANE`` capability set).
13
14A memory-to-memory video node acts just like a normal video node, but it
15supports both output (sending frames from memory to the codec hardware)
16and capture (receiving the processed frames from the codec hardware into
17memory) stream I/O. An application will have to setup the stream I/O for
18both sides and finally call :ref:`VIDIOC_STREAMON <VIDIOC_STREAMON>`
19for both capture and output to start the codec.
20
21Video compression codecs use the MPEG controls to setup their codec
22parameters
23
24.. note::
25
26 The MPEG controls actually support many more codecs than
27 just MPEG. See :ref:`mpeg-controls`.
28
29Memory-to-memory devices function as a shared resource: you can
30open the video node multiple times, each application setting up their
31own codec properties that are local to the file handle, and each can use
32it independently from the others. The driver will arbitrate access to
33the codec and reprogram it whenever another file handler gets access.
34This is different from the usual video node behavior where the video
35properties are global to the device (i.e. changing something through one
36file handle is visible through another file handle).