blob: 170954acc0494eb4222488ed185d5f6fdba8eaf5 [file] [log] [blame]
Markus Heiser5377d912016-06-30 15:18:56 +02001.. -*- 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
Mauro Carvalho Chehab73470812016-07-01 13:58:44 -030018both sides and finally call :ref:`VIDIOC_STREAMON`
Markus Heiser5377d912016-06-30 15:18:56 +020019for both capture and output to start the codec.
20
21Video compression codecs use the MPEG controls to setup their codec
22parameters (note that the MPEG controls actually support many more
23codecs than just MPEG). See :ref:`mpeg-controls`.
24
25Memory-to-memory devices can often be used as a shared resource: you can
26open the video node multiple times, each application setting up their
27own codec properties that are local to the file handle, and each can use
28it independently from the others. The driver will arbitrate access to
29the codec and reprogram it whenever another file handler gets access.
30This is different from the usual video node behavior where the video
31properties are global to the device (i.e. changing something through one
32file handle is visible through another file handle).
33
34
35.. ------------------------------------------------------------------------------
36.. This file was automatically converted from DocBook-XML with the dbxml
37.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
38.. from the linux kernel, refer to:
39..
40.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
41.. ------------------------------------------------------------------------------