2018-08-30 22:15:26 +08:00
|
|
|
.. Permission is granted to copy, distribute and/or modify this
|
|
|
|
.. document under the terms of the GNU Free Documentation License,
|
|
|
|
.. Version 1.1 or any later version published by the Free Software
|
|
|
|
.. Foundation, with no Invariant Sections, no Front-Cover Texts
|
|
|
|
.. and no Back-Cover Texts. A copy of the license is included at
|
|
|
|
.. Documentation/media/uapi/fdl-appendix.rst.
|
|
|
|
..
|
|
|
|
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
|
|
|
|
2016-06-30 21:18:56 +08:00
|
|
|
.. _codec:
|
|
|
|
|
|
|
|
***************
|
|
|
|
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
|
2016-07-05 05:05:55 +08:00
|
|
|
both sides and finally call :ref:`VIDIOC_STREAMON <VIDIOC_STREAMON>`
|
2016-06-30 21:18:56 +08:00
|
|
|
for both capture and output to start the codec.
|
|
|
|
|
|
|
|
Video compression codecs use the MPEG controls to setup their codec
|
2016-07-10 22:57:43 +08:00
|
|
|
parameters
|
|
|
|
|
2016-08-16 04:49:50 +08:00
|
|
|
.. note::
|
|
|
|
|
|
|
|
The MPEG controls actually support many more codecs than
|
2016-07-10 22:57:43 +08:00
|
|
|
just MPEG. See :ref:`mpeg-controls`.
|
2016-06-30 21:18:56 +08:00
|
|
|
|
2016-10-18 21:15:32 +08:00
|
|
|
Memory-to-memory devices function as a shared resource: you can
|
2016-06-30 21:18:56 +08:00
|
|
|
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).
|