~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/Documentation/userspace-api/media/v4l/dev-decoder.rst

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /Documentation/userspace-api/media/v4l/dev-decoder.rst (Architecture i386) and /Documentation/userspace-api/media/v4l/dev-decoder.rst (Architecture m68k)


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

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php