cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

buffer.rst (31586B)


      1.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
      2.. c:namespace:: V4L
      3
      4.. _buffer:
      5
      6*******
      7Buffers
      8*******
      9
     10A buffer contains data exchanged by application and driver using one of
     11the Streaming I/O methods. In the multi-planar API, the data is held in
     12planes, while the buffer structure acts as a container for the planes.
     13Only pointers to buffers (planes) are exchanged, the data itself is not
     14copied. These pointers, together with meta-information like timestamps
     15or field parity, are stored in a struct :c:type:`v4l2_buffer`,
     16argument to the :ref:`VIDIOC_QUERYBUF`,
     17:ref:`VIDIOC_QBUF <VIDIOC_QBUF>` and
     18:ref:`VIDIOC_DQBUF <VIDIOC_QBUF>` ioctl. In the multi-planar API,
     19some plane-specific members of struct :c:type:`v4l2_buffer`,
     20such as pointers and sizes for each plane, are stored in
     21struct :c:type:`v4l2_plane` instead. In that case,
     22struct :c:type:`v4l2_buffer` contains an array of plane structures.
     23
     24Dequeued video buffers come with timestamps. The driver decides at which
     25part of the frame and with which clock the timestamp is taken. Please
     26see flags in the masks ``V4L2_BUF_FLAG_TIMESTAMP_MASK`` and
     27``V4L2_BUF_FLAG_TSTAMP_SRC_MASK`` in :ref:`buffer-flags`. These flags
     28are always valid and constant across all buffers during the whole video
     29stream. Changes in these flags may take place as a side effect of
     30:ref:`VIDIOC_S_INPUT <VIDIOC_G_INPUT>` or
     31:ref:`VIDIOC_S_OUTPUT <VIDIOC_G_OUTPUT>` however. The
     32``V4L2_BUF_FLAG_TIMESTAMP_COPY`` timestamp type which is used by e.g. on
     33mem-to-mem devices is an exception to the rule: the timestamp source
     34flags are copied from the OUTPUT video buffer to the CAPTURE video
     35buffer.
     36
     37Interactions between formats, controls and buffers
     38==================================================
     39
     40V4L2 exposes parameters that influence the buffer size, or the way data is
     41laid out in the buffer. Those parameters are exposed through both formats and
     42controls. One example of such a control is the ``V4L2_CID_ROTATE`` control
     43that modifies the direction in which pixels are stored in the buffer, as well
     44as the buffer size when the selected format includes padding at the end of
     45lines.
     46
     47The set of information needed to interpret the content of a buffer (e.g. the
     48pixel format, the line stride, the tiling orientation or the rotation) is
     49collectively referred to in the rest of this section as the buffer layout.
     50
     51Controls that can modify the buffer layout shall set the
     52``V4L2_CTRL_FLAG_MODIFY_LAYOUT`` flag.
     53
     54Modifying formats or controls that influence the buffer size or layout require
     55the stream to be stopped. Any attempt at such a modification while the stream
     56is active shall cause the ioctl setting the format or the control to return
     57the ``EBUSY`` error code. In that case drivers shall also set the
     58``V4L2_CTRL_FLAG_GRABBED`` flag when calling
     59:c:func:`VIDIOC_QUERYCTRL` or :c:func:`VIDIOC_QUERY_EXT_CTRL` for such a
     60control while the stream is active.
     61
     62.. note::
     63
     64   The :c:func:`VIDIOC_S_SELECTION` ioctl can, depending on the hardware (for
     65   instance if the device doesn't include a scaler), modify the format in
     66   addition to the selection rectangle. Similarly, the
     67   :c:func:`VIDIOC_S_INPUT`, :c:func:`VIDIOC_S_OUTPUT`, :c:func:`VIDIOC_S_STD`
     68   and :c:func:`VIDIOC_S_DV_TIMINGS` ioctls can also modify the format and
     69   selection rectangles. When those ioctls result in a buffer size or layout
     70   change, drivers shall handle that condition as they would handle it in the
     71   :c:func:`VIDIOC_S_FMT` ioctl in all cases described in this section.
     72
     73Controls that only influence the buffer layout can be modified at any time
     74when the stream is stopped. As they don't influence the buffer size, no
     75special handling is needed to synchronize those controls with buffer
     76allocation and the ``V4L2_CTRL_FLAG_GRABBED`` flag is cleared once the
     77stream is stopped.
     78
     79Formats and controls that influence the buffer size interact with buffer
     80allocation. The simplest way to handle this is for drivers to always require
     81buffers to be reallocated in order to change those formats or controls. In
     82that case, to perform such changes, userspace applications shall first stop
     83the video stream with the :c:func:`VIDIOC_STREAMOFF` ioctl if it is running
     84and free all buffers with the :c:func:`VIDIOC_REQBUFS` ioctl if they are
     85allocated. After freeing all buffers the ``V4L2_CTRL_FLAG_GRABBED`` flag
     86for controls is cleared. The format or controls can then be modified, and
     87buffers shall then be reallocated and the stream restarted. A typical ioctl
     88sequence is
     89
     90 #. VIDIOC_STREAMOFF
     91 #. VIDIOC_REQBUFS(0)
     92 #. VIDIOC_S_EXT_CTRLS
     93 #. VIDIOC_S_FMT
     94 #. VIDIOC_REQBUFS(n)
     95 #. VIDIOC_QBUF
     96 #. VIDIOC_STREAMON
     97
     98The second :c:func:`VIDIOC_REQBUFS` call will take the new format and control
     99value into account to compute the buffer size to allocate. Applications can
    100also retrieve the size by calling the :c:func:`VIDIOC_G_FMT` ioctl if needed.
    101
    102.. note::
    103
    104   The API doesn't mandate the above order for control (3.) and format (4.)
    105   changes. Format and controls can be set in a different order, or even
    106   interleaved, depending on the device and use case. For instance some
    107   controls might behave differently for different pixel formats, in which
    108   case the format might need to be set first.
    109
    110When reallocation is required, any attempt to modify format or controls that
    111influences the buffer size while buffers are allocated shall cause the format
    112or control set ioctl to return the ``EBUSY`` error. Any attempt to queue a
    113buffer too small for the current format or controls shall cause the
    114:c:func:`VIDIOC_QBUF` ioctl to return a ``EINVAL`` error.
    115
    116Buffer reallocation is an expensive operation. To avoid that cost, drivers can
    117(and are encouraged to) allow format or controls that influence the buffer
    118size to be changed with buffers allocated. In that case, a typical ioctl
    119sequence to modify format and controls is
    120
    121 #. VIDIOC_STREAMOFF
    122 #. VIDIOC_S_EXT_CTRLS
    123 #. VIDIOC_S_FMT
    124 #. VIDIOC_QBUF
    125 #. VIDIOC_STREAMON
    126
    127For this sequence to operate correctly, queued buffers need to be large enough
    128for the new format or controls. Drivers shall return a ``ENOSPC`` error in
    129response to format change (:c:func:`VIDIOC_S_FMT`) or control changes
    130(:c:func:`VIDIOC_S_CTRL` or :c:func:`VIDIOC_S_EXT_CTRLS`) if buffers too small
    131for the new format are currently queued. As a simplification, drivers are
    132allowed to return a ``EBUSY`` error from these ioctls if any buffer is
    133currently queued, without checking the queued buffers sizes.
    134
    135Additionally, drivers shall return a ``EINVAL`` error from the
    136:c:func:`VIDIOC_QBUF` ioctl if the buffer being queued is too small for the
    137current format or controls. Together, these requirements ensure that queued
    138buffers will always be large enough for the configured format and controls.
    139
    140Userspace applications can query the buffer size required for a given format
    141and controls by first setting the desired control values and then trying the
    142desired format. The :c:func:`VIDIOC_TRY_FMT` ioctl will return the required
    143buffer size.
    144
    145 #. VIDIOC_S_EXT_CTRLS(x)
    146 #. VIDIOC_TRY_FMT()
    147 #. VIDIOC_S_EXT_CTRLS(y)
    148 #. VIDIOC_TRY_FMT()
    149
    150The :c:func:`VIDIOC_CREATE_BUFS` ioctl can then be used to allocate buffers
    151based on the queried sizes (for instance by allocating a set of buffers large
    152enough for all the desired formats and controls, or by allocating separate set
    153of appropriately sized buffers for each use case).
    154
    155.. c:type:: v4l2_buffer
    156
    157struct v4l2_buffer
    158==================
    159
    160.. tabularcolumns:: |p{2.9cm}|p{2.4cm}|p{12.0cm}|
    161
    162.. cssclass:: longtable
    163
    164.. flat-table:: struct v4l2_buffer
    165    :header-rows:  0
    166    :stub-columns: 0
    167    :widths:       1 2 10
    168
    169    * - __u32
    170      - ``index``
    171      - Number of the buffer, set by the application except when calling
    172	:ref:`VIDIOC_DQBUF <VIDIOC_QBUF>`, then it is set by the
    173	driver. This field can range from zero to the number of buffers
    174	allocated with the :ref:`VIDIOC_REQBUFS` ioctl
    175	(struct :c:type:`v4l2_requestbuffers`
    176	``count``), plus any buffers allocated with
    177	:ref:`VIDIOC_CREATE_BUFS` minus one.
    178    * - __u32
    179      - ``type``
    180      - Type of the buffer, same as struct
    181	:c:type:`v4l2_format` ``type`` or struct
    182	:c:type:`v4l2_requestbuffers` ``type``, set
    183	by the application. See :c:type:`v4l2_buf_type`
    184    * - __u32
    185      - ``bytesused``
    186      - The number of bytes occupied by the data in the buffer. It depends
    187	on the negotiated data format and may change with each buffer for
    188	compressed variable size data like JPEG images. Drivers must set
    189	this field when ``type`` refers to a capture stream, applications
    190	when it refers to an output stream. If the application sets this
    191	to 0 for an output stream, then ``bytesused`` will be set to the
    192	size of the buffer (see the ``length`` field of this struct) by
    193	the driver. For multiplanar formats this field is ignored and the
    194	``planes`` pointer is used instead.
    195    * - __u32
    196      - ``flags``
    197      - Flags set by the application or driver, see :ref:`buffer-flags`.
    198    * - __u32
    199      - ``field``
    200      - Indicates the field order of the image in the buffer, see
    201	:c:type:`v4l2_field`. This field is not used when the buffer
    202	contains VBI data. Drivers must set it when ``type`` refers to a
    203	capture stream, applications when it refers to an output stream.
    204    * - struct timeval
    205      - ``timestamp``
    206      - For capture streams this is time when the first data byte was
    207	captured, as returned by the :c:func:`clock_gettime()` function
    208	for the relevant clock id; see ``V4L2_BUF_FLAG_TIMESTAMP_*`` in
    209	:ref:`buffer-flags`. For output streams the driver stores the
    210	time at which the last data byte was actually sent out in the
    211	``timestamp`` field. This permits applications to monitor the
    212	drift between the video and system clock. For output streams that
    213	use ``V4L2_BUF_FLAG_TIMESTAMP_COPY`` the application has to fill
    214	in the timestamp which will be copied by the driver to the capture
    215	stream.
    216    * - struct :c:type:`v4l2_timecode`
    217      - ``timecode``
    218      - When the ``V4L2_BUF_FLAG_TIMECODE`` flag is set in ``flags``, this
    219	structure contains a frame timecode. In
    220	:c:type:`V4L2_FIELD_ALTERNATE <v4l2_field>` mode the top and
    221	bottom field contain the same timecode. Timecodes are intended to
    222	help video editing and are typically recorded on video tapes, but
    223	also embedded in compressed formats like MPEG. This field is
    224	independent of the ``timestamp`` and ``sequence`` fields.
    225    * - __u32
    226      - ``sequence``
    227      - Set by the driver, counting the frames (not fields!) in sequence.
    228	This field is set for both input and output devices.
    229    * - :cspan:`2`
    230
    231	In :c:type:`V4L2_FIELD_ALTERNATE <v4l2_field>` mode the top and
    232	bottom field have the same sequence number. The count starts at
    233	zero and includes dropped or repeated frames. A dropped frame was
    234	received by an input device but could not be stored due to lack of
    235	free buffer space. A repeated frame was displayed again by an
    236	output device because the application did not pass new data in
    237	time.
    238
    239	.. note::
    240
    241	   This may count the frames received e.g. over USB, without
    242	   taking into account the frames dropped by the remote hardware due
    243	   to limited compression throughput or bus bandwidth. These devices
    244	   identify by not enumerating any video standards, see
    245	   :ref:`standard`.
    246
    247    * - __u32
    248      - ``memory``
    249      - This field must be set by applications and/or drivers in
    250	accordance with the selected I/O method. See :c:type:`v4l2_memory`
    251    * - union {
    252      - ``m``
    253    * - __u32
    254      - ``offset``
    255      - For the single-planar API and when ``memory`` is
    256	``V4L2_MEMORY_MMAP`` this is the offset of the buffer from the
    257	start of the device memory. The value is returned by the driver
    258	and apart of serving as parameter to the
    259	:c:func:`mmap()` function not useful for applications.
    260	See :ref:`mmap` for details
    261    * - unsigned long
    262      - ``userptr``
    263      - For the single-planar API and when ``memory`` is
    264	``V4L2_MEMORY_USERPTR`` this is a pointer to the buffer (casted to
    265	unsigned long type) in virtual memory, set by the application. See
    266	:ref:`userp` for details.
    267    * - struct v4l2_plane
    268      - ``*planes``
    269      - When using the multi-planar API, contains a userspace pointer to
    270	an array of struct :c:type:`v4l2_plane`. The size of
    271	the array should be put in the ``length`` field of this
    272	struct :c:type:`v4l2_buffer` structure.
    273    * - int
    274      - ``fd``
    275      - For the single-plane API and when ``memory`` is
    276	``V4L2_MEMORY_DMABUF`` this is the file descriptor associated with
    277	a DMABUF buffer.
    278    * - }
    279      -
    280    * - __u32
    281      - ``length``
    282      - Size of the buffer (not the payload) in bytes for the
    283	single-planar API. This is set by the driver based on the calls to
    284	:ref:`VIDIOC_REQBUFS` and/or
    285	:ref:`VIDIOC_CREATE_BUFS`. For the
    286	multi-planar API the application sets this to the number of
    287	elements in the ``planes`` array. The driver will fill in the
    288	actual number of valid elements in that array.
    289    * - __u32
    290      - ``reserved2``
    291      - A place holder for future extensions. Drivers and applications
    292	must set this to 0.
    293    * - __u32
    294      - ``request_fd``
    295      - The file descriptor of the request to queue the buffer to. If the flag
    296        ``V4L2_BUF_FLAG_REQUEST_FD`` is set, then the buffer will be
    297	queued to this request. If the flag is not set, then this field will
    298	be ignored.
    299
    300	The ``V4L2_BUF_FLAG_REQUEST_FD`` flag and this field are only used by
    301	:ref:`ioctl VIDIOC_QBUF <VIDIOC_QBUF>` and ignored by other ioctls that
    302	take a :c:type:`v4l2_buffer` as argument.
    303
    304	Applications should not set ``V4L2_BUF_FLAG_REQUEST_FD`` for any ioctls
    305	other than :ref:`VIDIOC_QBUF <VIDIOC_QBUF>`.
    306
    307	If the device does not support requests, then ``EBADR`` will be returned.
    308	If requests are supported but an invalid request file descriptor is
    309	given, then ``EINVAL`` will be returned.
    310
    311
    312.. c:type:: v4l2_plane
    313
    314struct v4l2_plane
    315=================
    316
    317.. tabularcolumns:: |p{3.5cm}|p{3.5cm}|p{10.3cm}|
    318
    319.. cssclass:: longtable
    320
    321.. flat-table::
    322    :header-rows:  0
    323    :stub-columns: 0
    324    :widths:       1 1 2
    325
    326    * - __u32
    327      - ``bytesused``
    328      - The number of bytes occupied by data in the plane (its payload).
    329	Drivers must set this field when ``type`` refers to a capture
    330	stream, applications when it refers to an output stream. If the
    331	application sets this to 0 for an output stream, then
    332	``bytesused`` will be set to the size of the plane (see the
    333	``length`` field of this struct) by the driver.
    334
    335	.. note::
    336
    337	   Note that the actual image data starts at ``data_offset``
    338	   which may not be 0.
    339    * - __u32
    340      - ``length``
    341      - Size in bytes of the plane (not its payload). This is set by the
    342	driver based on the calls to
    343	:ref:`VIDIOC_REQBUFS` and/or
    344	:ref:`VIDIOC_CREATE_BUFS`.
    345    * - union {
    346      - ``m``
    347    * - __u32
    348      - ``mem_offset``
    349      - When the memory type in the containing struct
    350	:c:type:`v4l2_buffer` is ``V4L2_MEMORY_MMAP``, this
    351	is the value that should be passed to :c:func:`mmap()`,
    352	similar to the ``offset`` field in struct
    353	:c:type:`v4l2_buffer`.
    354    * - unsigned long
    355      - ``userptr``
    356      - When the memory type in the containing struct
    357	:c:type:`v4l2_buffer` is ``V4L2_MEMORY_USERPTR``,
    358	this is a userspace pointer to the memory allocated for this plane
    359	by an application.
    360    * - int
    361      - ``fd``
    362      - When the memory type in the containing struct
    363	:c:type:`v4l2_buffer` is ``V4L2_MEMORY_DMABUF``,
    364	this is a file descriptor associated with a DMABUF buffer, similar
    365	to the ``fd`` field in struct :c:type:`v4l2_buffer`.
    366    * - }
    367      -
    368    * - __u32
    369      - ``data_offset``
    370      - Offset in bytes to video data in the plane. Drivers must set this
    371	field when ``type`` refers to a capture stream, applications when
    372	it refers to an output stream.
    373
    374	.. note::
    375
    376	   That data_offset is included  in ``bytesused``. So the
    377	   size of the image in the plane is ``bytesused``-``data_offset``
    378	   at offset ``data_offset`` from the start of the plane.
    379    * - __u32
    380      - ``reserved[11]``
    381      - Reserved for future use. Should be zeroed by drivers and
    382	applications.
    383
    384
    385.. c:type:: v4l2_buf_type
    386
    387enum v4l2_buf_type
    388==================
    389
    390.. cssclass:: longtable
    391
    392.. tabularcolumns:: |p{7.8cm}|p{0.6cm}|p{8.9cm}|
    393
    394.. flat-table::
    395    :header-rows:  0
    396    :stub-columns: 0
    397    :widths:       4 1 9
    398
    399    * - ``V4L2_BUF_TYPE_VIDEO_CAPTURE``
    400      - 1
    401      - Buffer of a single-planar video capture stream, see
    402	:ref:`capture`.
    403    * - ``V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE``
    404      - 9
    405      - Buffer of a multi-planar video capture stream, see
    406	:ref:`capture`.
    407    * - ``V4L2_BUF_TYPE_VIDEO_OUTPUT``
    408      - 2
    409      - Buffer of a single-planar video output stream, see
    410	:ref:`output`.
    411    * - ``V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE``
    412      - 10
    413      - Buffer of a multi-planar video output stream, see :ref:`output`.
    414    * - ``V4L2_BUF_TYPE_VIDEO_OVERLAY``
    415      - 3
    416      - Buffer for video overlay, see :ref:`overlay`.
    417    * - ``V4L2_BUF_TYPE_VBI_CAPTURE``
    418      - 4
    419      - Buffer of a raw VBI capture stream, see :ref:`raw-vbi`.
    420    * - ``V4L2_BUF_TYPE_VBI_OUTPUT``
    421      - 5
    422      - Buffer of a raw VBI output stream, see :ref:`raw-vbi`.
    423    * - ``V4L2_BUF_TYPE_SLICED_VBI_CAPTURE``
    424      - 6
    425      - Buffer of a sliced VBI capture stream, see :ref:`sliced`.
    426    * - ``V4L2_BUF_TYPE_SLICED_VBI_OUTPUT``
    427      - 7
    428      - Buffer of a sliced VBI output stream, see :ref:`sliced`.
    429    * - ``V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY``
    430      - 8
    431      - Buffer for video output overlay (OSD), see :ref:`osd`.
    432    * - ``V4L2_BUF_TYPE_SDR_CAPTURE``
    433      - 11
    434      - Buffer for Software Defined Radio (SDR) capture stream, see
    435	:ref:`sdr`.
    436    * - ``V4L2_BUF_TYPE_SDR_OUTPUT``
    437      - 12
    438      - Buffer for Software Defined Radio (SDR) output stream, see
    439	:ref:`sdr`.
    440    * - ``V4L2_BUF_TYPE_META_CAPTURE``
    441      - 13
    442      - Buffer for metadata capture, see :ref:`metadata`.
    443    * - ``V4L2_BUF_TYPE_META_OUTPUT``
    444      - 14
    445      - Buffer for metadata output, see :ref:`metadata`.
    446
    447
    448.. _buffer-flags:
    449
    450Buffer Flags
    451============
    452
    453.. raw:: latex
    454
    455    \footnotesize
    456
    457.. tabularcolumns:: |p{6.5cm}|p{1.8cm}|p{9.0cm}|
    458
    459.. cssclass:: longtable
    460
    461.. flat-table::
    462    :header-rows:  0
    463    :stub-columns: 0
    464    :widths:       65 18 70
    465
    466    * .. _`V4L2-BUF-FLAG-MAPPED`:
    467
    468      - ``V4L2_BUF_FLAG_MAPPED``
    469      - 0x00000001
    470      - The buffer resides in device memory and has been mapped into the
    471	application's address space, see :ref:`mmap` for details.
    472	Drivers set or clear this flag when the
    473	:ref:`VIDIOC_QUERYBUF`,
    474	:ref:`VIDIOC_QBUF` or
    475	:ref:`VIDIOC_DQBUF <VIDIOC_QBUF>` ioctl is called. Set by the
    476	driver.
    477    * .. _`V4L2-BUF-FLAG-QUEUED`:
    478
    479      - ``V4L2_BUF_FLAG_QUEUED``
    480      - 0x00000002
    481      - Internally drivers maintain two buffer queues, an incoming and
    482	outgoing queue. When this flag is set, the buffer is currently on
    483	the incoming queue. It automatically moves to the outgoing queue
    484	after the buffer has been filled (capture devices) or displayed
    485	(output devices). Drivers set or clear this flag when the
    486	``VIDIOC_QUERYBUF`` ioctl is called. After (successful) calling
    487	the ``VIDIOC_QBUF``\ ioctl it is always set and after
    488	``VIDIOC_DQBUF`` always cleared.
    489    * .. _`V4L2-BUF-FLAG-DONE`:
    490
    491      - ``V4L2_BUF_FLAG_DONE``
    492      - 0x00000004
    493      - When this flag is set, the buffer is currently on the outgoing
    494	queue, ready to be dequeued from the driver. Drivers set or clear
    495	this flag when the ``VIDIOC_QUERYBUF`` ioctl is called. After
    496	calling the ``VIDIOC_QBUF`` or ``VIDIOC_DQBUF`` it is always
    497	cleared. Of course a buffer cannot be on both queues at the same
    498	time, the ``V4L2_BUF_FLAG_QUEUED`` and ``V4L2_BUF_FLAG_DONE`` flag
    499	are mutually exclusive. They can be both cleared however, then the
    500	buffer is in "dequeued" state, in the application domain so to
    501	say.
    502    * .. _`V4L2-BUF-FLAG-ERROR`:
    503
    504      - ``V4L2_BUF_FLAG_ERROR``
    505      - 0x00000040
    506      - When this flag is set, the buffer has been dequeued successfully,
    507	although the data might have been corrupted. This is recoverable,
    508	streaming may continue as normal and the buffer may be reused
    509	normally. Drivers set this flag when the ``VIDIOC_DQBUF`` ioctl is
    510	called.
    511    * .. _`V4L2-BUF-FLAG-IN-REQUEST`:
    512
    513      - ``V4L2_BUF_FLAG_IN_REQUEST``
    514      - 0x00000080
    515      - This buffer is part of a request that hasn't been queued yet.
    516    * .. _`V4L2-BUF-FLAG-KEYFRAME`:
    517
    518      - ``V4L2_BUF_FLAG_KEYFRAME``
    519      - 0x00000008
    520      - Drivers set or clear this flag when calling the ``VIDIOC_DQBUF``
    521	ioctl. It may be set by video capture devices when the buffer
    522	contains a compressed image which is a key frame (or field), i. e.
    523	can be decompressed on its own. Also known as an I-frame.
    524	Applications can set this bit when ``type`` refers to an output
    525	stream.
    526    * .. _`V4L2-BUF-FLAG-PFRAME`:
    527
    528      - ``V4L2_BUF_FLAG_PFRAME``
    529      - 0x00000010
    530      - Similar to ``V4L2_BUF_FLAG_KEYFRAME`` this flags predicted frames
    531	or fields which contain only differences to a previous key frame.
    532	Applications can set this bit when ``type`` refers to an output
    533	stream.
    534    * .. _`V4L2-BUF-FLAG-BFRAME`:
    535
    536      - ``V4L2_BUF_FLAG_BFRAME``
    537      - 0x00000020
    538      - Similar to ``V4L2_BUF_FLAG_KEYFRAME`` this flags a bi-directional
    539	predicted frame or field which contains only the differences
    540	between the current frame and both the preceding and following key
    541	frames to specify its content. Applications can set this bit when
    542	``type`` refers to an output stream.
    543    * .. _`V4L2-BUF-FLAG-TIMECODE`:
    544
    545      - ``V4L2_BUF_FLAG_TIMECODE``
    546      - 0x00000100
    547      - The ``timecode`` field is valid. Drivers set or clear this flag
    548	when the ``VIDIOC_DQBUF`` ioctl is called. Applications can set
    549	this bit and the corresponding ``timecode`` structure when
    550	``type`` refers to an output stream.
    551    * .. _`V4L2-BUF-FLAG-PREPARED`:
    552
    553      - ``V4L2_BUF_FLAG_PREPARED``
    554      - 0x00000400
    555      - The buffer has been prepared for I/O and can be queued by the
    556	application. Drivers set or clear this flag when the
    557	:ref:`VIDIOC_QUERYBUF`,
    558	:ref:`VIDIOC_PREPARE_BUF <VIDIOC_QBUF>`,
    559	:ref:`VIDIOC_QBUF` or
    560	:ref:`VIDIOC_DQBUF <VIDIOC_QBUF>` ioctl is called.
    561    * .. _`V4L2-BUF-FLAG-NO-CACHE-INVALIDATE`:
    562
    563      - ``V4L2_BUF_FLAG_NO_CACHE_INVALIDATE``
    564      - 0x00000800
    565      - Caches do not have to be invalidated for this buffer. Typically
    566	applications shall use this flag if the data captured in the
    567	buffer is not going to be touched by the CPU, instead the buffer
    568	will, probably, be passed on to a DMA-capable hardware unit for
    569	further processing or output. This flag is ignored unless the
    570	queue is used for :ref:`memory mapping <mmap>` streaming I/O and
    571	reports :ref:`V4L2_BUF_CAP_SUPPORTS_MMAP_CACHE_HINTS
    572	<V4L2-BUF-CAP-SUPPORTS-MMAP-CACHE-HINTS>` capability.
    573    * .. _`V4L2-BUF-FLAG-NO-CACHE-CLEAN`:
    574
    575      - ``V4L2_BUF_FLAG_NO_CACHE_CLEAN``
    576      - 0x00001000
    577      - Caches do not have to be cleaned for this buffer. Typically
    578	applications shall use this flag for output buffers if the data in
    579	this buffer has not been created by the CPU but by some
    580	DMA-capable unit, in which case caches have not been used. This flag
    581	is ignored unless the queue is used for :ref:`memory mapping <mmap>`
    582	streaming I/O and reports :ref:`V4L2_BUF_CAP_SUPPORTS_MMAP_CACHE_HINTS
    583	<V4L2-BUF-CAP-SUPPORTS-MMAP-CACHE-HINTS>` capability.
    584    * .. _`V4L2-BUF-FLAG-M2M-HOLD-CAPTURE-BUF`:
    585
    586      - ``V4L2_BUF_FLAG_M2M_HOLD_CAPTURE_BUF``
    587      - 0x00000200
    588      - Only valid if struct :c:type:`v4l2_requestbuffers` flag ``V4L2_BUF_CAP_SUPPORTS_M2M_HOLD_CAPTURE_BUF`` is
    589	set. It is typically used with stateless decoders where multiple
    590	output buffers each decode to a slice of the decoded frame.
    591	Applications can set this flag when queueing the output buffer
    592	to prevent the driver from dequeueing the capture buffer after
    593	the output buffer has been decoded (i.e. the capture buffer is
    594	'held'). If the timestamp of this output buffer differs from that
    595	of the previous output buffer, then that indicates the start of a
    596	new frame and the previously held capture buffer is dequeued.
    597    * .. _`V4L2-BUF-FLAG-LAST`:
    598
    599      - ``V4L2_BUF_FLAG_LAST``
    600      - 0x00100000
    601      - Last buffer produced by the hardware. mem2mem codec drivers set
    602	this flag on the capture queue for the last buffer when the
    603	:ref:`VIDIOC_QUERYBUF` or
    604	:ref:`VIDIOC_DQBUF <VIDIOC_QBUF>` ioctl is called. Due to
    605	hardware limitations, the last buffer may be empty. In this case
    606	the driver will set the ``bytesused`` field to 0, regardless of
    607	the format. Any subsequent call to the
    608	:ref:`VIDIOC_DQBUF <VIDIOC_QBUF>` ioctl will not block anymore,
    609	but return an ``EPIPE`` error code.
    610    * .. _`V4L2-BUF-FLAG-REQUEST-FD`:
    611
    612      - ``V4L2_BUF_FLAG_REQUEST_FD``
    613      - 0x00800000
    614      - The ``request_fd`` field contains a valid file descriptor.
    615    * .. _`V4L2-BUF-FLAG-TIMESTAMP-MASK`:
    616
    617      - ``V4L2_BUF_FLAG_TIMESTAMP_MASK``
    618      - 0x0000e000
    619      - Mask for timestamp types below. To test the timestamp type, mask
    620	out bits not belonging to timestamp type by performing a logical
    621	and operation with buffer flags and timestamp mask.
    622    * .. _`V4L2-BUF-FLAG-TIMESTAMP-UNKNOWN`:
    623
    624      - ``V4L2_BUF_FLAG_TIMESTAMP_UNKNOWN``
    625      - 0x00000000
    626      - Unknown timestamp type. This type is used by drivers before Linux
    627	3.9 and may be either monotonic (see below) or realtime (wall
    628	clock). Monotonic clock has been favoured in embedded systems
    629	whereas most of the drivers use the realtime clock. Either kinds
    630	of timestamps are available in user space via
    631	:c:func:`clock_gettime` using clock IDs ``CLOCK_MONOTONIC``
    632	and ``CLOCK_REALTIME``, respectively.
    633    * .. _`V4L2-BUF-FLAG-TIMESTAMP-MONOTONIC`:
    634
    635      - ``V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC``
    636      - 0x00002000
    637      - The buffer timestamp has been taken from the ``CLOCK_MONOTONIC``
    638	clock. To access the same clock outside V4L2, use
    639	:c:func:`clock_gettime`.
    640    * .. _`V4L2-BUF-FLAG-TIMESTAMP-COPY`:
    641
    642      - ``V4L2_BUF_FLAG_TIMESTAMP_COPY``
    643      - 0x00004000
    644      - The CAPTURE buffer timestamp has been taken from the corresponding
    645	OUTPUT buffer. This flag applies only to mem2mem devices.
    646    * .. _`V4L2-BUF-FLAG-TSTAMP-SRC-MASK`:
    647
    648      - ``V4L2_BUF_FLAG_TSTAMP_SRC_MASK``
    649      - 0x00070000
    650      - Mask for timestamp sources below. The timestamp source defines the
    651	point of time the timestamp is taken in relation to the frame.
    652	Logical 'and' operation between the ``flags`` field and
    653	``V4L2_BUF_FLAG_TSTAMP_SRC_MASK`` produces the value of the
    654	timestamp source. Applications must set the timestamp source when
    655	``type`` refers to an output stream and
    656	``V4L2_BUF_FLAG_TIMESTAMP_COPY`` is set.
    657    * .. _`V4L2-BUF-FLAG-TSTAMP-SRC-EOF`:
    658
    659      - ``V4L2_BUF_FLAG_TSTAMP_SRC_EOF``
    660      - 0x00000000
    661      - End Of Frame. The buffer timestamp has been taken when the last
    662	pixel of the frame has been received or the last pixel of the
    663	frame has been transmitted. In practice, software generated
    664	timestamps will typically be read from the clock a small amount of
    665	time after the last pixel has been received or transmitten,
    666	depending on the system and other activity in it.
    667    * .. _`V4L2-BUF-FLAG-TSTAMP-SRC-SOE`:
    668
    669      - ``V4L2_BUF_FLAG_TSTAMP_SRC_SOE``
    670      - 0x00010000
    671      - Start Of Exposure. The buffer timestamp has been taken when the
    672	exposure of the frame has begun. This is only valid for the
    673	``V4L2_BUF_TYPE_VIDEO_CAPTURE`` buffer type.
    674
    675.. raw:: latex
    676
    677    \normalsize
    678
    679enum v4l2_memory
    680================
    681
    682.. tabularcolumns:: |p{5.0cm}|p{0.8cm}|p{11.5cm}|
    683
    684.. flat-table::
    685    :header-rows:  0
    686    :stub-columns: 0
    687    :widths:       3 1 4
    688
    689    * - ``V4L2_MEMORY_MMAP``
    690      - 1
    691      - The buffer is used for :ref:`memory mapping <mmap>` I/O.
    692    * - ``V4L2_MEMORY_USERPTR``
    693      - 2
    694      - The buffer is used for :ref:`user pointer <userp>` I/O.
    695    * - ``V4L2_MEMORY_OVERLAY``
    696      - 3
    697      - [to do]
    698    * - ``V4L2_MEMORY_DMABUF``
    699      - 4
    700      - The buffer is used for :ref:`DMA shared buffer <dmabuf>` I/O.
    701
    702.. _memory-flags:
    703
    704Memory Consistency Flags
    705------------------------
    706
    707.. raw:: latex
    708
    709    \small
    710
    711.. tabularcolumns:: |p{7.0cm}|p{2.1cm}|p{8.4cm}|
    712
    713.. cssclass:: longtable
    714
    715.. flat-table::
    716    :header-rows:  0
    717    :stub-columns: 0
    718    :widths:       3 1 4
    719
    720    * .. _`V4L2-MEMORY-FLAG-NON-COHERENT`:
    721
    722      - ``V4L2_MEMORY_FLAG_NON_COHERENT``
    723      - 0x00000001
    724      - A buffer is allocated either in coherent (it will be automatically
    725	coherent between the CPU and the bus) or non-coherent memory. The
    726	latter can provide performance gains, for instance the CPU cache
    727	sync/flush operations can be avoided if the buffer is accessed by the
    728	corresponding device only and the CPU does not read/write to/from that
    729	buffer. However, this requires extra care from the driver -- it must
    730	guarantee memory consistency by issuing a cache flush/sync when
    731	consistency is needed. If this flag is set V4L2 will attempt to
    732	allocate the buffer in non-coherent memory. The flag takes effect
    733	only if the buffer is used for :ref:`memory mapping <mmap>` I/O and the
    734	queue reports the :ref:`V4L2_BUF_CAP_SUPPORTS_MMAP_CACHE_HINTS
    735	<V4L2-BUF-CAP-SUPPORTS-MMAP-CACHE-HINTS>` capability.
    736
    737.. raw:: latex
    738
    739    \normalsize
    740
    741Timecodes
    742=========
    743
    744The :c:type:`v4l2_buffer_timecode` structure is designed to hold a
    745:ref:`smpte12m` or similar timecode.
    746(struct :c:type:`timeval` timestamps are stored in the struct
    747:c:type:`v4l2_buffer` ``timestamp`` field.)
    748
    749.. c:type:: v4l2_timecode
    750
    751struct v4l2_timecode
    752--------------------
    753
    754.. tabularcolumns:: |p{1.4cm}|p{2.8cm}|p{13.1cm}|
    755
    756.. flat-table::
    757    :header-rows:  0
    758    :stub-columns: 0
    759    :widths:       1 1 2
    760
    761    * - __u32
    762      - ``type``
    763      - Frame rate the timecodes are based on, see :ref:`timecode-type`.
    764    * - __u32
    765      - ``flags``
    766      - Timecode flags, see :ref:`timecode-flags`.
    767    * - __u8
    768      - ``frames``
    769      - Frame count, 0 ... 23/24/29/49/59, depending on the type of
    770	timecode.
    771    * - __u8
    772      - ``seconds``
    773      - Seconds count, 0 ... 59. This is a binary, not BCD number.
    774    * - __u8
    775      - ``minutes``
    776      - Minutes count, 0 ... 59. This is a binary, not BCD number.
    777    * - __u8
    778      - ``hours``
    779      - Hours count, 0 ... 29. This is a binary, not BCD number.
    780    * - __u8
    781      - ``userbits``\ [4]
    782      - The "user group" bits from the timecode.
    783
    784
    785.. _timecode-type:
    786
    787Timecode Types
    788--------------
    789
    790.. flat-table::
    791    :header-rows:  0
    792    :stub-columns: 0
    793    :widths:       3 1 4
    794
    795    * - ``V4L2_TC_TYPE_24FPS``
    796      - 1
    797      - 24 frames per second, i. e. film.
    798    * - ``V4L2_TC_TYPE_25FPS``
    799      - 2
    800      - 25 frames per second, i. e. PAL or SECAM video.
    801    * - ``V4L2_TC_TYPE_30FPS``
    802      - 3
    803      - 30 frames per second, i. e. NTSC video.
    804    * - ``V4L2_TC_TYPE_50FPS``
    805      - 4
    806      -
    807    * - ``V4L2_TC_TYPE_60FPS``
    808      - 5
    809      -
    810
    811
    812.. _timecode-flags:
    813
    814Timecode Flags
    815--------------
    816
    817.. tabularcolumns:: |p{6.6cm}|p{1.4cm}|p{9.3cm}|
    818
    819.. flat-table::
    820    :header-rows:  0
    821    :stub-columns: 0
    822    :widths:       3 1 4
    823
    824    * - ``V4L2_TC_FLAG_DROPFRAME``
    825      - 0x0001
    826      - Indicates "drop frame" semantics for counting frames in 29.97 fps
    827	material. When set, frame numbers 0 and 1 at the start of each
    828	minute, except minutes 0, 10, 20, 30, 40, 50 are omitted from the
    829	count.
    830    * - ``V4L2_TC_FLAG_COLORFRAME``
    831      - 0x0002
    832      - The "color frame" flag.
    833    * - ``V4L2_TC_USERBITS_field``
    834      - 0x000C
    835      - Field mask for the "binary group flags".
    836    * - ``V4L2_TC_USERBITS_USERDEFINED``
    837      - 0x0000
    838      - Unspecified format.
    839    * - ``V4L2_TC_USERBITS_8BITCHARS``
    840      - 0x0008
    841      - 8-bit ISO characters.