Documentation/userspace-api/media/v4l/dev-stateless-decoder.rst
Source file repositories/reference/linux-study-clean/Documentation/userspace-api/media/v4l/dev-stateless-decoder.rst
File Facts
- System
- Linux kernel
- Corpus path
Documentation/userspace-api/media/v4l/dev-stateless-decoder.rst- Extension
.rst- Size
- 17819 bytes
- Lines
- 426
- Domain
- Support Tooling And Documentation
- Bucket
- Documentation
- Inferred role
- Support Tooling And Documentation: documentation
- Status
- atlas-only
Why This File Exists
Repository support layer: documentation, build tooling, samples, user-space helper tools, generated initramfs support, licenses, and validation utilities.
- Repository support layer: documentation, build tooling, samples, user-space helper tools, generated initramfs support, licenses, and validation utilities.
Dependency Surface
- No C-style include directives detected by the generator.
Detected Declarations
- No top-level syscall, struct, function, initcall, or export declaration detected by the generator.
Annotated Snippet
.. SPDX-License-Identifier: GPL-2.0
.. c:namespace:: V4L
.. _stateless_decoder:
**************************************************
Memory-to-memory Stateless Video Decoder Interface
**************************************************
A stateless decoder is a decoder that works without retaining any kind of state
between processed frames. This means that each frame is decoded independently
of any previous and future frames, and that the client is responsible for
maintaining the decoding state and providing it to the decoder with each
decoding request. This is in contrast to the stateful video decoder interface,
where the hardware and driver maintain the decoding state and all the client
has to do is to provide the raw encoded stream and dequeue decoded frames in
display order.
This section describes how user-space ("the client") is expected to communicate
with stateless decoders in order to successfully decode an encoded stream.
Compared to stateful codecs, the decoder/client sequence is simpler, but the
cost of this simplicity is extra complexity in the client which is responsible
for maintaining a consistent decoding state.
Stateless decoders make use of the :ref:`media-request-api`. A stateless
decoder must expose the ``V4L2_BUF_CAP_SUPPORTS_REQUESTS`` capability on its
``OUTPUT`` queue when :c:func:`VIDIOC_REQBUFS` or :c:func:`VIDIOC_CREATE_BUFS`
are invoked.
Depending on the encoded formats supported by the decoder, a single decoded
frame may be the result of several decode requests (for instance, H.264 streams
with multiple slices per frame). Decoders that support such formats must also
expose the ``V4L2_BUF_CAP_SUPPORTS_M2M_HOLD_CAPTURE_BUF`` capability on their
``OUTPUT`` queue.
Querying capabilities
=====================
1. To enumerate the set of coded formats supported by the decoder, the client
calls :c:func:`VIDIOC_ENUM_FMT` on the ``OUTPUT`` queue.
* The driver must always return the full set of supported ``OUTPUT`` formats,
irrespective of the format currently set on the ``CAPTURE`` queue.
* Simultaneously, the driver must restrain the set of values returned by
codec-specific capability controls (such as H.264 profiles) to the set
actually supported by the hardware.
2. To enumerate the set of supported raw formats, the client calls
:c:func:`VIDIOC_ENUM_FMT` on the ``CAPTURE`` queue.
* The driver must return only the formats supported for the format currently
active on the ``OUTPUT`` queue.
* Depending on the currently set ``OUTPUT`` format, the set of supported raw
formats may depend on the value of some codec-dependent controls.
The client is responsible for making sure that these controls are set
before querying the ``CAPTURE`` queue. Failure to do so will result in the
default values for these controls being used, and a returned set of formats
that may not be usable for the media the client is trying to decode.
3. The client may use :c:func:`VIDIOC_ENUM_FRAMESIZES` to detect supported
resolutions for a given format, passing desired pixel format in
:c:type:`v4l2_frmsizeenum`'s ``pixel_format``.
4. Supported profiles and levels for the current ``OUTPUT`` format, if
applicable, may be queried using their respective controls via
:c:func:`VIDIOC_QUERYCTRL`.
Initialization
Annotation
- Atlas domain: Support Tooling And Documentation / Documentation.
- Implementation status: atlas-only.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.