1.. -*- 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). 37