xref: /linux/Documentation/userspace-api/media/v4l/dev-decoder.rst (revision 778b8ebe5192e7a7f00563a7456517dfa63e1d90)
1.. SPDX-License-Identifier: GPL-2.0
2.. c:namespace:: V4L
3
4.. _decoder:
5
6*************************************************
7Memory-to-Memory Stateful Video Decoder Interface
8*************************************************
9
10A stateful video decoder takes complete chunks of the bytestream (e.g. Annex-B
11H.264/HEVC stream, raw VP8/9 stream) and decodes them into raw video frames in
12display order. The decoder is expected not to require any additional information
13from the client to process these buffers.
14
15Performing software parsing, processing etc. of the stream in the driver in
16order to support this interface is strongly discouraged. In case such
17operations are needed, use of the Stateless Video Decoder Interface (in
18development) is strongly advised.
19
20Conventions and Notations Used in This Document
21===============================================
22
231. The general V4L2 API rules apply if not specified in this document
24   otherwise.
25
262. The meaning of words "must", "may", "should", etc. is as per `RFC
27   2119 <https://tools.ietf.org/html/rfc2119>`_.
28
293. All steps not marked "optional" are required.
30
314. :c:func:`VIDIOC_G_EXT_CTRLS` and :c:func:`VIDIOC_S_EXT_CTRLS` may be used
32   interchangeably with :c:func:`VIDIOC_G_CTRL` and :c:func:`VIDIOC_S_CTRL`,
33   unless specified otherwise.
34
355. Single-planar API (see :ref:`planar-apis`) and applicable structures may be
36   used interchangeably with multi-planar API, unless specified otherwise,
37   depending on decoder capabilities and following the general V4L2 guidelines.
38
396. i = [a..b]: sequence of integers from a to b, inclusive, i.e. i =
40   [0..2]: i = 0, 1, 2.
41
427. Given an ``OUTPUT`` buffer A, then A' represents a buffer on the ``CAPTURE``
43   queue containing data that resulted from processing buffer A.
44
45.. _decoder-glossary:
46
47Glossary
48========
49
50CAPTURE
51   the destination buffer queue; for decoders, the queue of buffers containing
52   decoded frames; for encoders, the queue of buffers containing an encoded
53   bytestream; ``V4L2_BUF_TYPE_VIDEO_CAPTURE`` or
54   ``V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE``; data is captured from the hardware
55   into ``CAPTURE`` buffers.
56
57client
58   the application communicating with the decoder or encoder implementing
59   this interface.
60
61coded format
62   encoded/compressed video bytestream format (e.g. H.264, VP8, etc.); see
63   also: raw format.
64
65coded height
66   height for given coded resolution.
67
68coded resolution
69   stream resolution in pixels aligned to codec and hardware requirements;
70   typically visible resolution rounded up to full macroblocks;
71   see also: visible resolution.
72
73coded width
74   width for given coded resolution.
75
76coding tree unit
77   processing unit of the HEVC codec (corresponds to macroblock units in
78   H.264, VP8, VP9),
79   can use block structures of up to 64×64 pixels.
80   Good at sub-partitioning the picture into variable sized structures.
81
82decode order
83   the order in which frames are decoded; may differ from display order if the
84   coded format includes a feature of frame reordering; for decoders,
85   ``OUTPUT`` buffers must be queued by the client in decode order; for
86   encoders ``CAPTURE`` buffers must be returned by the encoder in decode order.
87
88destination
89   data resulting from the decode process; see ``CAPTURE``.
90
91display order
92   the order in which frames must be displayed; for encoders, ``OUTPUT``
93   buffers must be queued by the client in display order; for decoders,
94   ``CAPTURE`` buffers must be returned by the decoder in display order.
95
96DPB
97   Decoded Picture Buffer; an H.264/HEVC term for a buffer that stores a decoded
98   raw frame available for reference in further decoding steps.
99
100EOS
101   end of stream.
102
103IDR
104   Instantaneous Decoder Refresh; a type of a keyframe in an H.264/HEVC-encoded
105   stream, which clears the list of earlier reference frames (DPBs).
106
107keyframe
108   an encoded frame that does not reference frames decoded earlier, i.e.
109   can be decoded fully on its own.
110
111macroblock
112   a processing unit in image and video compression formats based on linear
113   block transforms (e.g. H.264, VP8, VP9); codec-specific, but for most of
114   popular codecs the size is 16x16 samples (pixels). The HEVC codec uses a
115   slightly more flexible processing unit called coding tree unit (CTU).
116
117OUTPUT
118   the source buffer queue; for decoders, the queue of buffers containing
119   an encoded bytestream; for encoders, the queue of buffers containing raw
120   frames; ``V4L2_BUF_TYPE_VIDEO_OUTPUT`` or
121   ``V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE``; the hardware is fed with data
122   from ``OUTPUT`` buffers.
123
124PPS
125   Picture Parameter Set; a type of metadata entity in an H.264/HEVC bytestream.
126
127raw format
128   uncompressed format containing raw pixel data (e.g. YUV, RGB formats).
129
130resume point
131   a point in the bytestream from which decoding may start/continue, without
132   any previous state/data present, e.g.: a keyframe (VP8/VP9) or
133   SPS/PPS/IDR sequence (H.264/HEVC); a resume point is required to start decode
134   of a new stream, or to resume decoding after a seek.
135
136source
137   data fed to the decoder or encoder; see ``OUTPUT``.
138
139source height
140   height in pixels for given source resolution; relevant to encoders only.
141
142source resolution
143   resolution in pixels of source frames being source to the encoder and
144   subject to further cropping to the bounds of visible resolution; relevant to
145   encoders only.
146
147source width
148   width in pixels for given source resolution; relevant to encoders only.
149
150SPS
151   Sequence Parameter Set; a type of metadata entity in an H.264/HEVC bytestream.
152
153stream metadata
154   additional (non-visual) information contained inside encoded bytestream;
155   for example: coded resolution, visible resolution, codec profile.
156
157visible height
158   height for given visible resolution; display height.
159
160visible resolution
161   stream resolution of the visible picture, in pixels, to be used for
162   display purposes; must be smaller or equal to coded resolution;
163   display resolution.
164
165visible width
166   width for given visible resolution; display width.
167
168State Machine
169=============
170
171.. kernel-render:: DOT
172   :alt: DOT digraph of decoder state machine
173   :caption: Decoder State Machine
174
175   digraph decoder_state_machine {
176       node [shape = doublecircle, label="Decoding"] Decoding;
177
178       node [shape = circle, label="Initialization"] Initialization;
179       node [shape = circle, label="Capture\nsetup"] CaptureSetup;
180       node [shape = circle, label="Dynamic\nResolution\nChange"] ResChange;
181       node [shape = circle, label="Stopped"] Stopped;
182       node [shape = circle, label="Drain"] Drain;
183       node [shape = circle, label="Seek"] Seek;
184       node [shape = circle, label="End of Stream"] EoS;
185
186       node [shape = point]; qi
187       qi -> Initialization [ label = "open()" ];
188
189       Initialization -> CaptureSetup [ label = "CAPTURE\nformat\nestablished" ];
190
191       CaptureSetup -> Stopped [ label = "CAPTURE\nbuffers\nready" ];
192
193       Decoding -> ResChange [ label = "Stream\nresolution\nchange" ];
194       Decoding -> Drain [ label = "V4L2_DEC_CMD_STOP" ];
195       Decoding -> EoS [ label = "EoS mark\nin the stream" ];
196       Decoding -> Seek [ label = "VIDIOC_STREAMOFF(OUTPUT)" ];
197       Decoding -> Stopped [ label = "VIDIOC_STREAMOFF(CAPTURE)" ];
198       Decoding -> Decoding;
199
200       ResChange -> CaptureSetup [ label = "CAPTURE\nformat\nestablished" ];
201       ResChange -> Seek [ label = "VIDIOC_STREAMOFF(OUTPUT)" ];
202
203       EoS -> Drain [ label = "Implicit\ndrain" ];
204
205       Drain -> Stopped [ label = "All CAPTURE\nbuffers dequeued\nor\nVIDIOC_STREAMOFF(CAPTURE)" ];
206       Drain -> Seek [ label = "VIDIOC_STREAMOFF(OUTPUT)" ];
207
208       Seek -> Decoding [ label = "VIDIOC_STREAMON(OUTPUT)" ];
209       Seek -> Initialization [ label = "VIDIOC_REQBUFS(OUTPUT, 0)" ];
210
211       Stopped -> Decoding [ label = "V4L2_DEC_CMD_START\nor\nVIDIOC_STREAMON(CAPTURE)" ];
212       Stopped -> Seek [ label = "VIDIOC_STREAMOFF(OUTPUT)" ];
213   }
214
215Querying Capabilities
216=====================
217
2181. To enumerate the set of coded formats supported by the decoder, the
219   client may call :c:func:`VIDIOC_ENUM_FMT` on ``OUTPUT``.
220
221   * The full set of supported formats will be returned, regardless of the
222     format set on ``CAPTURE``.
223   * Check the flags field of :c:type:`v4l2_fmtdesc` for more information
224     about the decoder's capabilities with respect to each coded format.
225     In particular whether or not the decoder has a full-fledged bytestream
226     parser and if the decoder supports dynamic resolution changes.
227
2282. To enumerate the set of supported raw formats, the client may call
229   :c:func:`VIDIOC_ENUM_FMT` on ``CAPTURE``.
230
231   * Only the formats supported for the format currently active on ``OUTPUT``
232     will be returned.
233
234   * In order to enumerate raw formats supported by a given coded format,
235     the client must first set that coded format on ``OUTPUT`` and then
236     enumerate formats on ``CAPTURE``.
237
2383. The client may use :c:func:`VIDIOC_ENUM_FRAMESIZES` to detect supported
239   resolutions for a given format, passing desired pixel format in
240   :c:type:`v4l2_frmsizeenum` ``pixel_format``.
241
242   * Values returned by :c:func:`VIDIOC_ENUM_FRAMESIZES` for a coded pixel
243     format will include all possible coded resolutions supported by the
244     decoder for given coded pixel format.
245
246   * Values returned by :c:func:`VIDIOC_ENUM_FRAMESIZES` for a raw pixel format
247     will include all possible frame buffer resolutions supported by the
248     decoder for given raw pixel format and the coded format currently set on
249     ``OUTPUT``.
250
2514. Supported profiles and levels for the coded format currently set on
252   ``OUTPUT``, if applicable, may be queried using their respective controls
253   via :c:func:`VIDIOC_QUERYCTRL`.
254
255Initialization
256==============
257
2581. Set the coded format on ``OUTPUT`` via :c:func:`VIDIOC_S_FMT`.
259
260   * **Required fields:**
261
262     ``type``
263         a ``V4L2_BUF_TYPE_*`` enum appropriate for ``OUTPUT``.
264
265     ``pixelformat``
266         a coded pixel format.
267
268     ``width``, ``height``
269         coded resolution of the stream; required only if it cannot be parsed
270         from the stream for the given coded format; otherwise the decoder will
271         use this resolution as a placeholder resolution that will likely change
272         as soon as it can parse the actual coded resolution from the stream.
273
274     ``sizeimage``
275         desired size of ``OUTPUT`` buffers; the decoder may adjust it to
276         match hardware requirements.
277
278     other fields
279         follow standard semantics.
280
281   * **Returned fields:**
282
283     ``sizeimage``
284         adjusted size of ``OUTPUT`` buffers.
285
286   * The ``CAPTURE`` format will be updated with an appropriate frame buffer
287     resolution instantly based on the width and height returned by
288     :c:func:`VIDIOC_S_FMT`.
289     However, for coded formats that include stream resolution information,
290     after the decoder is done parsing the information from the stream, it will
291     update the ``CAPTURE`` format with new values and signal a source change
292     event, regardless of whether they match the values set by the client or
293     not.
294
295   .. important::
296
297      Changing the ``OUTPUT`` format may change the currently set ``CAPTURE``
298      format. How the new ``CAPTURE`` format is determined is up to the decoder
299      and the client must ensure it matches its needs afterwards.
300
3012.  Allocate source (bytestream) buffers via :c:func:`VIDIOC_REQBUFS` on
302    ``OUTPUT``.
303
304    * **Required fields:**
305
306      ``count``
307          requested number of buffers to allocate; greater than zero.
308
309      ``type``
310          a ``V4L2_BUF_TYPE_*`` enum appropriate for ``OUTPUT``.
311
312      ``memory``
313          follows standard semantics.
314
315    * **Returned fields:**
316
317      ``count``
318          the actual number of buffers allocated.
319
320    .. warning::
321
322       The actual number of allocated buffers may differ from the ``count``
323       given. The client must check the updated value of ``count`` after the
324       call returns.
325
326    Alternatively, :c:func:`VIDIOC_CREATE_BUFS` on the ``OUTPUT`` queue can be
327    used to have more control over buffer allocation.
328
329    * **Required fields:**
330
331      ``count``
332          requested number of buffers to allocate; greater than zero.
333
334      ``type``
335          a ``V4L2_BUF_TYPE_*`` enum appropriate for ``OUTPUT``.
336
337      ``memory``
338          follows standard semantics.
339
340      ``format``
341          follows standard semantics.
342
343    * **Returned fields:**
344
345      ``count``
346          adjusted to the number of allocated buffers.
347
348    .. warning::
349
350       The actual number of allocated buffers may differ from the ``count``
351       given. The client must check the updated value of ``count`` after the
352       call returns.
353
3543.  Start streaming on the ``OUTPUT`` queue via :c:func:`VIDIOC_STREAMON`.
355
3564.  **This step only applies to coded formats that contain resolution information
357    in the stream.** Continue queuing/dequeuing bytestream buffers to/from the
358    ``OUTPUT`` queue via :c:func:`VIDIOC_QBUF` and :c:func:`VIDIOC_DQBUF`. The
359    buffers will be processed and returned to the client in order, until
360    required metadata to configure the ``CAPTURE`` queue are found. This is
361    indicated by the decoder sending a ``V4L2_EVENT_SOURCE_CHANGE`` event with
362    ``changes`` set to ``V4L2_EVENT_SRC_CH_RESOLUTION``.
363
364    * It is not an error if the first buffer does not contain enough data for
365      this to occur. Processing of the buffers will continue as long as more
366      data is needed.
367
368    * If data in a buffer that triggers the event is required to decode the
369      first frame, it will not be returned to the client, until the
370      initialization sequence completes and the frame is decoded.
371
372    * If the client has not set the coded resolution of the stream on its own,
373      calling :c:func:`VIDIOC_G_FMT`, :c:func:`VIDIOC_S_FMT`,
374      :c:func:`VIDIOC_TRY_FMT` or :c:func:`VIDIOC_REQBUFS` on the ``CAPTURE``
375      queue will not return the real values for the stream until a
376      ``V4L2_EVENT_SOURCE_CHANGE`` event with ``changes`` set to
377      ``V4L2_EVENT_SRC_CH_RESOLUTION`` is signaled.
378
379    .. important::
380
381       Any client query issued after the decoder queues the event will return
382       values applying to the just parsed stream, including queue formats,
383       selection rectangles and controls.
384
385    .. note::
386
387       A client capable of acquiring stream parameters from the bytestream on
388       its own may attempt to set the width and height of the ``OUTPUT`` format
389       to non-zero values matching the coded size of the stream, skip this step
390       and continue with the `Capture Setup` sequence. However, it must not
391       rely on any driver queries regarding stream parameters, such as
392       selection rectangles and controls, since the decoder has not parsed them
393       from the stream yet. If the values configured by the client do not match
394       those parsed by the decoder, a `Dynamic Resolution Change` will be
395       triggered to reconfigure them.
396
397    .. note::
398
399       No decoded frames are produced during this phase.
400
4015.  Continue with the `Capture Setup` sequence.
402
403Capture Setup
404=============
405
4061.  Call :c:func:`VIDIOC_G_FMT` on the ``CAPTURE`` queue to get format for the
407    destination buffers parsed/decoded from the bytestream.
408
409    * **Required fields:**
410
411      ``type``
412          a ``V4L2_BUF_TYPE_*`` enum appropriate for ``CAPTURE``.
413
414    * **Returned fields:**
415
416      ``width``, ``height``
417          frame buffer resolution for the decoded frames.
418
419      ``pixelformat``
420          pixel format for decoded frames.
421
422      ``num_planes`` (for _MPLANE ``type`` only)
423          number of planes for pixelformat.
424
425      ``sizeimage``, ``bytesperline``
426          as per standard semantics; matching frame buffer format.
427
428    .. note::
429
430       The value of ``pixelformat`` may be any pixel format supported by the
431       decoder for the current stream. The decoder should choose a
432       preferred/optimal format for the default configuration. For example, a
433       YUV format may be preferred over an RGB format if an additional
434       conversion step would be required for the latter.
435
4362.  **Optional.** Acquire the visible resolution via
437    :c:func:`VIDIOC_G_SELECTION`.
438
439    * **Required fields:**
440
441      ``type``
442          a ``V4L2_BUF_TYPE_*`` enum appropriate for ``CAPTURE``.
443
444      ``target``
445          set to ``V4L2_SEL_TGT_COMPOSE``.
446
447    * **Returned fields:**
448
449      ``r.left``, ``r.top``, ``r.width``, ``r.height``
450          the visible rectangle; it must fit within the frame buffer resolution
451          returned by :c:func:`VIDIOC_G_FMT` on ``CAPTURE``.
452
453    * The following selection targets are supported on ``CAPTURE``:
454
455      ``V4L2_SEL_TGT_CROP_BOUNDS``
456          corresponds to the coded resolution of the stream.
457
458      ``V4L2_SEL_TGT_CROP_DEFAULT``
459          the rectangle covering the part of the ``CAPTURE`` buffer that
460          contains meaningful picture data (visible area); width and height
461          will be equal to the visible resolution of the stream.
462
463      ``V4L2_SEL_TGT_CROP``
464          the rectangle within the coded resolution to be output to
465          ``CAPTURE``; defaults to ``V4L2_SEL_TGT_CROP_DEFAULT``; read-only on
466          hardware without additional compose/scaling capabilities.
467
468      ``V4L2_SEL_TGT_COMPOSE_BOUNDS``
469          the maximum rectangle within a ``CAPTURE`` buffer, which the cropped
470          frame can be composed into; equal to ``V4L2_SEL_TGT_CROP`` if the
471          hardware does not support compose/scaling.
472
473      ``V4L2_SEL_TGT_COMPOSE_DEFAULT``
474          equal to ``V4L2_SEL_TGT_CROP``.
475
476      ``V4L2_SEL_TGT_COMPOSE``
477          the rectangle inside a ``CAPTURE`` buffer into which the cropped
478          frame is written; defaults to ``V4L2_SEL_TGT_COMPOSE_DEFAULT``;
479          read-only on hardware without additional compose/scaling capabilities.
480
481      ``V4L2_SEL_TGT_COMPOSE_PADDED``
482          the rectangle inside a ``CAPTURE`` buffer which is overwritten by the
483          hardware; equal to ``V4L2_SEL_TGT_COMPOSE`` if the hardware does not
484          write padding pixels.
485
486    .. warning::
487
488       The values are guaranteed to be meaningful only after the decoder
489       successfully parses the stream metadata. The client must not rely on the
490       query before that happens.
491
4923.  **Optional.** Enumerate ``CAPTURE`` formats via :c:func:`VIDIOC_ENUM_FMT` on
493    the ``CAPTURE`` queue. Once the stream information is parsed and known, the
494    client may use this ioctl to discover which raw formats are supported for
495    given stream and select one of them via :c:func:`VIDIOC_S_FMT`.
496
497    .. important::
498
499       The decoder will return only formats supported for the currently
500       established coded format, as per the ``OUTPUT`` format and/or stream
501       metadata parsed in this initialization sequence, even if more formats
502       may be supported by the decoder in general. In other words, the set
503       returned will be a subset of the initial query mentioned in the
504       `Querying Capabilities` section.
505
506       For example, a decoder may support YUV and RGB formats for resolutions
507       1920x1088 and lower, but only YUV for higher resolutions (due to
508       hardware limitations). After parsing a resolution of 1920x1088 or lower,
509       :c:func:`VIDIOC_ENUM_FMT` may return a set of YUV and RGB pixel formats,
510       but after parsing resolution higher than 1920x1088, the decoder will not
511       return RGB, unsupported for this resolution.
512
513       However, subsequent resolution change event triggered after
514       discovering a resolution change within the same stream may switch
515       the stream into a lower resolution and :c:func:`VIDIOC_ENUM_FMT`
516       would return RGB formats again in that case.
517
5184.  **Optional.** Set the ``CAPTURE`` format via :c:func:`VIDIOC_S_FMT` on the
519    ``CAPTURE`` queue. The client may choose a different format than
520    selected/suggested by the decoder in :c:func:`VIDIOC_G_FMT`.
521
522    * **Required fields:**
523
524      ``type``
525          a ``V4L2_BUF_TYPE_*`` enum appropriate for ``CAPTURE``.
526
527      ``pixelformat``
528          a raw pixel format.
529
530      ``width``, ``height``
531         frame buffer resolution of the decoded stream; typically unchanged from
532	 what was returned with :c:func:`VIDIOC_G_FMT`, but it may be different
533	 if the hardware supports composition and/or scaling.
534
535   * Setting the ``CAPTURE`` format will reset the compose selection rectangles
536     to their default values, based on the new resolution, as described in the
537     previous step.
538
5395. **Optional.** Set the compose rectangle via :c:func:`VIDIOC_S_SELECTION` on
540   the ``CAPTURE`` queue if it is desired and if the decoder has compose and/or
541   scaling capabilities.
542
543   * **Required fields:**
544
545     ``type``
546         a ``V4L2_BUF_TYPE_*`` enum appropriate for ``CAPTURE``.
547
548     ``target``
549         set to ``V4L2_SEL_TGT_COMPOSE``.
550
551     ``r.left``, ``r.top``, ``r.width``, ``r.height``
552         the rectangle inside a ``CAPTURE`` buffer into which the cropped
553         frame is written; defaults to ``V4L2_SEL_TGT_COMPOSE_DEFAULT``;
554         read-only on hardware without additional compose/scaling capabilities.
555
556   * **Returned fields:**
557
558     ``r.left``, ``r.top``, ``r.width``, ``r.height``
559         the visible rectangle; it must fit within the frame buffer resolution
560         returned by :c:func:`VIDIOC_G_FMT` on ``CAPTURE``.
561
562   .. warning::
563
564      The decoder may adjust the compose rectangle to the nearest
565      supported one to meet codec and hardware requirements. The client needs
566      to check the adjusted rectangle returned by :c:func:`VIDIOC_S_SELECTION`.
567
5686.  If all the following conditions are met, the client may resume the decoding
569    instantly:
570
571    * ``sizeimage`` of the new format (determined in previous steps) is less
572      than or equal to the size of currently allocated buffers,
573
574    * the number of buffers currently allocated is greater than or equal to the
575      minimum number of buffers acquired in previous steps. To fulfill this
576      requirement, the client may use :c:func:`VIDIOC_CREATE_BUFS` to add new
577      buffers.
578
579    In that case, the remaining steps do not apply and the client may resume
580    the decoding by one of the following actions:
581
582    * if the ``CAPTURE`` queue is streaming, call :c:func:`VIDIOC_DECODER_CMD`
583      with the ``V4L2_DEC_CMD_START`` command,
584
585    * if the ``CAPTURE`` queue is not streaming, call :c:func:`VIDIOC_STREAMON`
586      on the ``CAPTURE`` queue.
587
588    However, if the client intends to change the buffer set, to lower
589    memory usage or for any other reasons, it may be achieved by following
590    the steps below.
591
5927.  **If the** ``CAPTURE`` **queue is streaming,** keep queuing and dequeuing
593    buffers on the ``CAPTURE`` queue until a buffer marked with the
594    ``V4L2_BUF_FLAG_LAST`` flag is dequeued.
595
5968.  **If the** ``CAPTURE`` **queue is streaming,** call :c:func:`VIDIOC_STREAMOFF`
597    on the ``CAPTURE`` queue to stop streaming.
598
599    .. warning::
600
601       The ``OUTPUT`` queue must remain streaming. Calling
602       :c:func:`VIDIOC_STREAMOFF` on it would abort the sequence and trigger a
603       seek.
604
6059.  **If the** ``CAPTURE`` **queue has buffers allocated,** free the ``CAPTURE``
606    buffers using :c:func:`VIDIOC_REQBUFS`.
607
608    * **Required fields:**
609
610      ``count``
611          set to 0.
612
613      ``type``
614          a ``V4L2_BUF_TYPE_*`` enum appropriate for ``CAPTURE``.
615
616      ``memory``
617          follows standard semantics.
618
61910. Allocate ``CAPTURE`` buffers via :c:func:`VIDIOC_REQBUFS` on the
620    ``CAPTURE`` queue.
621
622    * **Required fields:**
623
624      ``count``
625          requested number of buffers to allocate; greater than zero.
626
627      ``type``
628          a ``V4L2_BUF_TYPE_*`` enum appropriate for ``CAPTURE``.
629
630      ``memory``
631          follows standard semantics.
632
633    * **Returned fields:**
634
635      ``count``
636          actual number of buffers allocated.
637
638    .. warning::
639
640       The actual number of allocated buffers may differ from the ``count``
641       given. The client must check the updated value of ``count`` after the
642       call returns.
643
644    .. note::
645
646       To allocate more than the minimum number of buffers (for pipeline
647       depth), the client may query the ``V4L2_CID_MIN_BUFFERS_FOR_CAPTURE``
648       control to get the minimum number of buffers required, and pass the
649       obtained value plus the number of additional buffers needed in the
650       ``count`` field to :c:func:`VIDIOC_REQBUFS`.
651
652    Alternatively, :c:func:`VIDIOC_CREATE_BUFS` on the ``CAPTURE`` queue can be
653    used to have more control over buffer allocation. For example, by
654    allocating buffers larger than the current ``CAPTURE`` format, future
655    resolution changes can be accommodated.
656
657    * **Required fields:**
658
659      ``count``
660          requested number of buffers to allocate; greater than zero.
661
662      ``type``
663          a ``V4L2_BUF_TYPE_*`` enum appropriate for ``CAPTURE``.
664
665      ``memory``
666          follows standard semantics.
667
668      ``format``
669          a format representing the maximum framebuffer resolution to be
670          accommodated by newly allocated buffers.
671
672    * **Returned fields:**
673
674      ``count``
675          adjusted to the number of allocated buffers.
676
677    .. warning::
678
679        The actual number of allocated buffers may differ from the ``count``
680        given. The client must check the updated value of ``count`` after the
681        call returns.
682
683    .. note::
684
685       To allocate buffers for a format different than parsed from the stream
686       metadata, the client must proceed as follows, before the metadata
687       parsing is initiated:
688
689       * set width and height of the ``OUTPUT`` format to desired coded resolution to
690         let the decoder configure the ``CAPTURE`` format appropriately,
691
692       * query the ``CAPTURE`` format using :c:func:`VIDIOC_G_FMT` and save it
693         until this step.
694
695       The format obtained in the query may be then used with
696       :c:func:`VIDIOC_CREATE_BUFS` in this step to allocate the buffers.
697
69811. Call :c:func:`VIDIOC_STREAMON` on the ``CAPTURE`` queue to start decoding
699    frames.
700
701Decoding
702========
703
704This state is reached after the `Capture Setup` sequence finishes successfully.
705In this state, the client queues and dequeues buffers to both queues via
706:c:func:`VIDIOC_QBUF` and :c:func:`VIDIOC_DQBUF`, following the standard
707semantics.
708
709The content of the source ``OUTPUT`` buffers depends on the active coded pixel
710format and may be affected by codec-specific extended controls, as stated in
711the documentation of each format.
712
713Both queues operate independently, following the standard behavior of V4L2
714buffer queues and memory-to-memory devices. In addition, the order of decoded
715frames dequeued from the ``CAPTURE`` queue may differ from the order of queuing
716coded frames to the ``OUTPUT`` queue, due to properties of the selected coded
717format, e.g. frame reordering.
718
719The client must not assume any direct relationship between ``CAPTURE``
720and ``OUTPUT`` buffers and any specific timing of buffers becoming
721available to dequeue. Specifically:
722
723* a buffer queued to ``OUTPUT`` may result in no buffers being produced
724  on ``CAPTURE`` (e.g. if it does not contain encoded data, or if only
725  metadata syntax structures are present in it),
726
727* a buffer queued to ``OUTPUT`` may result in more than one buffer produced
728  on ``CAPTURE`` (if the encoded data contained more than one frame, or if
729  returning a decoded frame allowed the decoder to return a frame that
730  preceded it in decode, but succeeded it in the display order),
731
732* a buffer queued to ``OUTPUT`` may result in a buffer being produced on
733  ``CAPTURE`` later into decode process, and/or after processing further
734  ``OUTPUT`` buffers, or be returned out of order, e.g. if display
735  reordering is used,
736
737* buffers may become available on the ``CAPTURE`` queue without additional
738  buffers queued to ``OUTPUT`` (e.g. during drain or ``EOS``), because of the
739  ``OUTPUT`` buffers queued in the past whose decoding results are only
740  available at later time, due to specifics of the decoding process.
741
742.. note::
743
744   To allow matching decoded ``CAPTURE`` buffers with ``OUTPUT`` buffers they
745   originated from, the client can set the ``timestamp`` field of the
746   :c:type:`v4l2_buffer` struct when queuing an ``OUTPUT`` buffer. The
747   ``CAPTURE`` buffer(s), which resulted from decoding that ``OUTPUT`` buffer
748   will have their ``timestamp`` field set to the same value when dequeued.
749
750   In addition to the straightforward case of one ``OUTPUT`` buffer producing
751   one ``CAPTURE`` buffer, the following cases are defined:
752
753   * one ``OUTPUT`` buffer generates multiple ``CAPTURE`` buffers: the same
754     ``OUTPUT`` timestamp will be copied to multiple ``CAPTURE`` buffers.
755
756   * multiple ``OUTPUT`` buffers generate one ``CAPTURE`` buffer: timestamp of
757     the ``OUTPUT`` buffer queued first will be copied.
758
759   * the decoding order differs from the display order (i.e. the ``CAPTURE``
760     buffers are out-of-order compared to the ``OUTPUT`` buffers): ``CAPTURE``
761     timestamps will not retain the order of ``OUTPUT`` timestamps.
762
763.. note::
764
765   The backing memory of ``CAPTURE`` buffers that are used as reference frames
766   by the stream may be read by the hardware even after they are dequeued.
767   Consequently, the client should avoid writing into this memory while the
768   ``CAPTURE`` queue is streaming. Failure to observe this may result in
769   corruption of decoded frames.
770
771   Similarly, when using a memory type other than ``V4L2_MEMORY_MMAP``, the
772   client should make sure that each ``CAPTURE`` buffer is always queued with
773   the same backing memory for as long as the ``CAPTURE`` queue is streaming.
774   The reason for this is that V4L2 buffer indices can be used by drivers to
775   identify frames. Thus, if the backing memory of a reference frame is
776   submitted under a different buffer ID, the driver may misidentify it and
777   decode a new frame into it while it is still in use, resulting in corruption
778   of the following frames.
779
780During the decoding, the decoder may initiate one of the special sequences, as
781listed below. The sequences will result in the decoder returning all the
782``CAPTURE`` buffers that originated from all the ``OUTPUT`` buffers processed
783before the sequence started. Last of the buffers will have the
784``V4L2_BUF_FLAG_LAST`` flag set. To determine the sequence to follow, the client
785must check if there is any pending event and:
786
787* if a ``V4L2_EVENT_SOURCE_CHANGE`` event with ``changes`` set to
788  ``V4L2_EVENT_SRC_CH_RESOLUTION`` is pending, the `Dynamic Resolution
789  Change` sequence needs to be followed,
790
791* if a ``V4L2_EVENT_EOS`` event is pending, the `End of Stream` sequence needs
792  to be followed.
793
794Some of the sequences can be intermixed with each other and need to be handled
795as they happen. The exact operation is documented for each sequence.
796
797Should a decoding error occur, it will be reported to the client with the level
798of details depending on the decoder capabilities. Specifically:
799
800* the CAPTURE buffer that contains the results of the failed decode operation
801  will be returned with the V4L2_BUF_FLAG_ERROR flag set,
802
803* if the decoder is able to precisely report the OUTPUT buffer that triggered
804  the error, such buffer will be returned with the V4L2_BUF_FLAG_ERROR flag
805  set.
806
807In case of a fatal failure that does not allow the decoding to continue, any
808further operations on corresponding decoder file handle will return the -EIO
809error code. The client may close the file handle and open a new one, or
810alternatively reinitialize the instance by stopping streaming on both queues,
811releasing all buffers and performing the Initialization sequence again.
812
813Seek
814====
815
816Seek is controlled by the ``OUTPUT`` queue, as it is the source of coded data.
817The seek does not require any specific operation on the ``CAPTURE`` queue, but
818it may be affected as per normal decoder operation.
819
8201. Stop the ``OUTPUT`` queue to begin the seek sequence via
821   :c:func:`VIDIOC_STREAMOFF`.
822
823   * **Required fields:**
824
825     ``type``
826         a ``V4L2_BUF_TYPE_*`` enum appropriate for ``OUTPUT``.
827
828   * The decoder will drop all the pending ``OUTPUT`` buffers and they must be
829     treated as returned to the client (following standard semantics).
830
8312. Restart the ``OUTPUT`` queue via :c:func:`VIDIOC_STREAMON`.
832
833   * **Required fields:**
834
835     ``type``
836         a ``V4L2_BUF_TYPE_*`` enum appropriate for ``OUTPUT``.
837
838   * The decoder will start accepting new source bytestream buffers after the
839     call returns.
840
8413. Start queuing buffers containing coded data after the seek to the ``OUTPUT``
842   queue until a suitable resume point is found.
843
844   .. note::
845
846      There is no requirement to begin queuing coded data starting exactly
847      from a resume point (e.g. SPS or a keyframe). Any queued ``OUTPUT``
848      buffers will be processed and returned to the client until a suitable
849      resume point is found.  While looking for a resume point, the decoder
850      should not produce any decoded frames into ``CAPTURE`` buffers.
851
852      Some hardware is known to mishandle seeks to a non-resume point. Such an
853      operation may result in an unspecified number of corrupted decoded frames
854      being made available on the ``CAPTURE`` queue. Drivers must ensure that
855      no fatal decoding errors or crashes occur, and implement any necessary
856      handling and workarounds for hardware issues related to seek operations.
857
858   .. warning::
859
860      In case of the H.264/HEVC codec, the client must take care not to seek
861      over a change of SPS/PPS. Even though the target frame could be a
862      keyframe, the stale SPS/PPS inside decoder state would lead to undefined
863      results when decoding. Although the decoder must handle that case without
864      a crash or a fatal decode error, the client must not expect a sensible
865      decode output.
866
867      If the hardware can detect such corrupted decoded frames, then
868      corresponding buffers will be returned to the client with the
869      V4L2_BUF_FLAG_ERROR set. See the `Decoding` section for further
870      description of decode error reporting.
871
8724. After a resume point is found, the decoder will start returning ``CAPTURE``
873   buffers containing decoded frames.
874
875.. important::
876
877   A seek may result in the `Dynamic Resolution Change` sequence being
878   initiated, due to the seek target having decoding parameters different from
879   the part of the stream decoded before the seek. The sequence must be handled
880   as per normal decoder operation.
881
882.. warning::
883
884   It is not specified when the ``CAPTURE`` queue starts producing buffers
885   containing decoded data from the ``OUTPUT`` buffers queued after the seek,
886   as it operates independently from the ``OUTPUT`` queue.
887
888   The decoder may return a number of remaining ``CAPTURE`` buffers containing
889   decoded frames originating from the ``OUTPUT`` buffers queued before the
890   seek sequence is performed.
891
892   The ``VIDIOC_STREAMOFF`` operation discards any remaining queued
893   ``OUTPUT`` buffers, which means that not all of the ``OUTPUT`` buffers
894   queued before the seek sequence may have matching ``CAPTURE`` buffers
895   produced.  For example, given the sequence of operations on the
896   ``OUTPUT`` queue:
897
898     QBUF(A), QBUF(B), STREAMOFF(), STREAMON(), QBUF(G), QBUF(H),
899
900   any of the following results on the ``CAPTURE`` queue is allowed:
901
902     {A', B', G', H'}, {A', G', H'}, {G', H'}.
903
904   To determine the CAPTURE buffer containing the first decoded frame after the
905   seek, the client may observe the timestamps to match the CAPTURE and OUTPUT
906   buffers or use V4L2_DEC_CMD_STOP and V4L2_DEC_CMD_START to drain the
907   decoder.
908
909.. note::
910
911   To achieve instantaneous seek, the client may restart streaming on the
912   ``CAPTURE`` queue too to discard decoded, but not yet dequeued buffers.
913
914Dynamic Resolution Change
915=========================
916
917Streams that include resolution metadata in the bytestream may require switching
918to a different resolution during the decoding.
919
920.. note::
921
922   Not all decoders can detect resolution changes. Those that do set the
923   ``V4L2_FMT_FLAG_DYN_RESOLUTION`` flag for the coded format when
924   :c:func:`VIDIOC_ENUM_FMT` is called.
925
926The sequence starts when the decoder detects a coded frame with one or more of
927the following parameters different from those previously established (and
928reflected by corresponding queries):
929
930* coded resolution (``OUTPUT`` width and height),
931
932* visible resolution (selection rectangles),
933
934* the minimum number of buffers needed for decoding,
935
936* bit-depth of the bitstream has been changed.
937
938Whenever that happens, the decoder must proceed as follows:
939
9401.  After encountering a resolution change in the stream, the decoder sends a
941    ``V4L2_EVENT_SOURCE_CHANGE`` event with ``changes`` set to
942    ``V4L2_EVENT_SRC_CH_RESOLUTION``.
943
944    .. important::
945
946       Any client query issued after the decoder queues the event will return
947       values applying to the stream after the resolution change, including
948       queue formats, selection rectangles and controls.
949
9502.  The decoder will then process and decode all remaining buffers from before
951    the resolution change point.
952
953    * The last buffer from before the change must be marked with the
954      ``V4L2_BUF_FLAG_LAST`` flag, similarly to the `Drain` sequence above.
955
956    .. warning::
957
958       The last buffer may be empty (with :c:type:`v4l2_buffer` ``bytesused``
959       = 0) and in that case it must be ignored by the client, as it does not
960       contain a decoded frame.
961
962    .. note::
963
964       Any attempt to dequeue more ``CAPTURE`` buffers beyond the buffer marked
965       with ``V4L2_BUF_FLAG_LAST`` will result in a -EPIPE error from
966       :c:func:`VIDIOC_DQBUF`.
967
968The client must continue the sequence as described below to continue the
969decoding process.
970
9711.  Dequeue the source change event.
972
973    .. important::
974
975       A source change triggers an implicit decoder drain, similar to the
976       explicit `Drain` sequence. The decoder is stopped after it completes.
977       The decoding process must be resumed with either a pair of calls to
978       :c:func:`VIDIOC_STREAMOFF` and :c:func:`VIDIOC_STREAMON` on the
979       ``CAPTURE`` queue, or a call to :c:func:`VIDIOC_DECODER_CMD` with the
980       ``V4L2_DEC_CMD_START`` command.
981
9822.  Continue with the `Capture Setup` sequence.
983
984.. note::
985
986   During the resolution change sequence, the ``OUTPUT`` queue must remain
987   streaming. Calling :c:func:`VIDIOC_STREAMOFF` on the ``OUTPUT`` queue would
988   abort the sequence and initiate a seek.
989
990   In principle, the ``OUTPUT`` queue operates separately from the ``CAPTURE``
991   queue and this remains true for the duration of the entire resolution change
992   sequence as well.
993
994   The client should, for best performance and simplicity, keep queuing/dequeuing
995   buffers to/from the ``OUTPUT`` queue even while processing this sequence.
996
997Drain
998=====
999
1000To ensure that all queued ``OUTPUT`` buffers have been processed and related
1001``CAPTURE`` buffers are given to the client, the client must follow the drain
1002sequence described below. After the drain sequence ends, the client has
1003received all decoded frames for all ``OUTPUT`` buffers queued before the
1004sequence was started.
1005
10061. Begin drain by issuing :c:func:`VIDIOC_DECODER_CMD`.
1007
1008   * **Required fields:**
1009
1010     ``cmd``
1011         set to ``V4L2_DEC_CMD_STOP``.
1012
1013     ``flags``
1014         set to 0.
1015
1016     ``pts``
1017         set to 0.
1018
1019   .. warning::
1020
1021      The sequence can be only initiated if both ``OUTPUT`` and ``CAPTURE``
1022      queues are streaming. For compatibility reasons, the call to
1023      :c:func:`VIDIOC_DECODER_CMD` will not fail even if any of the queues is
1024      not streaming, but at the same time it will not initiate the `Drain`
1025      sequence and so the steps described below would not be applicable.
1026
10272. Any ``OUTPUT`` buffers queued by the client before the
1028   :c:func:`VIDIOC_DECODER_CMD` was issued will be processed and decoded as
1029   normal. The client must continue to handle both queues independently,
1030   similarly to normal decode operation. This includes:
1031
1032   * handling any operations triggered as a result of processing those buffers,
1033     such as the `Dynamic Resolution Change` sequence, before continuing with
1034     the drain sequence,
1035
1036   * queuing and dequeuing ``CAPTURE`` buffers, until a buffer marked with the
1037     ``V4L2_BUF_FLAG_LAST`` flag is dequeued,
1038
1039     .. warning::
1040
1041        The last buffer may be empty (with :c:type:`v4l2_buffer`
1042        ``bytesused`` = 0) and in that case it must be ignored by the client,
1043        as it does not contain a decoded frame.
1044
1045     .. note::
1046
1047        Any attempt to dequeue more ``CAPTURE`` buffers beyond the buffer
1048        marked with ``V4L2_BUF_FLAG_LAST`` will result in a -EPIPE error from
1049        :c:func:`VIDIOC_DQBUF`.
1050
1051   * dequeuing processed ``OUTPUT`` buffers, until all the buffers queued
1052     before the ``V4L2_DEC_CMD_STOP`` command are dequeued,
1053
1054   * dequeuing the ``V4L2_EVENT_EOS`` event, if the client subscribed to it.
1055
1056   .. note::
1057
1058      For backwards compatibility, the decoder will signal a ``V4L2_EVENT_EOS``
1059      event when the last frame has been decoded and all frames are ready to be
1060      dequeued. It is a deprecated behavior and the client must not rely on it.
1061      The ``V4L2_BUF_FLAG_LAST`` buffer flag should be used instead.
1062
10633. Once all the ``OUTPUT`` buffers queued before the ``V4L2_DEC_CMD_STOP`` call
1064   are dequeued and the last ``CAPTURE`` buffer is dequeued, the decoder is
1065   stopped and it will accept, but not process, any newly queued ``OUTPUT``
1066   buffers until the client issues any of the following operations:
1067
1068   * ``V4L2_DEC_CMD_START`` - the decoder will not be reset and will resume
1069     operation normally, with all the state from before the drain,
1070
1071   * a pair of :c:func:`VIDIOC_STREAMOFF` and :c:func:`VIDIOC_STREAMON` on the
1072     ``CAPTURE`` queue - the decoder will resume the operation normally,
1073     however any ``CAPTURE`` buffers still in the queue will be returned to the
1074     client,
1075
1076   * a pair of :c:func:`VIDIOC_STREAMOFF` and :c:func:`VIDIOC_STREAMON` on the
1077     ``OUTPUT`` queue - any pending source buffers will be returned to the
1078     client and the `Seek` sequence will be triggered.
1079
1080.. note::
1081
1082   Once the drain sequence is initiated, the client needs to drive it to
1083   completion, as described by the steps above, unless it aborts the process by
1084   issuing :c:func:`VIDIOC_STREAMOFF` on any of the ``OUTPUT`` or ``CAPTURE``
1085   queues.  The client is not allowed to issue ``V4L2_DEC_CMD_START`` or
1086   ``V4L2_DEC_CMD_STOP`` again while the drain sequence is in progress and they
1087   will fail with -EBUSY error code if attempted.
1088
1089   Although not mandatory, the availability of decoder commands may be queried
1090   using :c:func:`VIDIOC_TRY_DECODER_CMD`.
1091
1092End of Stream
1093=============
1094
1095If the decoder encounters an end of stream marking in the stream, the decoder
1096will initiate the `Drain` sequence, which the client must handle as described
1097above, skipping the initial :c:func:`VIDIOC_DECODER_CMD`.
1098
1099Commit Points
1100=============
1101
1102Setting formats and allocating buffers trigger changes in the behavior of the
1103decoder.
1104
11051. Setting the format on the ``OUTPUT`` queue may change the set of formats
1106   supported/advertised on the ``CAPTURE`` queue. In particular, it also means
1107   that the ``CAPTURE`` format may be reset and the client must not rely on the
1108   previously set format being preserved.
1109
11102. Enumerating formats on the ``CAPTURE`` queue always returns only formats
1111   supported for the current ``OUTPUT`` format.
1112
11133. Setting the format on the ``CAPTURE`` queue does not change the list of
1114   formats available on the ``OUTPUT`` queue. An attempt to set a ``CAPTURE``
1115   format that is not supported for the currently selected ``OUTPUT`` format
1116   will result in the decoder adjusting the requested ``CAPTURE`` format to a
1117   supported one.
1118
11194. Enumerating formats on the ``OUTPUT`` queue always returns the full set of
1120   supported coded formats, irrespectively of the current ``CAPTURE`` format.
1121
11225. While buffers are allocated on any of the ``OUTPUT`` or ``CAPTURE`` queues,
1123   the client must not change the format on the ``OUTPUT`` queue. Drivers will
1124   return the -EBUSY error code for any such format change attempt.
1125
1126To summarize, setting formats and allocation must always start with the
1127``OUTPUT`` queue and the ``OUTPUT`` queue is the master that governs the
1128set of supported formats for the ``CAPTURE`` queue.
1129