1 <title>Codec Interface</title> 2 3 <para>A V4L2 codec can compress, decompress, transform, or otherwise 4convert video data from one format into another format, in memory. Typically 5such devices are memory-to-memory devices (i.e. devices with the 6<constant>V4L2_CAP_VIDEO_M2M</constant> or <constant>V4L2_CAP_VIDEO_M2M_MPLANE</constant> 7capability set). 8</para> 9 10 <para>A memory-to-memory video node acts just like a normal video node, but it 11supports both output (sending frames from memory to the codec hardware) and 12capture (receiving the processed frames from the codec hardware into memory) 13stream I/O. An application will have to setup the stream 14I/O for both sides and finally call &VIDIOC-STREAMON; for both capture and output 15to start the codec.</para> 16 17 <para>Video compression codecs use the MPEG controls to setup their codec parameters 18(note that the MPEG controls actually support many more codecs than just MPEG). 19See <xref linkend="mpeg-controls"></xref>.</para> 20 21 <para>Memory-to-memory devices can often be used as a shared resource: you can 22open the video node multiple times, each application setting up their own codec properties 23that are local to the file handle, and each can use it independently from the others. 24The driver will arbitrate access to the codec and reprogram it whenever another file 25handler gets access. This is different from the usual video node behavior where the video properties 26are global to the device (i.e. changing something through one file handle is visible 27through another file handle).</para> 28