1.. Permission is granted to copy, distribute and/or modify this 2.. document under the terms of the GNU Free Documentation License, 3.. Version 1.1 or any later version published by the Free Software 4.. Foundation, with no Invariant Sections, no Front-Cover Texts 5.. and no Back-Cover Texts. A copy of the license is included at 6.. Documentation/userspace-api/media/fdl-appendix.rst. 7.. 8.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections 9 10.. _mem2mem: 11 12******************************** 13Video Memory-To-Memory Interface 14******************************** 15 16A V4L2 memory-to-memory device can compress, decompress, transform, or 17otherwise convert video data from one format into another format, in memory. 18Such memory-to-memory devices set the ``V4L2_CAP_VIDEO_M2M`` or 19``V4L2_CAP_VIDEO_M2M_MPLANE`` capability. Examples of memory-to-memory 20devices are codecs, scalers, deinterlacers or format converters (i.e. 21converting from YUV to RGB). 22 23A memory-to-memory video node acts just like a normal video node, but it 24supports both output (sending frames from memory to the hardware) 25and capture (receiving the processed frames from the hardware into 26memory) stream I/O. An application will have to setup the stream I/O for 27both sides and finally call :ref:`VIDIOC_STREAMON <VIDIOC_STREAMON>` 28for both capture and output to start the hardware. 29 30Memory-to-memory devices function as a shared resource: you can 31open the video node multiple times, each application setting up their 32own properties that are local to the file handle, and each can use 33it independently from the others. The driver will arbitrate access to 34the hardware and reprogram it whenever another file handler gets access. 35This is different from the usual video node behavior where the video 36properties are global to the device (i.e. changing something through one 37file handle is visible through another file handle). 38 39One of the most common memory-to-memory device is the codec. Codecs 40are more complicated than most and require additional setup for 41their codec parameters. This is done through codec controls. 42See :ref:`mpeg-controls`. More details on how to use codec memory-to-memory 43devices are given in the following sections. 44 45.. toctree:: 46 :maxdepth: 1 47 48 dev-decoder 49 dev-encoder 50 dev-stateless-decoder 51