4.5. Codec InterfaceΒΆ

A V4L2 codec can compress, decompress, transform, or otherwise convert video data from one format into another format, in memory. Typically such devices are memory-to-memory devices (i.e. devices with the V4L2_CAP_VIDEO_M2M or V4L2_CAP_VIDEO_M2M_MPLANE capability set).

A memory-to-memory video node acts just like a normal video node, but it supports both output (sending frames from memory to the codec hardware) and capture (receiving the processed frames from the codec hardware into memory) stream I/O. An application will have to setup the stream I/O for both sides and finally call VIDIOC_STREAMON for both capture and output to start the codec.

Video compression codecs use the MPEG controls to setup their codec parameters


The MPEG controls actually support many more codecs than just MPEG. See Codec Control Reference.

Memory-to-memory devices function as a shared resource: you can open the video node multiple times, each application setting up their own codec properties that are local to the file handle, and each can use it independently from the others. The driver will arbitrate access to the codec and reprogram it whenever another file handler gets access. This is different from the usual video node behavior where the video properties are global to the device (i.e. changing something through one file handle is visible through another file handle).