Linux 4.8.3
[linux/fpc-iii.git] / Documentation / media / uapi / v4l / buffer.rst
blob5deb4a46f99265d355be2b0c9a9b7e9bb1873fb6
1 .. -*- coding: utf-8; mode: rst -*-
3 .. _buffer:
5 *******
6 Buffers
7 *******
9 A buffer contains data exchanged by application and driver using one of
10 the Streaming I/O methods. In the multi-planar API, the data is held in
11 planes, while the buffer structure acts as a container for the planes.
12 Only pointers to buffers (planes) are exchanged, the data itself is not
13 copied. These pointers, together with meta-information like timestamps
14 or field parity, are stored in a struct :ref:`struct v4l2_buffer <v4l2-buffer>`,
15 argument to the :ref:`VIDIOC_QUERYBUF`,
16 :ref:`VIDIOC_QBUF` and
17 :ref:`VIDIOC_DQBUF <VIDIOC_QBUF>` ioctl. In the multi-planar API,
18 some plane-specific members of struct :ref:`struct v4l2_buffer <v4l2-buffer>`,
19 such as pointers and sizes for each plane, are stored in struct
20 :ref:`struct v4l2_plane <v4l2-plane>` instead. In that case, struct
21 :ref:`struct v4l2_buffer <v4l2-buffer>` contains an array of plane structures.
23 Dequeued video buffers come with timestamps. The driver decides at which
24 part of the frame and with which clock the timestamp is taken. Please
25 see flags in the masks ``V4L2_BUF_FLAG_TIMESTAMP_MASK`` and
26 ``V4L2_BUF_FLAG_TSTAMP_SRC_MASK`` in :ref:`buffer-flags`. These flags
27 are always valid and constant across all buffers during the whole video
28 stream. Changes in these flags may take place as a side effect of
29 :ref:`VIDIOC_S_INPUT <VIDIOC_G_INPUT>` or
30 :ref:`VIDIOC_S_OUTPUT <VIDIOC_G_OUTPUT>` however. The
31 ``V4L2_BUF_FLAG_TIMESTAMP_COPY`` timestamp type which is used by e.g. on
32 mem-to-mem devices is an exception to the rule: the timestamp source
33 flags are copied from the OUTPUT video buffer to the CAPTURE video
34 buffer.
37 .. _v4l2-buffer:
39 struct v4l2_buffer
40 ==================
42 .. flat-table:: struct v4l2_buffer
43     :header-rows:  0
44     :stub-columns: 0
45     :widths:       1 1 1 2
48     -  .. row 1
50        -  __u32
52        -  ``index``
54        -
55        -  Number of the buffer, set by the application except when calling
56           :ref:`VIDIOC_DQBUF <VIDIOC_QBUF>`, then it is set by the
57           driver. This field can range from zero to the number of buffers
58           allocated with the :ref:`VIDIOC_REQBUFS` ioctl
59           (struct :ref:`v4l2_requestbuffers <v4l2-requestbuffers>`
60           ``count``), plus any buffers allocated with
61           :ref:`VIDIOC_CREATE_BUFS` minus one.
63     -  .. row 2
65        -  __u32
67        -  ``type``
69        -
70        -  Type of the buffer, same as struct
71           :ref:`v4l2_format <v4l2-format>` ``type`` or struct
72           :ref:`v4l2_requestbuffers <v4l2-requestbuffers>` ``type``, set
73           by the application. See :ref:`v4l2-buf-type`
75     -  .. row 3
77        -  __u32
79        -  ``bytesused``
81        -
82        -  The number of bytes occupied by the data in the buffer. It depends
83           on the negotiated data format and may change with each buffer for
84           compressed variable size data like JPEG images. Drivers must set
85           this field when ``type`` refers to a capture stream, applications
86           when it refers to an output stream. If the application sets this
87           to 0 for an output stream, then ``bytesused`` will be set to the
88           size of the buffer (see the ``length`` field of this struct) by
89           the driver. For multiplanar formats this field is ignored and the
90           ``planes`` pointer is used instead.
92     -  .. row 4
94        -  __u32
96        -  ``flags``
98        -
99        -  Flags set by the application or driver, see :ref:`buffer-flags`.
101     -  .. row 5
103        -  __u32
105        -  ``field``
107        -
108        -  Indicates the field order of the image in the buffer, see
109           :ref:`v4l2-field`. This field is not used when the buffer
110           contains VBI data. Drivers must set it when ``type`` refers to a
111           capture stream, applications when it refers to an output stream.
113     -  .. row 6
115        -  struct timeval
117        -  ``timestamp``
119        -
120        -  For capture streams this is time when the first data byte was
121           captured, as returned by the :c:func:`clock_gettime()` function
122           for the relevant clock id; see ``V4L2_BUF_FLAG_TIMESTAMP_*`` in
123           :ref:`buffer-flags`. For output streams the driver stores the
124           time at which the last data byte was actually sent out in the
125           ``timestamp`` field. This permits applications to monitor the
126           drift between the video and system clock. For output streams that
127           use ``V4L2_BUF_FLAG_TIMESTAMP_COPY`` the application has to fill
128           in the timestamp which will be copied by the driver to the capture
129           stream.
131     -  .. row 7
133        -  struct :ref:`v4l2_timecode <v4l2-timecode>`
135        -  ``timecode``
137        -
138        -  When ``type`` is ``V4L2_BUF_TYPE_VIDEO_CAPTURE`` and the
139           ``V4L2_BUF_FLAG_TIMECODE`` flag is set in ``flags``, this
140           structure contains a frame timecode. In
141           :ref:`V4L2_FIELD_ALTERNATE <v4l2-field>` mode the top and
142           bottom field contain the same timecode. Timecodes are intended to
143           help video editing and are typically recorded on video tapes, but
144           also embedded in compressed formats like MPEG. This field is
145           independent of the ``timestamp`` and ``sequence`` fields.
147     -  .. row 8
149        -  __u32
151        -  ``sequence``
153        -
154        -  Set by the driver, counting the frames (not fields!) in sequence.
155           This field is set for both input and output devices.
157     -  .. row 9
159        -  :cspan:`3`
161           In :ref:`V4L2_FIELD_ALTERNATE <v4l2-field>` mode the top and
162           bottom field have the same sequence number. The count starts at
163           zero and includes dropped or repeated frames. A dropped frame was
164           received by an input device but could not be stored due to lack of
165           free buffer space. A repeated frame was displayed again by an
166           output device because the application did not pass new data in
167           time.
169           .. note:: This may count the frames received e.g. over USB, without
170              taking into account the frames dropped by the remote hardware due
171              to limited compression throughput or bus bandwidth. These devices
172              identify by not enumerating any video standards, see
173              :ref:`standard`.
175     -  .. row 10
177        -  __u32
179        -  ``memory``
181        -
182        -  This field must be set by applications and/or drivers in
183           accordance with the selected I/O method. See :ref:`v4l2-memory`
185     -  .. row 11
187        -  union
189        -  ``m``
191     -  .. row 12
193        -
194        -  __u32
196        -  ``offset``
198        -  For the single-planar API and when ``memory`` is
199           ``V4L2_MEMORY_MMAP`` this is the offset of the buffer from the
200           start of the device memory. The value is returned by the driver
201           and apart of serving as parameter to the
202           :ref:`mmap() <func-mmap>` function not useful for applications.
203           See :ref:`mmap` for details
205     -  .. row 13
207        -
208        -  unsigned long
210        -  ``userptr``
212        -  For the single-planar API and when ``memory`` is
213           ``V4L2_MEMORY_USERPTR`` this is a pointer to the buffer (casted to
214           unsigned long type) in virtual memory, set by the application. See
215           :ref:`userp` for details.
217     -  .. row 14
219        -
220        -  struct v4l2_plane
222        -  ``*planes``
224        -  When using the multi-planar API, contains a userspace pointer to
225           an array of struct :ref:`v4l2_plane <v4l2-plane>`. The size of
226           the array should be put in the ``length`` field of this
227           :ref:`struct v4l2_buffer <v4l2-buffer>` structure.
229     -  .. row 15
231        -
232        -  int
234        -  ``fd``
236        -  For the single-plane API and when ``memory`` is
237           ``V4L2_MEMORY_DMABUF`` this is the file descriptor associated with
238           a DMABUF buffer.
240     -  .. row 16
242        -  __u32
244        -  ``length``
246        -
247        -  Size of the buffer (not the payload) in bytes for the
248           single-planar API. This is set by the driver based on the calls to
249           :ref:`VIDIOC_REQBUFS` and/or
250           :ref:`VIDIOC_CREATE_BUFS`. For the
251           multi-planar API the application sets this to the number of
252           elements in the ``planes`` array. The driver will fill in the
253           actual number of valid elements in that array.
255     -  .. row 17
257        -  __u32
259        -  ``reserved2``
261        -
262        -  A place holder for future extensions. Drivers and applications
263           must set this to 0.
265     -  .. row 18
267        -  __u32
269        -  ``reserved``
271        -
272        -  A place holder for future extensions. Drivers and applications
273           must set this to 0.
277 .. _v4l2-plane:
279 struct v4l2_plane
280 =================
282 .. flat-table::
283     :header-rows:  0
284     :stub-columns: 0
285     :widths:       1 1 1 2
288     -  .. row 1
290        -  __u32
292        -  ``bytesused``
294        -
295        -  The number of bytes occupied by data in the plane (its payload).
296           Drivers must set this field when ``type`` refers to a capture
297           stream, applications when it refers to an output stream. If the
298           application sets this to 0 for an output stream, then
299           ``bytesused`` will be set to the size of the plane (see the
300           ``length`` field of this struct) by the driver.
302           .. note:: Note that the actual image data starts at ``data_offset``
303              which may not be 0.
305     -  .. row 2
307        -  __u32
309        -  ``length``
311        -
312        -  Size in bytes of the plane (not its payload). This is set by the
313           driver based on the calls to
314           :ref:`VIDIOC_REQBUFS` and/or
315           :ref:`VIDIOC_CREATE_BUFS`.
317     -  .. row 3
319        -  union
321        -  ``m``
323        -
324        -
326     -  .. row 4
328        -
329        -  __u32
331        -  ``mem_offset``
333        -  When the memory type in the containing struct
334           :ref:`v4l2_buffer <v4l2-buffer>` is ``V4L2_MEMORY_MMAP``, this
335           is the value that should be passed to :ref:`mmap() <func-mmap>`,
336           similar to the ``offset`` field in struct
337           :ref:`v4l2_buffer <v4l2-buffer>`.
339     -  .. row 5
341        -
342        -  unsigned long
344        -  ``userptr``
346        -  When the memory type in the containing struct
347           :ref:`v4l2_buffer <v4l2-buffer>` is ``V4L2_MEMORY_USERPTR``,
348           this is a userspace pointer to the memory allocated for this plane
349           by an application.
351     -  .. row 6
353        -
354        -  int
356        -  ``fd``
358        -  When the memory type in the containing struct
359           :ref:`v4l2_buffer <v4l2-buffer>` is ``V4L2_MEMORY_DMABUF``,
360           this is a file descriptor associated with a DMABUF buffer, similar
361           to the ``fd`` field in struct :ref:`v4l2_buffer <v4l2-buffer>`.
363     -  .. row 7
365        -  __u32
367        -  ``data_offset``
369        -
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.
374           .. note:: That data_offset is included  in ``bytesused``. So the
375              size of the image in the plane is ``bytesused``-``data_offset``
376              at offset ``data_offset`` from the start of the plane.
378     -  .. row 8
380        -  __u32
382        -  ``reserved[11]``
384        -
385        -  Reserved for future use. Should be zeroed by drivers and
386           applications.
390 .. _v4l2-buf-type:
392 enum v4l2_buf_type
393 ==================
395 .. flat-table::
396     :header-rows:  0
397     :stub-columns: 0
398     :widths:       3 1 4
401     -  .. row 1
403        -  ``V4L2_BUF_TYPE_VIDEO_CAPTURE``
405        -  1
407        -  Buffer of a single-planar video capture stream, see
408           :ref:`capture`.
410     -  .. row 2
412        -  ``V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE``
414        -  9
416        -  Buffer of a multi-planar video capture stream, see
417           :ref:`capture`.
419     -  .. row 3
421        -  ``V4L2_BUF_TYPE_VIDEO_OUTPUT``
423        -  2
425        -  Buffer of a single-planar video output stream, see
426           :ref:`output`.
428     -  .. row 4
430        -  ``V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE``
432        -  10
434        -  Buffer of a multi-planar video output stream, see :ref:`output`.
436     -  .. row 5
438        -  ``V4L2_BUF_TYPE_VIDEO_OVERLAY``
440        -  3
442        -  Buffer for video overlay, see :ref:`overlay`.
444     -  .. row 6
446        -  ``V4L2_BUF_TYPE_VBI_CAPTURE``
448        -  4
450        -  Buffer of a raw VBI capture stream, see :ref:`raw-vbi`.
452     -  .. row 7
454        -  ``V4L2_BUF_TYPE_VBI_OUTPUT``
456        -  5
458        -  Buffer of a raw VBI output stream, see :ref:`raw-vbi`.
460     -  .. row 8
462        -  ``V4L2_BUF_TYPE_SLICED_VBI_CAPTURE``
464        -  6
466        -  Buffer of a sliced VBI capture stream, see :ref:`sliced`.
468     -  .. row 9
470        -  ``V4L2_BUF_TYPE_SLICED_VBI_OUTPUT``
472        -  7
474        -  Buffer of a sliced VBI output stream, see :ref:`sliced`.
476     -  .. row 10
478        -  ``V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY``
480        -  8
482        -  Buffer for video output overlay (OSD), see :ref:`osd`.
484     -  .. row 11
486        -  ``V4L2_BUF_TYPE_SDR_CAPTURE``
488        -  11
490        -  Buffer for Software Defined Radio (SDR) capture stream, see
491           :ref:`sdr`.
493     -  .. row 12
495        -  ``V4L2_BUF_TYPE_SDR_OUTPUT``
497        -  12
499        -  Buffer for Software Defined Radio (SDR) output stream, see
500           :ref:`sdr`.
504 .. _buffer-flags:
506 Buffer Flags
507 ============
509 .. flat-table::
510     :header-rows:  0
511     :stub-columns: 0
512     :widths:       3 1 4
515     -  .. _`V4L2-BUF-FLAG-MAPPED`:
517        -  ``V4L2_BUF_FLAG_MAPPED``
519        -  0x00000001
521        -  The buffer resides in device memory and has been mapped into the
522           application's address space, see :ref:`mmap` for details.
523           Drivers set or clear this flag when the
524           :ref:`VIDIOC_QUERYBUF`,
525           :ref:`VIDIOC_QBUF` or
526           :ref:`VIDIOC_DQBUF <VIDIOC_QBUF>` ioctl is called. Set by the
527           driver.
529     -  .. _`V4L2-BUF-FLAG-QUEUED`:
531        -  ``V4L2_BUF_FLAG_QUEUED``
533        -  0x00000002
535        -  Internally drivers maintain two buffer queues, an incoming and
536           outgoing queue. When this flag is set, the buffer is currently on
537           the incoming queue. It automatically moves to the outgoing queue
538           after the buffer has been filled (capture devices) or displayed
539           (output devices). Drivers set or clear this flag when the
540           ``VIDIOC_QUERYBUF`` ioctl is called. After (successful) calling
541           the ``VIDIOC_QBUF``\ ioctl it is always set and after
542           ``VIDIOC_DQBUF`` always cleared.
544     -  .. _`V4L2-BUF-FLAG-DONE`:
546        -  ``V4L2_BUF_FLAG_DONE``
548        -  0x00000004
550        -  When this flag is set, the buffer is currently on the outgoing
551           queue, ready to be dequeued from the driver. Drivers set or clear
552           this flag when the ``VIDIOC_QUERYBUF`` ioctl is called. After
553           calling the ``VIDIOC_QBUF`` or ``VIDIOC_DQBUF`` it is always
554           cleared. Of course a buffer cannot be on both queues at the same
555           time, the ``V4L2_BUF_FLAG_QUEUED`` and ``V4L2_BUF_FLAG_DONE`` flag
556           are mutually exclusive. They can be both cleared however, then the
557           buffer is in "dequeued" state, in the application domain so to
558           say.
560     -  .. _`V4L2-BUF-FLAG-ERROR`:
562        -  ``V4L2_BUF_FLAG_ERROR``
564        -  0x00000040
566        -  When this flag is set, the buffer has been dequeued successfully,
567           although the data might have been corrupted. This is recoverable,
568           streaming may continue as normal and the buffer may be reused
569           normally. Drivers set this flag when the ``VIDIOC_DQBUF`` ioctl is
570           called.
572     -  .. _`V4L2-BUF-FLAG-KEYFRAME`:
574        -  ``V4L2_BUF_FLAG_KEYFRAME``
576        -  0x00000008
578        -  Drivers set or clear this flag when calling the ``VIDIOC_DQBUF``
579           ioctl. It may be set by video capture devices when the buffer
580           contains a compressed image which is a key frame (or field), i. e.
581           can be decompressed on its own. Also known as an I-frame.
582           Applications can set this bit when ``type`` refers to an output
583           stream.
585     -  .. _`V4L2-BUF-FLAG-PFRAME`:
587        -  ``V4L2_BUF_FLAG_PFRAME``
589        -  0x00000010
591        -  Similar to ``V4L2_BUF_FLAG_KEYFRAME`` this flags predicted frames
592           or fields which contain only differences to a previous key frame.
593           Applications can set this bit when ``type`` refers to an output
594           stream.
596     -  .. _`V4L2-BUF-FLAG-BFRAME`:
598        -  ``V4L2_BUF_FLAG_BFRAME``
600        -  0x00000020
602        -  Similar to ``V4L2_BUF_FLAG_KEYFRAME`` this flags a bi-directional
603           predicted frame or field which contains only the differences
604           between the current frame and both the preceding and following key
605           frames to specify its content. Applications can set this bit when
606           ``type`` refers to an output stream.
608     -  .. _`V4L2-BUF-FLAG-TIMECODE`:
610        -  ``V4L2_BUF_FLAG_TIMECODE``
612        -  0x00000100
614        -  The ``timecode`` field is valid. Drivers set or clear this flag
615           when the ``VIDIOC_DQBUF`` ioctl is called. Applications can set
616           this bit and the corresponding ``timecode`` structure when
617           ``type`` refers to an output stream.
619     -  .. _`V4L2-BUF-FLAG-PREPARED`:
621        -  ``V4L2_BUF_FLAG_PREPARED``
623        -  0x00000400
625        -  The buffer has been prepared for I/O and can be queued by the
626           application. Drivers set or clear this flag when the
627           :ref:`VIDIOC_QUERYBUF`,
628           :ref:`VIDIOC_PREPARE_BUF <VIDIOC_QBUF>`,
629           :ref:`VIDIOC_QBUF` or
630           :ref:`VIDIOC_DQBUF <VIDIOC_QBUF>` ioctl is called.
632     -  .. _`V4L2-BUF-FLAG-NO-CACHE-INVALIDATE`:
634        -  ``V4L2_BUF_FLAG_NO_CACHE_INVALIDATE``
636        -  0x00000800
638        -  Caches do not have to be invalidated for this buffer. Typically
639           applications shall use this flag if the data captured in the
640           buffer is not going to be touched by the CPU, instead the buffer
641           will, probably, be passed on to a DMA-capable hardware unit for
642           further processing or output.
644     -  .. _`V4L2-BUF-FLAG-NO-CACHE-CLEAN`:
646        -  ``V4L2_BUF_FLAG_NO_CACHE_CLEAN``
648        -  0x00001000
650        -  Caches do not have to be cleaned for this buffer. Typically
651           applications shall use this flag for output buffers if the data in
652           this buffer has not been created by the CPU but by some
653           DMA-capable unit, in which case caches have not been used.
655     -  .. _`V4L2-BUF-FLAG-LAST`:
657        -  ``V4L2_BUF_FLAG_LAST``
659        -  0x00100000
661        -  Last buffer produced by the hardware. mem2mem codec drivers set
662           this flag on the capture queue for the last buffer when the
663           :ref:`VIDIOC_QUERYBUF` or
664           :ref:`VIDIOC_DQBUF <VIDIOC_QBUF>` ioctl is called. Due to
665           hardware limitations, the last buffer may be empty. In this case
666           the driver will set the ``bytesused`` field to 0, regardless of
667           the format. Any Any subsequent call to the
668           :ref:`VIDIOC_DQBUF <VIDIOC_QBUF>` ioctl will not block anymore,
669           but return an ``EPIPE`` error code.
671     -  .. _`V4L2-BUF-FLAG-TIMESTAMP-MASK`:
673        -  ``V4L2_BUF_FLAG_TIMESTAMP_MASK``
675        -  0x0000e000
677        -  Mask for timestamp types below. To test the timestamp type, mask
678           out bits not belonging to timestamp type by performing a logical
679           and operation with buffer flags and timestamp mask.
681     -  .. _`V4L2-BUF-FLAG-TIMESTAMP-UNKNOWN`:
683        -  ``V4L2_BUF_FLAG_TIMESTAMP_UNKNOWN``
685        -  0x00000000
687        -  Unknown timestamp type. This type is used by drivers before Linux
688           3.9 and may be either monotonic (see below) or realtime (wall
689           clock). Monotonic clock has been favoured in embedded systems
690           whereas most of the drivers use the realtime clock. Either kinds
691           of timestamps are available in user space via
692           :c:func:`clock_gettime(2)` using clock IDs ``CLOCK_MONOTONIC``
693           and ``CLOCK_REALTIME``, respectively.
695     -  .. _`V4L2-BUF-FLAG-TIMESTAMP-MONOTONIC`:
697        -  ``V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC``
699        -  0x00002000
701        -  The buffer timestamp has been taken from the ``CLOCK_MONOTONIC``
702           clock. To access the same clock outside V4L2, use
703           :c:func:`clock_gettime(2)`.
705     -  .. _`V4L2-BUF-FLAG-TIMESTAMP-COPY`:
707        -  ``V4L2_BUF_FLAG_TIMESTAMP_COPY``
709        -  0x00004000
711        -  The CAPTURE buffer timestamp has been taken from the corresponding
712           OUTPUT buffer. This flag applies only to mem2mem devices.
714     -  .. _`V4L2-BUF-FLAG-TSTAMP-SRC-MASK`:
716        -  ``V4L2_BUF_FLAG_TSTAMP_SRC_MASK``
718        -  0x00070000
720        -  Mask for timestamp sources below. The timestamp source defines the
721           point of time the timestamp is taken in relation to the frame.
722           Logical 'and' operation between the ``flags`` field and
723           ``V4L2_BUF_FLAG_TSTAMP_SRC_MASK`` produces the value of the
724           timestamp source. Applications must set the timestamp source when
725           ``type`` refers to an output stream and
726           ``V4L2_BUF_FLAG_TIMESTAMP_COPY`` is set.
728     -  .. _`V4L2-BUF-FLAG-TSTAMP-SRC-EOF`:
730        -  ``V4L2_BUF_FLAG_TSTAMP_SRC_EOF``
732        -  0x00000000
734        -  End Of Frame. The buffer timestamp has been taken when the last
735           pixel of the frame has been received or the last pixel of the
736           frame has been transmitted. In practice, software generated
737           timestamps will typically be read from the clock a small amount of
738           time after the last pixel has been received or transmitten,
739           depending on the system and other activity in it.
741     -  .. _`V4L2-BUF-FLAG-TSTAMP-SRC-SOE`:
743        -  ``V4L2_BUF_FLAG_TSTAMP_SRC_SOE``
745        -  0x00010000
747        -  Start Of Exposure. The buffer timestamp has been taken when the
748           exposure of the frame has begun. This is only valid for the
749           ``V4L2_BUF_TYPE_VIDEO_CAPTURE`` buffer type.
753 .. _v4l2-memory:
755 enum v4l2_memory
756 ================
758 .. flat-table::
759     :header-rows:  0
760     :stub-columns: 0
761     :widths:       3 1 4
764     -  .. row 1
766        -  ``V4L2_MEMORY_MMAP``
768        -  1
770        -  The buffer is used for :ref:`memory mapping <mmap>` I/O.
772     -  .. row 2
774        -  ``V4L2_MEMORY_USERPTR``
776        -  2
778        -  The buffer is used for :ref:`user pointer <userp>` I/O.
780     -  .. row 3
782        -  ``V4L2_MEMORY_OVERLAY``
784        -  3
786        -  [to do]
788     -  .. row 4
790        -  ``V4L2_MEMORY_DMABUF``
792        -  4
794        -  The buffer is used for :ref:`DMA shared buffer <dmabuf>` I/O.
798 Timecodes
799 =========
801 The :ref:`struct v4l2_timecode <v4l2-timecode>` structure is designed to hold a
802 :ref:`smpte12m` or similar timecode. (struct
803 :c:type:`struct timeval` timestamps are stored in struct
804 :ref:`v4l2_buffer <v4l2-buffer>` field ``timestamp``.)
807 .. _v4l2-timecode:
809 struct v4l2_timecode
810 --------------------
812 .. flat-table::
813     :header-rows:  0
814     :stub-columns: 0
815     :widths:       1 1 2
818     -  .. row 1
820        -  __u32
822        -  ``type``
824        -  Frame rate the timecodes are based on, see :ref:`timecode-type`.
826     -  .. row 2
828        -  __u32
830        -  ``flags``
832        -  Timecode flags, see :ref:`timecode-flags`.
834     -  .. row 3
836        -  __u8
838        -  ``frames``
840        -  Frame count, 0 ... 23/24/29/49/59, depending on the type of
841           timecode.
843     -  .. row 4
845        -  __u8
847        -  ``seconds``
849        -  Seconds count, 0 ... 59. This is a binary, not BCD number.
851     -  .. row 5
853        -  __u8
855        -  ``minutes``
857        -  Minutes count, 0 ... 59. This is a binary, not BCD number.
859     -  .. row 6
861        -  __u8
863        -  ``hours``
865        -  Hours count, 0 ... 29. This is a binary, not BCD number.
867     -  .. row 7
869        -  __u8
871        -  ``userbits``\ [4]
873        -  The "user group" bits from the timecode.
877 .. _timecode-type:
879 Timecode Types
880 --------------
882 .. flat-table::
883     :header-rows:  0
884     :stub-columns: 0
885     :widths:       3 1 4
888     -  .. row 1
890        -  ``V4L2_TC_TYPE_24FPS``
892        -  1
894        -  24 frames per second, i. e. film.
896     -  .. row 2
898        -  ``V4L2_TC_TYPE_25FPS``
900        -  2
902        -  25 frames per second, i. e. PAL or SECAM video.
904     -  .. row 3
906        -  ``V4L2_TC_TYPE_30FPS``
908        -  3
910        -  30 frames per second, i. e. NTSC video.
912     -  .. row 4
914        -  ``V4L2_TC_TYPE_50FPS``
916        -  4
918        -
920     -  .. row 5
922        -  ``V4L2_TC_TYPE_60FPS``
924        -  5
926        -
930 .. _timecode-flags:
932 Timecode Flags
933 --------------
935 .. flat-table::
936     :header-rows:  0
937     :stub-columns: 0
938     :widths:       3 1 4
941     -  .. row 1
943        -  ``V4L2_TC_FLAG_DROPFRAME``
945        -  0x0001
947        -  Indicates "drop frame" semantics for counting frames in 29.97 fps
948           material. When set, frame numbers 0 and 1 at the start of each
949           minute, except minutes 0, 10, 20, 30, 40, 50 are omitted from the
950           count.
952     -  .. row 2
954        -  ``V4L2_TC_FLAG_COLORFRAME``
956        -  0x0002
958        -  The "color frame" flag.
960     -  .. row 3
962        -  ``V4L2_TC_USERBITS_field``
964        -  0x000C
966        -  Field mask for the "binary group flags".
968     -  .. row 4
970        -  ``V4L2_TC_USERBITS_USERDEFINED``
972        -  0x0000
974        -  Unspecified format.
976     -  .. row 5
978        -  ``V4L2_TC_USERBITS_8BITCHARS``
980        -  0x0008
982        -  8-bit ISO characters.