162306a36Sopenharmony_ci.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
262306a36Sopenharmony_ci.. c:namespace:: V4L
362306a36Sopenharmony_ci
462306a36Sopenharmony_ci.. _hist-v4l2:
562306a36Sopenharmony_ci
662306a36Sopenharmony_ci***********************
762306a36Sopenharmony_ciChanges of the V4L2 API
862306a36Sopenharmony_ci***********************
962306a36Sopenharmony_ci
1062306a36Sopenharmony_ciSoon after the V4L API was added to the kernel it was criticised as too
1162306a36Sopenharmony_ciinflexible. In August 1998 Bill Dirks proposed a number of improvements
1262306a36Sopenharmony_ciand began to work on documentation, example drivers and applications.
1362306a36Sopenharmony_ciWith the help of other volunteers this eventually became the V4L2 API,
1462306a36Sopenharmony_cinot just an extension but a replacement for the V4L API. However it took
1562306a36Sopenharmony_cianother four years and two stable kernel releases until the new API was
1662306a36Sopenharmony_cifinally accepted for inclusion into the kernel in its present form.
1762306a36Sopenharmony_ci
1862306a36Sopenharmony_ciEarly Versions
1962306a36Sopenharmony_ci==============
2062306a36Sopenharmony_ci
2162306a36Sopenharmony_ci1998-08-20: First version.
2262306a36Sopenharmony_ci
2362306a36Sopenharmony_ci1998-08-27: The :c:func:`select()` function was introduced.
2462306a36Sopenharmony_ci
2562306a36Sopenharmony_ci1998-09-10: New video standard interface.
2662306a36Sopenharmony_ci
2762306a36Sopenharmony_ci1998-09-18: The ``VIDIOC_NONCAP`` ioctl was replaced by the otherwise
2862306a36Sopenharmony_cimeaningless ``O_TRUNC`` :c:func:`open()` flag, and the
2962306a36Sopenharmony_cialiases ``O_NONCAP`` and ``O_NOIO`` were defined. Applications can set
3062306a36Sopenharmony_cithis flag if they intend to access controls only, as opposed to capture
3162306a36Sopenharmony_ciapplications which need exclusive access. The ``VIDEO_STD_XXX``
3262306a36Sopenharmony_ciidentifiers are now ordinals instead of flags, and the
3362306a36Sopenharmony_ci``video_std_construct()`` helper function takes id and
3462306a36Sopenharmony_citransmission arguments.
3562306a36Sopenharmony_ci
3662306a36Sopenharmony_ci1998-09-28: Revamped video standard. Made video controls individually
3762306a36Sopenharmony_cienumerable.
3862306a36Sopenharmony_ci
3962306a36Sopenharmony_ci1998-10-02: The ``id`` field was removed from
4062306a36Sopenharmony_cistruct ``video_standard`` and the color subcarrier fields were
4162306a36Sopenharmony_cirenamed. The :ref:`VIDIOC_QUERYSTD` ioctl was
4262306a36Sopenharmony_cirenamed to :ref:`VIDIOC_ENUMSTD`,
4362306a36Sopenharmony_ci:ref:`VIDIOC_G_INPUT <VIDIOC_G_INPUT>` to
4462306a36Sopenharmony_ci:ref:`VIDIOC_ENUMINPUT`. A first draft of the
4562306a36Sopenharmony_ciCodec API was released.
4662306a36Sopenharmony_ci
4762306a36Sopenharmony_ci1998-11-08: Many minor changes. Most symbols have been renamed. Some
4862306a36Sopenharmony_cimaterial changes to struct v4l2_capability.
4962306a36Sopenharmony_ci
5062306a36Sopenharmony_ci1998-11-12: The read/write direction of some ioctls was misdefined.
5162306a36Sopenharmony_ci
5262306a36Sopenharmony_ci1998-11-14: ``V4L2_PIX_FMT_RGB24`` changed to ``V4L2_PIX_FMT_BGR24``,
5362306a36Sopenharmony_ciand ``V4L2_PIX_FMT_RGB32`` changed to ``V4L2_PIX_FMT_BGR32``. Audio
5462306a36Sopenharmony_cicontrols are now accessible with the
5562306a36Sopenharmony_ci:ref:`VIDIOC_G_CTRL <VIDIOC_G_CTRL>` and
5662306a36Sopenharmony_ci:ref:`VIDIOC_S_CTRL <VIDIOC_G_CTRL>` ioctls under names starting
5762306a36Sopenharmony_ciwith ``V4L2_CID_AUDIO``. The ``V4L2_MAJOR`` define was removed from
5862306a36Sopenharmony_ci``videodev.h`` since it was only used once in the ``videodev`` kernel
5962306a36Sopenharmony_cimodule. The ``YUV422`` and ``YUV411`` planar image formats were added.
6062306a36Sopenharmony_ci
6162306a36Sopenharmony_ci1998-11-28: A few ioctl symbols changed. Interfaces for codecs and video
6262306a36Sopenharmony_cioutput devices were added.
6362306a36Sopenharmony_ci
6462306a36Sopenharmony_ci1999-01-14: A raw VBI capture interface was added.
6562306a36Sopenharmony_ci
6662306a36Sopenharmony_ci1999-01-19: The ``VIDIOC_NEXTBUF`` ioctl was removed.
6762306a36Sopenharmony_ci
6862306a36Sopenharmony_ciV4L2 Version 0.16 1999-01-31
6962306a36Sopenharmony_ci============================
7062306a36Sopenharmony_ci
7162306a36Sopenharmony_ci1999-01-27: There is now one QBUF ioctl, VIDIOC_QWBUF and VIDIOC_QRBUF
7262306a36Sopenharmony_ciare gone. VIDIOC_QBUF takes a v4l2_buffer as a parameter. Added
7362306a36Sopenharmony_cidigital zoom (cropping) controls.
7462306a36Sopenharmony_ci
7562306a36Sopenharmony_ciV4L2 Version 0.18 1999-03-16
7662306a36Sopenharmony_ci============================
7762306a36Sopenharmony_ci
7862306a36Sopenharmony_ciAdded a v4l to V4L2 ioctl compatibility layer to videodev.c. Driver
7962306a36Sopenharmony_ciwriters, this changes how you implement your ioctl handler. See the
8062306a36Sopenharmony_ciDriver Writer's Guide. Added some more control id codes.
8162306a36Sopenharmony_ci
8262306a36Sopenharmony_ciV4L2 Version 0.19 1999-06-05
8362306a36Sopenharmony_ci============================
8462306a36Sopenharmony_ci
8562306a36Sopenharmony_ci1999-03-18: Fill in the category and catname fields of v4l2_queryctrl
8662306a36Sopenharmony_ciobjects before passing them to the driver. Required a minor change to
8762306a36Sopenharmony_cithe VIDIOC_QUERYCTRL handlers in the sample drivers.
8862306a36Sopenharmony_ci
8962306a36Sopenharmony_ci1999-03-31: Better compatibility for v4l memory capture ioctls. Requires
9062306a36Sopenharmony_cichanges to drivers to fully support new compatibility features, see
9162306a36Sopenharmony_ciDriver Writer's Guide and v4l2cap.c. Added new control IDs:
9262306a36Sopenharmony_ciV4L2_CID_HFLIP, _VFLIP. Changed V4L2_PIX_FMT_YUV422P to _YUV422P,
9362306a36Sopenharmony_ciand _YUV411P to _YUV411P.
9462306a36Sopenharmony_ci
9562306a36Sopenharmony_ci1999-04-04: Added a few more control IDs.
9662306a36Sopenharmony_ci
9762306a36Sopenharmony_ci1999-04-07: Added the button control type.
9862306a36Sopenharmony_ci
9962306a36Sopenharmony_ci1999-05-02: Fixed a typo in videodev.h, and added the
10062306a36Sopenharmony_ciV4L2_CTRL_FLAG_GRAYED (later V4L2_CTRL_FLAG_GRABBED) flag.
10162306a36Sopenharmony_ci
10262306a36Sopenharmony_ci1999-05-20: Definition of VIDIOC_G_CTRL was wrong causing a
10362306a36Sopenharmony_cimalfunction of this ioctl.
10462306a36Sopenharmony_ci
10562306a36Sopenharmony_ci1999-06-05: Changed the value of V4L2_CID_WHITENESS.
10662306a36Sopenharmony_ci
10762306a36Sopenharmony_ciV4L2 Version 0.20 (1999-09-10)
10862306a36Sopenharmony_ci==============================
10962306a36Sopenharmony_ci
11062306a36Sopenharmony_ciVersion 0.20 introduced a number of changes which were *not backward
11162306a36Sopenharmony_cicompatible* with 0.19 and earlier versions. Purpose of these changes was
11262306a36Sopenharmony_cito simplify the API, while making it more extensible and following
11362306a36Sopenharmony_cicommon Linux driver API conventions.
11462306a36Sopenharmony_ci
11562306a36Sopenharmony_ci1. Some typos in ``V4L2_FMT_FLAG`` symbols were fixed. struct v4l2_clip
11662306a36Sopenharmony_ci   was changed for compatibility with v4l. (1999-08-30)
11762306a36Sopenharmony_ci
11862306a36Sopenharmony_ci2. ``V4L2_TUNER_SUB_LANG1`` was added. (1999-09-05)
11962306a36Sopenharmony_ci
12062306a36Sopenharmony_ci3. All ioctl() commands that used an integer argument now take a pointer
12162306a36Sopenharmony_ci   to an integer. Where it makes sense, ioctls will return the actual
12262306a36Sopenharmony_ci   new value in the integer pointed to by the argument, a common
12362306a36Sopenharmony_ci   convention in the V4L2 API. The affected ioctls are: VIDIOC_PREVIEW,
12462306a36Sopenharmony_ci   VIDIOC_STREAMON, VIDIOC_STREAMOFF, VIDIOC_S_FREQ,
12562306a36Sopenharmony_ci   VIDIOC_S_INPUT, VIDIOC_S_OUTPUT, VIDIOC_S_EFFECT. For example
12662306a36Sopenharmony_ci
12762306a36Sopenharmony_ci   .. code-block:: c
12862306a36Sopenharmony_ci
12962306a36Sopenharmony_ci       err = ioctl (fd, VIDIOC_XXX, V4L2_XXX);
13062306a36Sopenharmony_ci
13162306a36Sopenharmony_ci   becomes
13262306a36Sopenharmony_ci
13362306a36Sopenharmony_ci   .. code-block:: c
13462306a36Sopenharmony_ci
13562306a36Sopenharmony_ci       int a = V4L2_XXX; err = ioctl(fd, VIDIOC_XXX, &a);
13662306a36Sopenharmony_ci
13762306a36Sopenharmony_ci4. All the different get- and set-format commands were swept into one
13862306a36Sopenharmony_ci   :ref:`VIDIOC_G_FMT <VIDIOC_G_FMT>` and
13962306a36Sopenharmony_ci   :ref:`VIDIOC_S_FMT <VIDIOC_G_FMT>` ioctl taking a union and a
14062306a36Sopenharmony_ci   type field selecting the union member as parameter. Purpose is to
14162306a36Sopenharmony_ci   simplify the API by eliminating several ioctls and to allow new and
14262306a36Sopenharmony_ci   driver private data streams without adding new ioctls.
14362306a36Sopenharmony_ci
14462306a36Sopenharmony_ci   This change obsoletes the following ioctls: ``VIDIOC_S_INFMT``,
14562306a36Sopenharmony_ci   ``VIDIOC_G_INFMT``, ``VIDIOC_S_OUTFMT``, ``VIDIOC_G_OUTFMT``,
14662306a36Sopenharmony_ci   ``VIDIOC_S_VBIFMT`` and ``VIDIOC_G_VBIFMT``. The image format
14762306a36Sopenharmony_ci   struct v4l2_format was renamed to struct v4l2_pix_format, while
14862306a36Sopenharmony_ci   struct v4l2_format is now the enveloping structure
14962306a36Sopenharmony_ci   for all format negotiations.
15062306a36Sopenharmony_ci
15162306a36Sopenharmony_ci5. Similar to the changes above, the ``VIDIOC_G_PARM`` and
15262306a36Sopenharmony_ci   ``VIDIOC_S_PARM`` ioctls were merged with ``VIDIOC_G_OUTPARM`` and
15362306a36Sopenharmony_ci   ``VIDIOC_S_OUTPARM``. A ``type`` field in the new struct v4l2_streamparm
15462306a36Sopenharmony_ci   selects the respective union member.
15562306a36Sopenharmony_ci
15662306a36Sopenharmony_ci   This change obsoletes the ``VIDIOC_G_OUTPARM`` and
15762306a36Sopenharmony_ci   ``VIDIOC_S_OUTPARM`` ioctls.
15862306a36Sopenharmony_ci
15962306a36Sopenharmony_ci6. Control enumeration was simplified, and two new control flags were
16062306a36Sopenharmony_ci   introduced and one dropped. The ``catname`` field was replaced by a
16162306a36Sopenharmony_ci   ``group`` field.
16262306a36Sopenharmony_ci
16362306a36Sopenharmony_ci   Drivers can now flag unsupported and temporarily unavailable controls
16462306a36Sopenharmony_ci   with ``V4L2_CTRL_FLAG_DISABLED`` and ``V4L2_CTRL_FLAG_GRABBED``
16562306a36Sopenharmony_ci   respectively. The ``group`` name indicates a possibly narrower
16662306a36Sopenharmony_ci   classification than the ``category``. In other words, there may be
16762306a36Sopenharmony_ci   multiple groups within a category. Controls within a group would
16862306a36Sopenharmony_ci   typically be drawn within a group box. Controls in different
16962306a36Sopenharmony_ci   categories might have a greater separation, or may even appear in
17062306a36Sopenharmony_ci   separate windows.
17162306a36Sopenharmony_ci
17262306a36Sopenharmony_ci7. The struct v4l2_buffer ``timestamp`` was
17362306a36Sopenharmony_ci   changed to a 64 bit integer, containing the sampling or output time
17462306a36Sopenharmony_ci   of the frame in nanoseconds. Additionally timestamps will be in
17562306a36Sopenharmony_ci   absolute system time, not starting from zero at the beginning of a
17662306a36Sopenharmony_ci   stream. The data type name for timestamps is stamp_t, defined as a
17762306a36Sopenharmony_ci   signed 64-bit integer. Output devices should not send a buffer out
17862306a36Sopenharmony_ci   until the time in the timestamp field has arrived. I would like to
17962306a36Sopenharmony_ci   follow SGI's lead, and adopt a multimedia timestamping system like
18062306a36Sopenharmony_ci   their UST (Unadjusted System Time). See
18162306a36Sopenharmony_ci   http://web.archive.org/web/\*/http://reality.sgi.com
18262306a36Sopenharmony_ci   /cpirazzi_engr/lg/time/intro.html. UST uses timestamps that are
18362306a36Sopenharmony_ci   64-bit signed integers (not struct timeval's) and given in nanosecond
18462306a36Sopenharmony_ci   units. The UST clock starts at zero when the system is booted and
18562306a36Sopenharmony_ci   runs continuously and uniformly. It takes a little over 292 years for
18662306a36Sopenharmony_ci   UST to overflow. There is no way to set the UST clock. The regular
18762306a36Sopenharmony_ci   Linux time-of-day clock can be changed periodically, which would
18862306a36Sopenharmony_ci   cause errors if it were being used for timestamping a multimedia
18962306a36Sopenharmony_ci   stream. A real UST style clock will require some support in the
19062306a36Sopenharmony_ci   kernel that is not there yet. But in anticipation, I will change the
19162306a36Sopenharmony_ci   timestamp field to a 64-bit integer, and I will change the
19262306a36Sopenharmony_ci   v4l2_masterclock_gettime() function (used only by drivers) to
19362306a36Sopenharmony_ci   return a 64-bit integer.
19462306a36Sopenharmony_ci
19562306a36Sopenharmony_ci8. A ``sequence`` field was added to struct v4l2_buffer. The ``sequence``
19662306a36Sopenharmony_ci   field counts captured frames, it is ignored by output devices. When a
19762306a36Sopenharmony_ci   capture driver drops a frame, the sequence number of that frame is skipped.
19862306a36Sopenharmony_ci
19962306a36Sopenharmony_ciV4L2 Version 0.20 incremental changes
20062306a36Sopenharmony_ci=====================================
20162306a36Sopenharmony_ci
20262306a36Sopenharmony_ci1999-12-23: In struct v4l2_vbi_format the
20362306a36Sopenharmony_ci``reserved1`` field became ``offset``. Previously drivers were required
20462306a36Sopenharmony_cito clear the ``reserved1`` field.
20562306a36Sopenharmony_ci
20662306a36Sopenharmony_ci2000-01-13: The ``V4L2_FMT_FLAG_NOT_INTERLACED`` flag was added.
20762306a36Sopenharmony_ci
20862306a36Sopenharmony_ci2000-07-31: The ``linux/poll.h`` header is now included by
20962306a36Sopenharmony_ci``videodev.h`` for compatibility with the original ``videodev.h`` file.
21062306a36Sopenharmony_ci
21162306a36Sopenharmony_ci2000-11-20: ``V4L2_TYPE_VBI_OUTPUT`` and ``V4L2_PIX_FMT_Y41P`` were
21262306a36Sopenharmony_ciadded.
21362306a36Sopenharmony_ci
21462306a36Sopenharmony_ci2000-11-25: ``V4L2_TYPE_VBI_INPUT`` was added.
21562306a36Sopenharmony_ci
21662306a36Sopenharmony_ci2000-12-04: A couple typos in symbol names were fixed.
21762306a36Sopenharmony_ci
21862306a36Sopenharmony_ci2001-01-18: To avoid namespace conflicts the ``fourcc`` macro defined in
21962306a36Sopenharmony_cithe ``videodev.h`` header file was renamed to ``v4l2_fourcc``.
22062306a36Sopenharmony_ci
22162306a36Sopenharmony_ci2001-01-25: A possible driver-level compatibility problem between the
22262306a36Sopenharmony_ci``videodev.h`` file in Linux 2.4.0 and the ``videodev.h`` file included
22362306a36Sopenharmony_ciin the ``videodevX`` patch was fixed. Users of an earlier version of
22462306a36Sopenharmony_ci``videodevX`` on Linux 2.4.0 should recompile their V4L and V4L2
22562306a36Sopenharmony_cidrivers.
22662306a36Sopenharmony_ci
22762306a36Sopenharmony_ci2001-01-26: A possible kernel-level incompatibility between the
22862306a36Sopenharmony_ci``videodev.h`` file in the ``videodevX`` patch and the ``videodev.h``
22962306a36Sopenharmony_cifile in Linux 2.2.x with devfs patches applied was fixed.
23062306a36Sopenharmony_ci
23162306a36Sopenharmony_ci2001-03-02: Certain V4L ioctls which pass data in both direction
23262306a36Sopenharmony_cialthough they are defined with read-only parameter, did not work
23362306a36Sopenharmony_cicorrectly through the backward compatibility layer. [Solution?]
23462306a36Sopenharmony_ci
23562306a36Sopenharmony_ci2001-04-13: Big endian 16-bit RGB formats were added.
23662306a36Sopenharmony_ci
23762306a36Sopenharmony_ci2001-09-17: New YUV formats and the
23862306a36Sopenharmony_ci:ref:`VIDIOC_G_FREQUENCY <VIDIOC_G_FREQUENCY>` and
23962306a36Sopenharmony_ci:ref:`VIDIOC_S_FREQUENCY <VIDIOC_G_FREQUENCY>` ioctls were added.
24062306a36Sopenharmony_ci(The old ``VIDIOC_G_FREQ`` and ``VIDIOC_S_FREQ`` ioctls did not take
24162306a36Sopenharmony_cimultiple tuners into account.)
24262306a36Sopenharmony_ci
24362306a36Sopenharmony_ci2000-09-18: ``V4L2_BUF_TYPE_VBI`` was added. This may *break
24462306a36Sopenharmony_cicompatibility* as the :ref:`VIDIOC_G_FMT <VIDIOC_G_FMT>` and
24562306a36Sopenharmony_ci:ref:`VIDIOC_S_FMT <VIDIOC_G_FMT>` ioctls may fail now if the
24662306a36Sopenharmony_cistruct ``v4l2_fmt`` ``type`` field does not contain
24762306a36Sopenharmony_ci``V4L2_BUF_TYPE_VBI``. In the documentation of the struct v4l2_vbi_format`,
24862306a36Sopenharmony_cithe ``offset`` field the ambiguous phrase "rising edge" was changed to
24962306a36Sopenharmony_ci"leading edge".
25062306a36Sopenharmony_ci
25162306a36Sopenharmony_ciV4L2 Version 0.20 2000-11-23
25262306a36Sopenharmony_ci============================
25362306a36Sopenharmony_ci
25462306a36Sopenharmony_ciA number of changes were made to the raw VBI interface.
25562306a36Sopenharmony_ci
25662306a36Sopenharmony_ci1. Figures clarifying the line numbering scheme were added to the V4L2
25762306a36Sopenharmony_ci   API specification. The ``start``\ [0] and ``start``\ [1] fields no
25862306a36Sopenharmony_ci   longer count line numbers beginning at zero. Rationale: a) The
25962306a36Sopenharmony_ci   previous definition was unclear. b) The ``start``\ [] values are
26062306a36Sopenharmony_ci   ordinal numbers. c) There is no point in inventing a new line
26162306a36Sopenharmony_ci   numbering scheme. We now use line number as defined by ITU-R, period.
26262306a36Sopenharmony_ci   Compatibility: Add one to the start values. Applications depending on
26362306a36Sopenharmony_ci   the previous semantics may not function correctly.
26462306a36Sopenharmony_ci
26562306a36Sopenharmony_ci2. The restriction "count[0] > 0 and count[1] > 0" has been relaxed to
26662306a36Sopenharmony_ci   "(count[0] + count[1]) > 0". Rationale: Drivers may allocate
26762306a36Sopenharmony_ci   resources at scan line granularity and some data services are
26862306a36Sopenharmony_ci   transmitted only on the first field. The comment that both ``count``
26962306a36Sopenharmony_ci   values will usually be equal is misleading and pointless and has been
27062306a36Sopenharmony_ci   removed. This change *breaks compatibility* with earlier versions:
27162306a36Sopenharmony_ci   Drivers may return ``EINVAL``, applications may not function correctly.
27262306a36Sopenharmony_ci
27362306a36Sopenharmony_ci3. Drivers are again permitted to return negative (unknown) start values
27462306a36Sopenharmony_ci   as proposed earlier. Why this feature was dropped is unclear. This
27562306a36Sopenharmony_ci   change may *break compatibility* with applications depending on the
27662306a36Sopenharmony_ci   start values being positive. The use of ``EBUSY`` and ``EINVAL``
27762306a36Sopenharmony_ci   error codes with the :ref:`VIDIOC_S_FMT <VIDIOC_G_FMT>` ioctl was
27862306a36Sopenharmony_ci   clarified. The ``EBUSY`` error code was finally documented, and the
27962306a36Sopenharmony_ci   ``reserved2`` field which was previously mentioned only in the
28062306a36Sopenharmony_ci   ``videodev.h`` header file.
28162306a36Sopenharmony_ci
28262306a36Sopenharmony_ci4. New buffer types ``V4L2_TYPE_VBI_INPUT`` and ``V4L2_TYPE_VBI_OUTPUT``
28362306a36Sopenharmony_ci   were added. The former is an alias for the old ``V4L2_TYPE_VBI``, the
28462306a36Sopenharmony_ci   latter was missing in the ``videodev.h`` file.
28562306a36Sopenharmony_ci
28662306a36Sopenharmony_ciV4L2 Version 0.20 2002-07-25
28762306a36Sopenharmony_ci============================
28862306a36Sopenharmony_ci
28962306a36Sopenharmony_ciAdded sliced VBI interface proposal.
29062306a36Sopenharmony_ci
29162306a36Sopenharmony_ciV4L2 in Linux 2.5.46, 2002-10
29262306a36Sopenharmony_ci=============================
29362306a36Sopenharmony_ci
29462306a36Sopenharmony_ciAround October-November 2002, prior to an announced feature freeze of
29562306a36Sopenharmony_ciLinux 2.5, the API was revised, drawing from experience with V4L2 0.20.
29662306a36Sopenharmony_ciThis unnamed version was finally merged into Linux 2.5.46.
29762306a36Sopenharmony_ci
29862306a36Sopenharmony_ci1.  As specified in :ref:`related`, drivers must make related device
29962306a36Sopenharmony_ci    functions available under all minor device numbers.
30062306a36Sopenharmony_ci
30162306a36Sopenharmony_ci2.  The :c:func:`open()` function requires access mode
30262306a36Sopenharmony_ci    ``O_RDWR`` regardless of the device type. All V4L2 drivers
30362306a36Sopenharmony_ci    exchanging data with applications must support the ``O_NONBLOCK``
30462306a36Sopenharmony_ci    flag. The ``O_NOIO`` flag, a V4L2 symbol which aliased the
30562306a36Sopenharmony_ci    meaningless ``O_TRUNC`` to indicate accesses without data exchange
30662306a36Sopenharmony_ci    (panel applications) was dropped. Drivers must stay in "panel mode"
30762306a36Sopenharmony_ci    until the application attempts to initiate a data exchange, see
30862306a36Sopenharmony_ci    :ref:`open`.
30962306a36Sopenharmony_ci
31062306a36Sopenharmony_ci3.  The struct v4l2_capability changed
31162306a36Sopenharmony_ci    dramatically. Note that also the size of the structure changed,
31262306a36Sopenharmony_ci    which is encoded in the ioctl request code, thus older V4L2 devices
31362306a36Sopenharmony_ci    will respond with an ``EINVAL`` error code to the new
31462306a36Sopenharmony_ci    :ref:`VIDIOC_QUERYCAP` ioctl.
31562306a36Sopenharmony_ci
31662306a36Sopenharmony_ci    There are new fields to identify the driver, a new RDS device
31762306a36Sopenharmony_ci    function ``V4L2_CAP_RDS_CAPTURE``, the ``V4L2_CAP_AUDIO`` flag
31862306a36Sopenharmony_ci    indicates if the device has any audio connectors, another I/O
31962306a36Sopenharmony_ci    capability V4L2_CAP_ASYNCIO can be flagged. In response to these
32062306a36Sopenharmony_ci    changes the ``type`` field became a bit set and was merged into the
32162306a36Sopenharmony_ci    ``flags`` field. ``V4L2_FLAG_TUNER`` was renamed to
32262306a36Sopenharmony_ci    ``V4L2_CAP_TUNER``, ``V4L2_CAP_VIDEO_OVERLAY`` replaced
32362306a36Sopenharmony_ci    ``V4L2_FLAG_PREVIEW`` and ``V4L2_CAP_VBI_CAPTURE`` and
32462306a36Sopenharmony_ci    ``V4L2_CAP_VBI_OUTPUT`` replaced ``V4L2_FLAG_DATA_SERVICE``.
32562306a36Sopenharmony_ci    ``V4L2_FLAG_READ`` and ``V4L2_FLAG_WRITE`` were merged into
32662306a36Sopenharmony_ci    ``V4L2_CAP_READWRITE``.
32762306a36Sopenharmony_ci
32862306a36Sopenharmony_ci    The redundant fields ``inputs``, ``outputs`` and ``audios`` were
32962306a36Sopenharmony_ci    removed. These properties can be determined as described in
33062306a36Sopenharmony_ci    :ref:`video` and :ref:`audio`.
33162306a36Sopenharmony_ci
33262306a36Sopenharmony_ci    The somewhat volatile and therefore barely useful fields
33362306a36Sopenharmony_ci    ``maxwidth``, ``maxheight``, ``minwidth``, ``minheight``,
33462306a36Sopenharmony_ci    ``maxframerate`` were removed. This information is available as
33562306a36Sopenharmony_ci    described in :ref:`format` and :ref:`standard`.
33662306a36Sopenharmony_ci
33762306a36Sopenharmony_ci    ``V4L2_FLAG_SELECT`` was removed. We believe the select() function
33862306a36Sopenharmony_ci    is important enough to require support of it in all V4L2 drivers
33962306a36Sopenharmony_ci    exchanging data with applications. The redundant
34062306a36Sopenharmony_ci    ``V4L2_FLAG_MONOCHROME`` flag was removed, this information is
34162306a36Sopenharmony_ci    available as described in :ref:`format`.
34262306a36Sopenharmony_ci
34362306a36Sopenharmony_ci4.  In struct v4l2_input the ``assoc_audio``
34462306a36Sopenharmony_ci    field and the ``capability`` field and its only flag
34562306a36Sopenharmony_ci    ``V4L2_INPUT_CAP_AUDIO`` was replaced by the new ``audioset`` field.
34662306a36Sopenharmony_ci    Instead of linking one video input to one audio input this field
34762306a36Sopenharmony_ci    reports all audio inputs this video input combines with.
34862306a36Sopenharmony_ci
34962306a36Sopenharmony_ci    New fields are ``tuner`` (reversing the former link from tuners to
35062306a36Sopenharmony_ci    video inputs), ``std`` and ``status``.
35162306a36Sopenharmony_ci
35262306a36Sopenharmony_ci    Accordingly struct v4l2_output lost its
35362306a36Sopenharmony_ci    ``capability`` and ``assoc_audio`` fields. ``audioset``,
35462306a36Sopenharmony_ci    ``modulator`` and ``std`` where added instead.
35562306a36Sopenharmony_ci
35662306a36Sopenharmony_ci5.  The struct v4l2_audio field ``audio`` was
35762306a36Sopenharmony_ci    renamed to ``index``, for consistency with other structures. A new
35862306a36Sopenharmony_ci    capability flag ``V4L2_AUDCAP_STEREO`` was added to indicated if the
35962306a36Sopenharmony_ci    audio input in question supports stereo sound.
36062306a36Sopenharmony_ci    ``V4L2_AUDCAP_EFFECTS`` and the corresponding ``V4L2_AUDMODE`` flags
36162306a36Sopenharmony_ci    where removed. This can be easily implemented using controls.
36262306a36Sopenharmony_ci    (However the same applies to AVL which is still there.)
36362306a36Sopenharmony_ci
36462306a36Sopenharmony_ci    Again for consistency the struct v4l2_audioout field ``audio`` was renamed
36562306a36Sopenharmony_ci    to ``index``.
36662306a36Sopenharmony_ci
36762306a36Sopenharmony_ci6.  The struct v4l2_tuner ``input`` field was
36862306a36Sopenharmony_ci    replaced by an ``index`` field, permitting devices with multiple
36962306a36Sopenharmony_ci    tuners. The link between video inputs and tuners is now reversed,
37062306a36Sopenharmony_ci    inputs point to their tuner. The ``std`` substructure became a
37162306a36Sopenharmony_ci    simple set (more about this below) and moved into struct v4l2_input.
37262306a36Sopenharmony_ci    A ``type`` field was added.
37362306a36Sopenharmony_ci
37462306a36Sopenharmony_ci    Accordingly in struct v4l2_modulator the
37562306a36Sopenharmony_ci    ``output`` was replaced by an ``index`` field.
37662306a36Sopenharmony_ci
37762306a36Sopenharmony_ci    In struct v4l2_frequency the ``port``
37862306a36Sopenharmony_ci    field was replaced by a ``tuner`` field containing the respective
37962306a36Sopenharmony_ci    tuner or modulator index number. A tuner ``type`` field was added
38062306a36Sopenharmony_ci    and the ``reserved`` field became larger for future extensions
38162306a36Sopenharmony_ci    (satellite tuners in particular).
38262306a36Sopenharmony_ci
38362306a36Sopenharmony_ci7.  The idea of completely transparent video standards was dropped.
38462306a36Sopenharmony_ci    Experience showed that applications must be able to work with video
38562306a36Sopenharmony_ci    standards beyond presenting the user a menu. Instead of enumerating
38662306a36Sopenharmony_ci    supported standards with an ioctl applications can now refer to
38762306a36Sopenharmony_ci    standards by :ref:`v4l2_std_id <v4l2-std-id>` and symbols
38862306a36Sopenharmony_ci    defined in the ``videodev2.h`` header file. For details see
38962306a36Sopenharmony_ci    :ref:`standard`. The :ref:`VIDIOC_G_STD <VIDIOC_G_STD>` and
39062306a36Sopenharmony_ci    :ref:`VIDIOC_S_STD <VIDIOC_G_STD>` now take a pointer to this
39162306a36Sopenharmony_ci    type as argument. :ref:`VIDIOC_QUERYSTD` was
39262306a36Sopenharmony_ci    added to autodetect the received standard, if the hardware has this
39362306a36Sopenharmony_ci    capability. In struct v4l2_standard an
39462306a36Sopenharmony_ci    ``index`` field was added for
39562306a36Sopenharmony_ci    :ref:`VIDIOC_ENUMSTD`. A
39662306a36Sopenharmony_ci    :ref:`v4l2_std_id <v4l2-std-id>` field named ``id`` was added as
39762306a36Sopenharmony_ci    machine readable identifier, also replacing the ``transmission``
39862306a36Sopenharmony_ci    field. The misleading ``framerate`` field was renamed to
39962306a36Sopenharmony_ci    ``frameperiod``. The now obsolete ``colorstandard`` information,
40062306a36Sopenharmony_ci    originally needed to distguish between variations of standards, were
40162306a36Sopenharmony_ci    removed.
40262306a36Sopenharmony_ci
40362306a36Sopenharmony_ci    Struct ``v4l2_enumstd`` ceased to be.
40462306a36Sopenharmony_ci    :ref:`VIDIOC_ENUMSTD` now takes a pointer to a
40562306a36Sopenharmony_ci    struct v4l2_standard directly. The
40662306a36Sopenharmony_ci    information which standards are supported by a particular video
40762306a36Sopenharmony_ci    input or output moved into struct v4l2_input
40862306a36Sopenharmony_ci    and struct v4l2_output fields named ``std``,
40962306a36Sopenharmony_ci    respectively.
41062306a36Sopenharmony_ci
41162306a36Sopenharmony_ci8.  The struct :ref:`v4l2_queryctrl <v4l2-queryctrl>` fields
41262306a36Sopenharmony_ci    ``category`` and ``group`` did not catch on and/or were not
41362306a36Sopenharmony_ci    implemented as expected and therefore removed.
41462306a36Sopenharmony_ci
41562306a36Sopenharmony_ci9.  The :ref:`VIDIOC_TRY_FMT <VIDIOC_G_FMT>` ioctl was added to
41662306a36Sopenharmony_ci    negotiate data formats as with
41762306a36Sopenharmony_ci    :ref:`VIDIOC_S_FMT <VIDIOC_G_FMT>`, but without the overhead of
41862306a36Sopenharmony_ci    programming the hardware and regardless of I/O in progress.
41962306a36Sopenharmony_ci
42062306a36Sopenharmony_ci    In struct v4l2_format the ``fmt`` union was
42162306a36Sopenharmony_ci    extended to contain struct v4l2_window. All
42262306a36Sopenharmony_ci    image format negotiations are now possible with ``VIDIOC_G_FMT``,
42362306a36Sopenharmony_ci    ``VIDIOC_S_FMT`` and ``VIDIOC_TRY_FMT``; ioctl. The ``VIDIOC_G_WIN``
42462306a36Sopenharmony_ci    and ``VIDIOC_S_WIN`` ioctls to prepare for a video overlay were
42562306a36Sopenharmony_ci    removed. The ``type`` field changed to type enum v4l2_buf_type and
42662306a36Sopenharmony_ci    the buffer type names changed as follows.
42762306a36Sopenharmony_ci
42862306a36Sopenharmony_ci
42962306a36Sopenharmony_ci    .. flat-table::
43062306a36Sopenharmony_ci	:header-rows:  1
43162306a36Sopenharmony_ci	:stub-columns: 0
43262306a36Sopenharmony_ci
43362306a36Sopenharmony_ci	* - Old defines
43462306a36Sopenharmony_ci	  - enum v4l2_buf_type
43562306a36Sopenharmony_ci	* - ``V4L2_BUF_TYPE_CAPTURE``
43662306a36Sopenharmony_ci	  - ``V4L2_BUF_TYPE_VIDEO_CAPTURE``
43762306a36Sopenharmony_ci	* - ``V4L2_BUF_TYPE_CODECIN``
43862306a36Sopenharmony_ci	  - Omitted for now
43962306a36Sopenharmony_ci	* - ``V4L2_BUF_TYPE_CODECOUT``
44062306a36Sopenharmony_ci	  - Omitted for now
44162306a36Sopenharmony_ci	* - ``V4L2_BUF_TYPE_EFFECTSIN``
44262306a36Sopenharmony_ci	  - Omitted for now
44362306a36Sopenharmony_ci	* - ``V4L2_BUF_TYPE_EFFECTSIN2``
44462306a36Sopenharmony_ci	  - Omitted for now
44562306a36Sopenharmony_ci	* - ``V4L2_BUF_TYPE_EFFECTSOUT``
44662306a36Sopenharmony_ci	  - Omitted for now
44762306a36Sopenharmony_ci	* - ``V4L2_BUF_TYPE_VIDEOOUT``
44862306a36Sopenharmony_ci	  - ``V4L2_BUF_TYPE_VIDEO_OUTPUT``
44962306a36Sopenharmony_ci	* - ``-``
45062306a36Sopenharmony_ci	  - ``V4L2_BUF_TYPE_VIDEO_OVERLAY``
45162306a36Sopenharmony_ci	* - ``-``
45262306a36Sopenharmony_ci	  - ``V4L2_BUF_TYPE_VBI_CAPTURE``
45362306a36Sopenharmony_ci	* - ``-``
45462306a36Sopenharmony_ci	  - ``V4L2_BUF_TYPE_VBI_OUTPUT``
45562306a36Sopenharmony_ci	* - ``-``
45662306a36Sopenharmony_ci	  - ``V4L2_BUF_TYPE_SLICED_VBI_CAPTURE``
45762306a36Sopenharmony_ci	* - ``-``
45862306a36Sopenharmony_ci	  - ``V4L2_BUF_TYPE_SLICED_VBI_OUTPUT``
45962306a36Sopenharmony_ci	* - ``V4L2_BUF_TYPE_PRIVATE_BASE``
46062306a36Sopenharmony_ci	  - ``V4L2_BUF_TYPE_PRIVATE`` (but this is deprecated)
46162306a36Sopenharmony_ci
46262306a36Sopenharmony_ci10. In struct v4l2_fmtdesc a enum v4l2_buf_type field named ``type`` was
46362306a36Sopenharmony_ci    added as in struct v4l2_format. The ``VIDIOC_ENUM_FBUFFMT`` ioctl is no
46462306a36Sopenharmony_ci    longer needed and was removed. These calls can be replaced by
46562306a36Sopenharmony_ci    :ref:`VIDIOC_ENUM_FMT` with type ``V4L2_BUF_TYPE_VIDEO_OVERLAY``.
46662306a36Sopenharmony_ci
46762306a36Sopenharmony_ci11. In struct v4l2_pix_format the ``depth``
46862306a36Sopenharmony_ci    field was removed, assuming applications which recognize the format
46962306a36Sopenharmony_ci    by its four-character-code already know the color depth, and others
47062306a36Sopenharmony_ci    do not care about it. The same rationale lead to the removal of the
47162306a36Sopenharmony_ci    ``V4L2_FMT_FLAG_COMPRESSED`` flag. The
47262306a36Sopenharmony_ci    ``V4L2_FMT_FLAG_SWCONVECOMPRESSED`` flag was removed because drivers
47362306a36Sopenharmony_ci    are not supposed to convert images in kernel space. A user library
47462306a36Sopenharmony_ci    of conversion functions should be provided instead. The
47562306a36Sopenharmony_ci    ``V4L2_FMT_FLAG_BYTESPERLINE`` flag was redundant. Applications can
47662306a36Sopenharmony_ci    set the ``bytesperline`` field to zero to get a reasonable default.
47762306a36Sopenharmony_ci    Since the remaining flags were replaced as well, the ``flags`` field
47862306a36Sopenharmony_ci    itself was removed.
47962306a36Sopenharmony_ci
48062306a36Sopenharmony_ci    The interlace flags were replaced by a enum v4l2_field value in a
48162306a36Sopenharmony_ci    newly added ``field`` field.
48262306a36Sopenharmony_ci
48362306a36Sopenharmony_ci    .. flat-table::
48462306a36Sopenharmony_ci	:header-rows:  1
48562306a36Sopenharmony_ci	:stub-columns: 0
48662306a36Sopenharmony_ci
48762306a36Sopenharmony_ci	* - Old flag
48862306a36Sopenharmony_ci	  - enum v4l2_field
48962306a36Sopenharmony_ci	* - ``V4L2_FMT_FLAG_NOT_INTERLACED``
49062306a36Sopenharmony_ci	  - ?
49162306a36Sopenharmony_ci	* - ``V4L2_FMT_FLAG_INTERLACED`` = ``V4L2_FMT_FLAG_COMBINED``
49262306a36Sopenharmony_ci	  - ``V4L2_FIELD_INTERLACED``
49362306a36Sopenharmony_ci	* - ``V4L2_FMT_FLAG_TOPFIELD`` = ``V4L2_FMT_FLAG_ODDFIELD``
49462306a36Sopenharmony_ci	  - ``V4L2_FIELD_TOP``
49562306a36Sopenharmony_ci	* - ``V4L2_FMT_FLAG_BOTFIELD`` = ``V4L2_FMT_FLAG_EVENFIELD``
49662306a36Sopenharmony_ci	  - ``V4L2_FIELD_BOTTOM``
49762306a36Sopenharmony_ci	* - ``-``
49862306a36Sopenharmony_ci	  - ``V4L2_FIELD_SEQ_TB``
49962306a36Sopenharmony_ci	* - ``-``
50062306a36Sopenharmony_ci	  - ``V4L2_FIELD_SEQ_BT``
50162306a36Sopenharmony_ci	* - ``-``
50262306a36Sopenharmony_ci	  - ``V4L2_FIELD_ALTERNATE``
50362306a36Sopenharmony_ci
50462306a36Sopenharmony_ci    The color space flags were replaced by a enum v4l2_colorspace value in
50562306a36Sopenharmony_ci    a newly added ``colorspace`` field, where one of
50662306a36Sopenharmony_ci    ``V4L2_COLORSPACE_SMPTE170M``, ``V4L2_COLORSPACE_BT878``,
50762306a36Sopenharmony_ci    ``V4L2_COLORSPACE_470_SYSTEM_M`` or
50862306a36Sopenharmony_ci    ``V4L2_COLORSPACE_470_SYSTEM_BG`` replaces ``V4L2_FMT_CS_601YUV``.
50962306a36Sopenharmony_ci
51062306a36Sopenharmony_ci12. In struct v4l2_requestbuffers the
51162306a36Sopenharmony_ci    ``type`` field was properly defined as enum v4l2_buf_type. Buffer types
51262306a36Sopenharmony_ci    changed as mentioned above. A new ``memory`` field of type
51362306a36Sopenharmony_ci    enum v4l2_memory was added to distinguish between
51462306a36Sopenharmony_ci    I/O methods using buffers allocated by the driver or the
51562306a36Sopenharmony_ci    application. See :ref:`io` for details.
51662306a36Sopenharmony_ci
51762306a36Sopenharmony_ci13. In struct v4l2_buffer the ``type`` field was
51862306a36Sopenharmony_ci    properly defined as enum v4l2_buf_type.
51962306a36Sopenharmony_ci    Buffer types changed as mentioned above. A ``field`` field of type
52062306a36Sopenharmony_ci    enum v4l2_field was added to indicate if a
52162306a36Sopenharmony_ci    buffer contains a top or bottom field. The old field flags were
52262306a36Sopenharmony_ci    removed. Since no unadjusted system time clock was added to the
52362306a36Sopenharmony_ci    kernel as planned, the ``timestamp`` field changed back from type
52462306a36Sopenharmony_ci    stamp_t, an unsigned 64 bit integer expressing the sample time in
52562306a36Sopenharmony_ci    nanoseconds, to struct timeval. With the addition
52662306a36Sopenharmony_ci    of a second memory mapping method the ``offset`` field moved into
52762306a36Sopenharmony_ci    union ``m``, and a new ``memory`` field of type enum v4l2_memory
52862306a36Sopenharmony_ci    was added to distinguish between
52962306a36Sopenharmony_ci    I/O methods. See :ref:`io` for details.
53062306a36Sopenharmony_ci
53162306a36Sopenharmony_ci    The ``V4L2_BUF_REQ_CONTIG`` flag was used by the V4L compatibility
53262306a36Sopenharmony_ci    layer, after changes to this code it was no longer needed. The
53362306a36Sopenharmony_ci    ``V4L2_BUF_ATTR_DEVICEMEM`` flag would indicate if the buffer was
53462306a36Sopenharmony_ci    indeed allocated in device memory rather than DMA-able system
53562306a36Sopenharmony_ci    memory. It was barely useful and so was removed.
53662306a36Sopenharmony_ci
53762306a36Sopenharmony_ci14. In struct v4l2_framebuffer the
53862306a36Sopenharmony_ci    ``base[3]`` array anticipating double- and triple-buffering in
53962306a36Sopenharmony_ci    off-screen video memory, however without defining a synchronization
54062306a36Sopenharmony_ci    mechanism, was replaced by a single pointer. The
54162306a36Sopenharmony_ci    ``V4L2_FBUF_CAP_SCALEUP`` and ``V4L2_FBUF_CAP_SCALEDOWN`` flags were
54262306a36Sopenharmony_ci    removed. Applications can determine this capability more accurately
54362306a36Sopenharmony_ci    using the new cropping and scaling interface. The
54462306a36Sopenharmony_ci    ``V4L2_FBUF_CAP_CLIPPING`` flag was replaced by
54562306a36Sopenharmony_ci    ``V4L2_FBUF_CAP_LIST_CLIPPING`` and
54662306a36Sopenharmony_ci    ``V4L2_FBUF_CAP_BITMAP_CLIPPING``.
54762306a36Sopenharmony_ci
54862306a36Sopenharmony_ci15. In struct v4l2_clip the ``x``, ``y``,
54962306a36Sopenharmony_ci    ``width`` and ``height`` field moved into a ``c`` substructure of
55062306a36Sopenharmony_ci    type struct v4l2_rect. The ``x`` and ``y``
55162306a36Sopenharmony_ci    fields were renamed to ``left`` and ``top``, i. e. offsets to a
55262306a36Sopenharmony_ci    context dependent origin.
55362306a36Sopenharmony_ci
55462306a36Sopenharmony_ci16. In struct v4l2_window the ``x``, ``y``,
55562306a36Sopenharmony_ci    ``width`` and ``height`` field moved into a ``w`` substructure as
55662306a36Sopenharmony_ci    above. A ``field`` field of type enum v4l2_field was added to
55762306a36Sopenharmony_ci    distinguish between field and frame (interlaced) overlay.
55862306a36Sopenharmony_ci
55962306a36Sopenharmony_ci17. The digital zoom interface, including struct ``v4l2_zoomcap``,
56062306a36Sopenharmony_ci    struct ``v4l2_zoom``, ``V4L2_ZOOM_NONCAP`` and
56162306a36Sopenharmony_ci    ``V4L2_ZOOM_WHILESTREAMING`` was replaced by a new cropping and
56262306a36Sopenharmony_ci    scaling interface. The previously unused
56362306a36Sopenharmony_ci    struct v4l2_cropcap and struct v4l2_crop
56462306a36Sopenharmony_ci    where redefined for this purpose. See :ref:`crop` for details.
56562306a36Sopenharmony_ci
56662306a36Sopenharmony_ci18. In struct v4l2_vbi_format the
56762306a36Sopenharmony_ci    ``SAMPLE_FORMAT`` field now contains a four-character-code as used
56862306a36Sopenharmony_ci    to identify video image formats and ``V4L2_PIX_FMT_GREY`` replaces
56962306a36Sopenharmony_ci    the ``V4L2_VBI_SF_UBYTE`` define. The ``reserved`` field was
57062306a36Sopenharmony_ci    extended.
57162306a36Sopenharmony_ci
57262306a36Sopenharmony_ci19. In struct v4l2_captureparm the type of
57362306a36Sopenharmony_ci    the ``timeperframe`` field changed from unsigned long to
57462306a36Sopenharmony_ci    struct v4l2_fract. This allows the accurate
57562306a36Sopenharmony_ci    expression of multiples of the NTSC-M frame rate 30000 / 1001. A new
57662306a36Sopenharmony_ci    field ``readbuffers`` was added to control the driver behaviour in
57762306a36Sopenharmony_ci    read I/O mode.
57862306a36Sopenharmony_ci
57962306a36Sopenharmony_ci    Similar changes were made to struct v4l2_outputparm.
58062306a36Sopenharmony_ci
58162306a36Sopenharmony_ci20. The struct ``v4l2_performance`` and
58262306a36Sopenharmony_ci    ``VIDIOC_G_PERF`` ioctl were dropped. Except when using the
58362306a36Sopenharmony_ci    :ref:`read/write I/O method <rw>`, which is limited anyway, this
58462306a36Sopenharmony_ci    information is already available to applications.
58562306a36Sopenharmony_ci
58662306a36Sopenharmony_ci21. The example transformation from RGB to YCbCr color space in the old
58762306a36Sopenharmony_ci    V4L2 documentation was inaccurate, this has been corrected in
58862306a36Sopenharmony_ci    :ref:`pixfmt`.
58962306a36Sopenharmony_ci
59062306a36Sopenharmony_ciV4L2 2003-06-19
59162306a36Sopenharmony_ci===============
59262306a36Sopenharmony_ci
59362306a36Sopenharmony_ci1. A new capability flag ``V4L2_CAP_RADIO`` was added for radio devices.
59462306a36Sopenharmony_ci   Prior to this change radio devices would identify solely by having
59562306a36Sopenharmony_ci   exactly one tuner whose type field reads ``V4L2_TUNER_RADIO``.
59662306a36Sopenharmony_ci
59762306a36Sopenharmony_ci2. An optional driver access priority mechanism was added, see
59862306a36Sopenharmony_ci   :ref:`app-pri` for details.
59962306a36Sopenharmony_ci
60062306a36Sopenharmony_ci3. The audio input and output interface was found to be incomplete.
60162306a36Sopenharmony_ci
60262306a36Sopenharmony_ci   Previously the :ref:`VIDIOC_G_AUDIO <VIDIOC_G_AUDIO>` ioctl would
60362306a36Sopenharmony_ci   enumerate the available audio inputs. An ioctl to determine the
60462306a36Sopenharmony_ci   current audio input, if more than one combines with the current video
60562306a36Sopenharmony_ci   input, did not exist. So ``VIDIOC_G_AUDIO`` was renamed to
60662306a36Sopenharmony_ci   ``VIDIOC_G_AUDIO_OLD``, this ioctl was removed on Kernel 2.6.39. The
60762306a36Sopenharmony_ci   :ref:`VIDIOC_ENUMAUDIO` ioctl was added to
60862306a36Sopenharmony_ci   enumerate audio inputs, while
60962306a36Sopenharmony_ci   :ref:`VIDIOC_G_AUDIO <VIDIOC_G_AUDIO>` now reports the current
61062306a36Sopenharmony_ci   audio input.
61162306a36Sopenharmony_ci
61262306a36Sopenharmony_ci   The same changes were made to
61362306a36Sopenharmony_ci   :ref:`VIDIOC_G_AUDOUT <VIDIOC_G_AUDOUT>` and
61462306a36Sopenharmony_ci   :ref:`VIDIOC_ENUMAUDOUT <VIDIOC_ENUMAUDOUT>`.
61562306a36Sopenharmony_ci
61662306a36Sopenharmony_ci   Until further the "videodev" module will automatically translate
61762306a36Sopenharmony_ci   between the old and new ioctls, but drivers and applications must be
61862306a36Sopenharmony_ci   updated to successfully compile again.
61962306a36Sopenharmony_ci
62062306a36Sopenharmony_ci4. The :ref:`VIDIOC_OVERLAY` ioctl was incorrectly
62162306a36Sopenharmony_ci   defined with write-read parameter. It was changed to write-only,
62262306a36Sopenharmony_ci   while the write-read version was renamed to ``VIDIOC_OVERLAY_OLD``.
62362306a36Sopenharmony_ci   The old ioctl was removed on Kernel 2.6.39. Until further the
62462306a36Sopenharmony_ci   "videodev" kernel module will automatically translate to the new
62562306a36Sopenharmony_ci   version, so drivers must be recompiled, but not applications.
62662306a36Sopenharmony_ci
62762306a36Sopenharmony_ci5. :ref:`overlay` incorrectly stated that clipping rectangles define
62862306a36Sopenharmony_ci   regions where the video can be seen. Correct is that clipping
62962306a36Sopenharmony_ci   rectangles define regions where *no* video shall be displayed and so
63062306a36Sopenharmony_ci   the graphics surface can be seen.
63162306a36Sopenharmony_ci
63262306a36Sopenharmony_ci6. The :ref:`VIDIOC_S_PARM <VIDIOC_G_PARM>` and
63362306a36Sopenharmony_ci   :ref:`VIDIOC_S_CTRL <VIDIOC_G_CTRL>` ioctls were defined with
63462306a36Sopenharmony_ci   write-only parameter, inconsistent with other ioctls modifying their
63562306a36Sopenharmony_ci   argument. They were changed to write-read, while a ``_OLD`` suffix
63662306a36Sopenharmony_ci   was added to the write-only versions. The old ioctls were removed on
63762306a36Sopenharmony_ci   Kernel 2.6.39. Drivers and applications assuming a constant parameter
63862306a36Sopenharmony_ci   need an update.
63962306a36Sopenharmony_ci
64062306a36Sopenharmony_ciV4L2 2003-11-05
64162306a36Sopenharmony_ci===============
64262306a36Sopenharmony_ci
64362306a36Sopenharmony_ci1. In :ref:`pixfmt-rgb` the following pixel formats were incorrectly
64462306a36Sopenharmony_ci   transferred from Bill Dirks' V4L2 specification. Descriptions below
64562306a36Sopenharmony_ci   refer to bytes in memory, in ascending address order.
64662306a36Sopenharmony_ci
64762306a36Sopenharmony_ci
64862306a36Sopenharmony_ci   .. flat-table::
64962306a36Sopenharmony_ci       :header-rows:  1
65062306a36Sopenharmony_ci       :stub-columns: 0
65162306a36Sopenharmony_ci
65262306a36Sopenharmony_ci       * - Symbol
65362306a36Sopenharmony_ci	 - In this document prior to revision 0.5
65462306a36Sopenharmony_ci	 - Corrected
65562306a36Sopenharmony_ci       * - ``V4L2_PIX_FMT_RGB24``
65662306a36Sopenharmony_ci	 - B, G, R
65762306a36Sopenharmony_ci	 - R, G, B
65862306a36Sopenharmony_ci       * - ``V4L2_PIX_FMT_BGR24``
65962306a36Sopenharmony_ci	 - R, G, B
66062306a36Sopenharmony_ci	 - B, G, R
66162306a36Sopenharmony_ci       * - ``V4L2_PIX_FMT_RGB32``
66262306a36Sopenharmony_ci	 - B, G, R, X
66362306a36Sopenharmony_ci	 - R, G, B, X
66462306a36Sopenharmony_ci       * - ``V4L2_PIX_FMT_BGR32``
66562306a36Sopenharmony_ci	 - R, G, B, X
66662306a36Sopenharmony_ci	 - B, G, R, X
66762306a36Sopenharmony_ci
66862306a36Sopenharmony_ci   The ``V4L2_PIX_FMT_BGR24`` example was always correct.
66962306a36Sopenharmony_ci
67062306a36Sopenharmony_ci   In :ref:`v4l-image-properties` the mapping of the V4L
67162306a36Sopenharmony_ci   ``VIDEO_PALETTE_RGB24`` and ``VIDEO_PALETTE_RGB32`` formats to V4L2
67262306a36Sopenharmony_ci   pixel formats was accordingly corrected.
67362306a36Sopenharmony_ci
67462306a36Sopenharmony_ci2. Unrelated to the fixes above, drivers may still interpret some V4L2
67562306a36Sopenharmony_ci   RGB pixel formats differently. These issues have yet to be addressed,
67662306a36Sopenharmony_ci   for details see :ref:`pixfmt-rgb`.
67762306a36Sopenharmony_ci
67862306a36Sopenharmony_ciV4L2 in Linux 2.6.6, 2004-05-09
67962306a36Sopenharmony_ci===============================
68062306a36Sopenharmony_ci
68162306a36Sopenharmony_ci1. The :ref:`VIDIOC_CROPCAP` ioctl was incorrectly
68262306a36Sopenharmony_ci   defined with read-only parameter. It is now defined as write-read
68362306a36Sopenharmony_ci   ioctl, while the read-only version was renamed to
68462306a36Sopenharmony_ci   ``VIDIOC_CROPCAP_OLD``. The old ioctl was removed on Kernel 2.6.39.
68562306a36Sopenharmony_ci
68662306a36Sopenharmony_ciV4L2 in Linux 2.6.8
68762306a36Sopenharmony_ci===================
68862306a36Sopenharmony_ci
68962306a36Sopenharmony_ci1. A new field ``input`` (former ``reserved[0]``) was added to the
69062306a36Sopenharmony_ci   struct v4l2_buffer. Purpose of this
69162306a36Sopenharmony_ci   field is to alternate between video inputs (e. g. cameras) in step
69262306a36Sopenharmony_ci   with the video capturing process. This function must be enabled with
69362306a36Sopenharmony_ci   the new ``V4L2_BUF_FLAG_INPUT`` flag. The ``flags`` field is no
69462306a36Sopenharmony_ci   longer read-only.
69562306a36Sopenharmony_ci
69662306a36Sopenharmony_ciV4L2 spec erratum 2004-08-01
69762306a36Sopenharmony_ci============================
69862306a36Sopenharmony_ci
69962306a36Sopenharmony_ci1. The return value of the :ref:`func-open` function was incorrectly
70062306a36Sopenharmony_ci   documented.
70162306a36Sopenharmony_ci
70262306a36Sopenharmony_ci2. Audio output ioctls end in -AUDOUT, not -AUDIOOUT.
70362306a36Sopenharmony_ci
70462306a36Sopenharmony_ci3. In the Current Audio Input example the ``VIDIOC_G_AUDIO`` ioctl took
70562306a36Sopenharmony_ci   the wrong argument.
70662306a36Sopenharmony_ci
70762306a36Sopenharmony_ci4. The documentation of the :ref:`VIDIOC_QBUF` and
70862306a36Sopenharmony_ci   :ref:`VIDIOC_DQBUF <VIDIOC_QBUF>` ioctls did not mention the
70962306a36Sopenharmony_ci   struct v4l2_buffer ``memory`` field. It was
71062306a36Sopenharmony_ci   also missing from examples. Also on the ``VIDIOC_DQBUF`` page the ``EIO``
71162306a36Sopenharmony_ci   error code was not documented.
71262306a36Sopenharmony_ci
71362306a36Sopenharmony_ciV4L2 in Linux 2.6.14
71462306a36Sopenharmony_ci====================
71562306a36Sopenharmony_ci
71662306a36Sopenharmony_ci1. A new sliced VBI interface was added. It is documented in
71762306a36Sopenharmony_ci   :ref:`sliced` and replaces the interface first proposed in V4L2
71862306a36Sopenharmony_ci   specification 0.8.
71962306a36Sopenharmony_ci
72062306a36Sopenharmony_ciV4L2 in Linux 2.6.15
72162306a36Sopenharmony_ci====================
72262306a36Sopenharmony_ci
72362306a36Sopenharmony_ci1. The :ref:`VIDIOC_LOG_STATUS` ioctl was added.
72462306a36Sopenharmony_ci
72562306a36Sopenharmony_ci2. New video standards ``V4L2_STD_NTSC_443``, ``V4L2_STD_SECAM_LC``,
72662306a36Sopenharmony_ci   ``V4L2_STD_SECAM_DK`` (a set of SECAM D, K and K1), and
72762306a36Sopenharmony_ci   ``V4L2_STD_ATSC`` (a set of ``V4L2_STD_ATSC_8_VSB`` and
72862306a36Sopenharmony_ci   ``V4L2_STD_ATSC_16_VSB``) were defined. Note the ``V4L2_STD_525_60``
72962306a36Sopenharmony_ci   set now includes ``V4L2_STD_NTSC_443``. See also
73062306a36Sopenharmony_ci   :ref:`v4l2-std-id`.
73162306a36Sopenharmony_ci
73262306a36Sopenharmony_ci3. The ``VIDIOC_G_COMP`` and ``VIDIOC_S_COMP`` ioctl were renamed to
73362306a36Sopenharmony_ci   ``VIDIOC_G_MPEGCOMP`` and ``VIDIOC_S_MPEGCOMP`` respectively. Their
73462306a36Sopenharmony_ci   argument was replaced by a struct
73562306a36Sopenharmony_ci   ``v4l2_mpeg_compression`` pointer. (The
73662306a36Sopenharmony_ci   ``VIDIOC_G_MPEGCOMP`` and ``VIDIOC_S_MPEGCOMP`` ioctls where removed
73762306a36Sopenharmony_ci   in Linux 2.6.25.)
73862306a36Sopenharmony_ci
73962306a36Sopenharmony_ciV4L2 spec erratum 2005-11-27
74062306a36Sopenharmony_ci============================
74162306a36Sopenharmony_ci
74262306a36Sopenharmony_ciThe capture example in :ref:`capture-example` called the
74362306a36Sopenharmony_ci:ref:`VIDIOC_S_CROP <VIDIOC_G_CROP>` ioctl without checking if
74462306a36Sopenharmony_cicropping is supported. In the video standard selection example in
74562306a36Sopenharmony_ci:ref:`standard` the :ref:`VIDIOC_S_STD <VIDIOC_G_STD>` call used
74662306a36Sopenharmony_cithe wrong argument type.
74762306a36Sopenharmony_ci
74862306a36Sopenharmony_ciV4L2 spec erratum 2006-01-10
74962306a36Sopenharmony_ci============================
75062306a36Sopenharmony_ci
75162306a36Sopenharmony_ci1. The ``V4L2_IN_ST_COLOR_KILL`` flag in struct v4l2_input not only
75262306a36Sopenharmony_ci   indicates if the color killer is enabled, but also if it is active.
75362306a36Sopenharmony_ci   (The color killer disables color decoding when it detects no color
75462306a36Sopenharmony_ci   in the video signal to improve the image quality.)
75562306a36Sopenharmony_ci
75662306a36Sopenharmony_ci2. :ref:`VIDIOC_S_PARM <VIDIOC_G_PARM>` is a write-read ioctl, not
75762306a36Sopenharmony_ci   write-only as stated on its reference page. The ioctl changed in 2003
75862306a36Sopenharmony_ci   as noted above.
75962306a36Sopenharmony_ci
76062306a36Sopenharmony_ciV4L2 spec erratum 2006-02-03
76162306a36Sopenharmony_ci============================
76262306a36Sopenharmony_ci
76362306a36Sopenharmony_ci1. In struct v4l2_captureparm and struct v4l2_outputparm the ``timeperframe``
76462306a36Sopenharmony_ci   field gives the time in seconds, not microseconds.
76562306a36Sopenharmony_ci
76662306a36Sopenharmony_ciV4L2 spec erratum 2006-02-04
76762306a36Sopenharmony_ci============================
76862306a36Sopenharmony_ci
76962306a36Sopenharmony_ci1. The ``clips`` field in struct v4l2_window
77062306a36Sopenharmony_ci   must point to an array of struct v4l2_clip, not
77162306a36Sopenharmony_ci   a linked list, because drivers ignore the
77262306a36Sopenharmony_ci   struct v4l2_clip. ``next`` pointer.
77362306a36Sopenharmony_ci
77462306a36Sopenharmony_ciV4L2 in Linux 2.6.17
77562306a36Sopenharmony_ci====================
77662306a36Sopenharmony_ci
77762306a36Sopenharmony_ci1. New video standard macros were added: ``V4L2_STD_NTSC_M_KR`` (NTSC M
77862306a36Sopenharmony_ci   South Korea), and the sets ``V4L2_STD_MN``, ``V4L2_STD_B``,
77962306a36Sopenharmony_ci   ``V4L2_STD_GH`` and ``V4L2_STD_DK``. The ``V4L2_STD_NTSC`` and
78062306a36Sopenharmony_ci   ``V4L2_STD_SECAM`` sets now include ``V4L2_STD_NTSC_M_KR`` and
78162306a36Sopenharmony_ci   ``V4L2_STD_SECAM_LC`` respectively.
78262306a36Sopenharmony_ci
78362306a36Sopenharmony_ci2. A new ``V4L2_TUNER_MODE_LANG1_LANG2`` was defined to record both
78462306a36Sopenharmony_ci   languages of a bilingual program. The use of
78562306a36Sopenharmony_ci   ``V4L2_TUNER_MODE_STEREO`` for this purpose is deprecated now. See
78662306a36Sopenharmony_ci   the :ref:`VIDIOC_G_TUNER <VIDIOC_G_TUNER>` section for details.
78762306a36Sopenharmony_ci
78862306a36Sopenharmony_ciV4L2 spec erratum 2006-09-23 (Draft 0.15)
78962306a36Sopenharmony_ci=========================================
79062306a36Sopenharmony_ci
79162306a36Sopenharmony_ci1. In various places ``V4L2_BUF_TYPE_SLICED_VBI_CAPTURE`` and
79262306a36Sopenharmony_ci   ``V4L2_BUF_TYPE_SLICED_VBI_OUTPUT`` of the sliced VBI interface were
79362306a36Sopenharmony_ci   not mentioned along with other buffer types.
79462306a36Sopenharmony_ci
79562306a36Sopenharmony_ci2. In :ref:`VIDIOC_G_AUDIO <VIDIOC_G_AUDIO>` it was clarified that the
79662306a36Sopenharmony_ci   struct v4l2_audio ``mode`` field is a flags field.
79762306a36Sopenharmony_ci
79862306a36Sopenharmony_ci3. :ref:`VIDIOC_QUERYCAP` did not mention the sliced VBI and radio
79962306a36Sopenharmony_ci   capability flags.
80062306a36Sopenharmony_ci
80162306a36Sopenharmony_ci4. In :ref:`VIDIOC_G_FREQUENCY <VIDIOC_G_FREQUENCY>` it was clarified that
80262306a36Sopenharmony_ci   applications must initialize the tuner ``type`` field of
80362306a36Sopenharmony_ci   struct v4l2_frequency before calling
80462306a36Sopenharmony_ci   :ref:`VIDIOC_S_FREQUENCY <VIDIOC_G_FREQUENCY>`.
80562306a36Sopenharmony_ci
80662306a36Sopenharmony_ci5. The ``reserved`` array in struct v4l2_requestbuffers has 2 elements,
80762306a36Sopenharmony_ci   not 32.
80862306a36Sopenharmony_ci
80962306a36Sopenharmony_ci6. In :ref:`output` and :ref:`raw-vbi` the device file names
81062306a36Sopenharmony_ci   ``/dev/vout`` which never caught on were replaced by ``/dev/video``.
81162306a36Sopenharmony_ci
81262306a36Sopenharmony_ci7. With Linux 2.6.15 the possible range for VBI device minor numbers was
81362306a36Sopenharmony_ci   extended from 224-239 to 224-255. Accordingly device file names
81462306a36Sopenharmony_ci   ``/dev/vbi0`` to ``/dev/vbi31`` are possible now.
81562306a36Sopenharmony_ci
81662306a36Sopenharmony_ciV4L2 in Linux 2.6.18
81762306a36Sopenharmony_ci====================
81862306a36Sopenharmony_ci
81962306a36Sopenharmony_ci1. New ioctls :ref:`VIDIOC_G_EXT_CTRLS <VIDIOC_G_EXT_CTRLS>`,
82062306a36Sopenharmony_ci   :ref:`VIDIOC_S_EXT_CTRLS <VIDIOC_G_EXT_CTRLS>` and
82162306a36Sopenharmony_ci   :ref:`VIDIOC_TRY_EXT_CTRLS <VIDIOC_G_EXT_CTRLS>` were added, a
82262306a36Sopenharmony_ci   flag to skip unsupported controls with
82362306a36Sopenharmony_ci   :ref:`VIDIOC_QUERYCTRL`, new control types
82462306a36Sopenharmony_ci   ``V4L2_CTRL_TYPE_INTEGER64`` and ``V4L2_CTRL_TYPE_CTRL_CLASS``
82562306a36Sopenharmony_ci   (enum v4l2_ctrl_type), and new control flags
82662306a36Sopenharmony_ci   ``V4L2_CTRL_FLAG_READ_ONLY``, ``V4L2_CTRL_FLAG_UPDATE``,
82762306a36Sopenharmony_ci   ``V4L2_CTRL_FLAG_INACTIVE`` and ``V4L2_CTRL_FLAG_SLIDER``
82862306a36Sopenharmony_ci   (:ref:`control-flags`). See :ref:`extended-controls` for details.
82962306a36Sopenharmony_ci
83062306a36Sopenharmony_ciV4L2 in Linux 2.6.19
83162306a36Sopenharmony_ci====================
83262306a36Sopenharmony_ci
83362306a36Sopenharmony_ci1. In struct v4l2_sliced_vbi_cap a
83462306a36Sopenharmony_ci   buffer type field was added replacing a reserved field. Note on
83562306a36Sopenharmony_ci   architectures where the size of enum types differs from int types the
83662306a36Sopenharmony_ci   size of the structure changed. The
83762306a36Sopenharmony_ci   :ref:`VIDIOC_G_SLICED_VBI_CAP <VIDIOC_G_SLICED_VBI_CAP>` ioctl
83862306a36Sopenharmony_ci   was redefined from being read-only to write-read. Applications must
83962306a36Sopenharmony_ci   initialize the type field and clear the reserved fields now. These
84062306a36Sopenharmony_ci   changes may *break the compatibility* with older drivers and
84162306a36Sopenharmony_ci   applications.
84262306a36Sopenharmony_ci
84362306a36Sopenharmony_ci2. The ioctls :ref:`VIDIOC_ENUM_FRAMESIZES`
84462306a36Sopenharmony_ci   and
84562306a36Sopenharmony_ci   :ref:`VIDIOC_ENUM_FRAMEINTERVALS`
84662306a36Sopenharmony_ci   were added.
84762306a36Sopenharmony_ci
84862306a36Sopenharmony_ci3. A new pixel format ``V4L2_PIX_FMT_RGB444`` (:ref:`pixfmt-rgb`) was
84962306a36Sopenharmony_ci   added.
85062306a36Sopenharmony_ci
85162306a36Sopenharmony_ciV4L2 spec erratum 2006-10-12 (Draft 0.17)
85262306a36Sopenharmony_ci=========================================
85362306a36Sopenharmony_ci
85462306a36Sopenharmony_ci1. ``V4L2_PIX_FMT_HM12`` (:ref:`reserved-formats`) is a YUV 4:2:0, not
85562306a36Sopenharmony_ci   4:2:2 format.
85662306a36Sopenharmony_ci
85762306a36Sopenharmony_ciV4L2 in Linux 2.6.21
85862306a36Sopenharmony_ci====================
85962306a36Sopenharmony_ci
86062306a36Sopenharmony_ci1. The ``videodev2.h`` header file is now dual licensed under GNU
86162306a36Sopenharmony_ci   General Public License version two or later, and under a 3-clause
86262306a36Sopenharmony_ci   BSD-style license.
86362306a36Sopenharmony_ci
86462306a36Sopenharmony_ciV4L2 in Linux 2.6.22
86562306a36Sopenharmony_ci====================
86662306a36Sopenharmony_ci
86762306a36Sopenharmony_ci1. Two new field orders ``V4L2_FIELD_INTERLACED_TB`` and
86862306a36Sopenharmony_ci   ``V4L2_FIELD_INTERLACED_BT`` were added. See enum v4l2_field for
86962306a36Sopenharmony_ci   details.
87062306a36Sopenharmony_ci
87162306a36Sopenharmony_ci2. Three new clipping/blending methods with a global or straight or
87262306a36Sopenharmony_ci   inverted local alpha value were added to the video overlay interface.
87362306a36Sopenharmony_ci   See the description of the :ref:`VIDIOC_G_FBUF <VIDIOC_G_FBUF>`
87462306a36Sopenharmony_ci   and :ref:`VIDIOC_S_FBUF <VIDIOC_G_FBUF>` ioctls for details.
87562306a36Sopenharmony_ci
87662306a36Sopenharmony_ci   A new ``global_alpha`` field was added to struct v4l2_window,
87762306a36Sopenharmony_ci   extending the structure. This may **break compatibility** with
87862306a36Sopenharmony_ci   applications using a struct v4l2_window directly. However the
87962306a36Sopenharmony_ci   :ref:`VIDIOC_G/S/TRY_FMT <VIDIOC_G_FMT>` ioctls, which take a
88062306a36Sopenharmony_ci   pointer to a struct v4l2_format parent structure
88162306a36Sopenharmony_ci   with padding bytes at the end, are not affected.
88262306a36Sopenharmony_ci
88362306a36Sopenharmony_ci3. The format of the ``chromakey`` field in struct v4l2_window changed from
88462306a36Sopenharmony_ci   "host order RGB32" to a pixel value in the same format as the framebuffer.
88562306a36Sopenharmony_ci   This may **break compatibility** with existing applications. Drivers
88662306a36Sopenharmony_ci   supporting the "host order RGB32" format are not known.
88762306a36Sopenharmony_ci
88862306a36Sopenharmony_ciV4L2 in Linux 2.6.24
88962306a36Sopenharmony_ci====================
89062306a36Sopenharmony_ci
89162306a36Sopenharmony_ci1. The pixel formats ``V4L2_PIX_FMT_PAL8``, ``V4L2_PIX_FMT_YUV444``,
89262306a36Sopenharmony_ci   ``V4L2_PIX_FMT_YUV555``, ``V4L2_PIX_FMT_YUV565`` and
89362306a36Sopenharmony_ci   ``V4L2_PIX_FMT_YUV32`` were added.
89462306a36Sopenharmony_ci
89562306a36Sopenharmony_ciV4L2 in Linux 2.6.25
89662306a36Sopenharmony_ci====================
89762306a36Sopenharmony_ci
89862306a36Sopenharmony_ci1. The pixel formats :ref:`V4L2_PIX_FMT_Y16 <V4L2-PIX-FMT-Y16>` and
89962306a36Sopenharmony_ci   :ref:`V4L2_PIX_FMT_SBGGR16 <V4L2-PIX-FMT-SBGGR16>` were added.
90062306a36Sopenharmony_ci
90162306a36Sopenharmony_ci2. New :ref:`controls <control>` ``V4L2_CID_POWER_LINE_FREQUENCY``,
90262306a36Sopenharmony_ci   ``V4L2_CID_HUE_AUTO``, ``V4L2_CID_WHITE_BALANCE_TEMPERATURE``,
90362306a36Sopenharmony_ci   ``V4L2_CID_SHARPNESS`` and ``V4L2_CID_BACKLIGHT_COMPENSATION`` were
90462306a36Sopenharmony_ci   added. The controls ``V4L2_CID_BLACK_LEVEL``, ``V4L2_CID_WHITENESS``,
90562306a36Sopenharmony_ci   ``V4L2_CID_HCENTER`` and ``V4L2_CID_VCENTER`` were deprecated.
90662306a36Sopenharmony_ci
90762306a36Sopenharmony_ci3. A :ref:`Camera controls class <camera-controls>` was added, with
90862306a36Sopenharmony_ci   the new controls ``V4L2_CID_EXPOSURE_AUTO``,
90962306a36Sopenharmony_ci   ``V4L2_CID_EXPOSURE_ABSOLUTE``, ``V4L2_CID_EXPOSURE_AUTO_PRIORITY``,
91062306a36Sopenharmony_ci   ``V4L2_CID_PAN_RELATIVE``, ``V4L2_CID_TILT_RELATIVE``,
91162306a36Sopenharmony_ci   ``V4L2_CID_PAN_RESET``, ``V4L2_CID_TILT_RESET``,
91262306a36Sopenharmony_ci   ``V4L2_CID_PAN_ABSOLUTE``, ``V4L2_CID_TILT_ABSOLUTE``,
91362306a36Sopenharmony_ci   ``V4L2_CID_FOCUS_ABSOLUTE``, ``V4L2_CID_FOCUS_RELATIVE`` and
91462306a36Sopenharmony_ci   ``V4L2_CID_FOCUS_AUTO``.
91562306a36Sopenharmony_ci
91662306a36Sopenharmony_ci4. The ``VIDIOC_G_MPEGCOMP`` and ``VIDIOC_S_MPEGCOMP`` ioctls, which
91762306a36Sopenharmony_ci   were superseded by the :ref:`extended controls <extended-controls>`
91862306a36Sopenharmony_ci   interface in Linux 2.6.18, where finally removed from the
91962306a36Sopenharmony_ci   ``videodev2.h`` header file.
92062306a36Sopenharmony_ci
92162306a36Sopenharmony_ciV4L2 in Linux 2.6.26
92262306a36Sopenharmony_ci====================
92362306a36Sopenharmony_ci
92462306a36Sopenharmony_ci1. The pixel formats ``V4L2_PIX_FMT_Y16`` and ``V4L2_PIX_FMT_SBGGR16``
92562306a36Sopenharmony_ci   were added.
92662306a36Sopenharmony_ci
92762306a36Sopenharmony_ci2. Added user controls ``V4L2_CID_CHROMA_AGC`` and
92862306a36Sopenharmony_ci   ``V4L2_CID_COLOR_KILLER``.
92962306a36Sopenharmony_ci
93062306a36Sopenharmony_ciV4L2 in Linux 2.6.27
93162306a36Sopenharmony_ci====================
93262306a36Sopenharmony_ci
93362306a36Sopenharmony_ci1. The :ref:`VIDIOC_S_HW_FREQ_SEEK` ioctl
93462306a36Sopenharmony_ci   and the ``V4L2_CAP_HW_FREQ_SEEK`` capability were added.
93562306a36Sopenharmony_ci
93662306a36Sopenharmony_ci2. The pixel formats ``V4L2_PIX_FMT_YVYU``, ``V4L2_PIX_FMT_PCA501``,
93762306a36Sopenharmony_ci   ``V4L2_PIX_FMT_PCA505``, ``V4L2_PIX_FMT_PCA508``,
93862306a36Sopenharmony_ci   ``V4L2_PIX_FMT_PCA561``, ``V4L2_PIX_FMT_SGBRG8``,
93962306a36Sopenharmony_ci   ``V4L2_PIX_FMT_PAC207`` and ``V4L2_PIX_FMT_PJPG`` were added.
94062306a36Sopenharmony_ci
94162306a36Sopenharmony_ciV4L2 in Linux 2.6.28
94262306a36Sopenharmony_ci====================
94362306a36Sopenharmony_ci
94462306a36Sopenharmony_ci1. Added ``V4L2_MPEG_AUDIO_ENCODING_AAC`` and
94562306a36Sopenharmony_ci   ``V4L2_MPEG_AUDIO_ENCODING_AC3`` MPEG audio encodings.
94662306a36Sopenharmony_ci
94762306a36Sopenharmony_ci2. Added ``V4L2_MPEG_VIDEO_ENCODING_MPEG_4_AVC`` MPEG video encoding.
94862306a36Sopenharmony_ci
94962306a36Sopenharmony_ci3. The pixel formats ``V4L2_PIX_FMT_SGRBG10`` and
95062306a36Sopenharmony_ci   ``V4L2_PIX_FMT_SGRBG10DPCM8`` were added.
95162306a36Sopenharmony_ci
95262306a36Sopenharmony_ciV4L2 in Linux 2.6.29
95362306a36Sopenharmony_ci====================
95462306a36Sopenharmony_ci
95562306a36Sopenharmony_ci1. The ``VIDIOC_G_CHIP_IDENT`` ioctl was renamed to
95662306a36Sopenharmony_ci   ``VIDIOC_G_CHIP_IDENT_OLD`` and ``VIDIOC_DBG_G_CHIP_IDENT`` was
95762306a36Sopenharmony_ci   introduced in its place. The old struct ``v4l2_chip_ident`` was renamed to
95862306a36Sopenharmony_ci   struct ``v4l2_chip_ident_old``.
95962306a36Sopenharmony_ci
96062306a36Sopenharmony_ci2. The pixel formats ``V4L2_PIX_FMT_VYUY``, ``V4L2_PIX_FMT_NV16`` and
96162306a36Sopenharmony_ci   ``V4L2_PIX_FMT_NV61`` were added.
96262306a36Sopenharmony_ci
96362306a36Sopenharmony_ci3. Added camera controls ``V4L2_CID_ZOOM_ABSOLUTE``,
96462306a36Sopenharmony_ci   ``V4L2_CID_ZOOM_RELATIVE``, ``V4L2_CID_ZOOM_CONTINUOUS`` and
96562306a36Sopenharmony_ci   ``V4L2_CID_PRIVACY``.
96662306a36Sopenharmony_ci
96762306a36Sopenharmony_ciV4L2 in Linux 2.6.30
96862306a36Sopenharmony_ci====================
96962306a36Sopenharmony_ci
97062306a36Sopenharmony_ci1. New control flag ``V4L2_CTRL_FLAG_WRITE_ONLY`` was added.
97162306a36Sopenharmony_ci
97262306a36Sopenharmony_ci2. New control ``V4L2_CID_COLORFX`` was added.
97362306a36Sopenharmony_ci
97462306a36Sopenharmony_ciV4L2 in Linux 2.6.32
97562306a36Sopenharmony_ci====================
97662306a36Sopenharmony_ci
97762306a36Sopenharmony_ci1. In order to be easier to compare a V4L2 API and a kernel version, now
97862306a36Sopenharmony_ci   V4L2 API is numbered using the Linux Kernel version numeration.
97962306a36Sopenharmony_ci
98062306a36Sopenharmony_ci2. Finalized the RDS capture API. See :ref:`rds` for more information.
98162306a36Sopenharmony_ci
98262306a36Sopenharmony_ci3. Added new capabilities for modulators and RDS encoders.
98362306a36Sopenharmony_ci
98462306a36Sopenharmony_ci4. Add description for libv4l API.
98562306a36Sopenharmony_ci
98662306a36Sopenharmony_ci5. Added support for string controls via new type
98762306a36Sopenharmony_ci   ``V4L2_CTRL_TYPE_STRING``.
98862306a36Sopenharmony_ci
98962306a36Sopenharmony_ci6. Added ``V4L2_CID_BAND_STOP_FILTER`` documentation.
99062306a36Sopenharmony_ci
99162306a36Sopenharmony_ci7. Added FM Modulator (FM TX) Extended Control Class:
99262306a36Sopenharmony_ci   ``V4L2_CTRL_CLASS_FM_TX`` and their Control IDs.
99362306a36Sopenharmony_ci
99462306a36Sopenharmony_ci8. Added FM Receiver (FM RX) Extended Control Class:
99562306a36Sopenharmony_ci   ``V4L2_CTRL_CLASS_FM_RX`` and their Control IDs.
99662306a36Sopenharmony_ci
99762306a36Sopenharmony_ci9. Added Remote Controller chapter, describing the default Remote
99862306a36Sopenharmony_ci   Controller mapping for media devices.
99962306a36Sopenharmony_ci
100062306a36Sopenharmony_ciV4L2 in Linux 2.6.33
100162306a36Sopenharmony_ci====================
100262306a36Sopenharmony_ci
100362306a36Sopenharmony_ci1. Added support for Digital Video timings in order to support HDTV
100462306a36Sopenharmony_ci   receivers and transmitters.
100562306a36Sopenharmony_ci
100662306a36Sopenharmony_ciV4L2 in Linux 2.6.34
100762306a36Sopenharmony_ci====================
100862306a36Sopenharmony_ci
100962306a36Sopenharmony_ci1. Added ``V4L2_CID_IRIS_ABSOLUTE`` and ``V4L2_CID_IRIS_RELATIVE``
101062306a36Sopenharmony_ci   controls to the :ref:`Camera controls class <camera-controls>`.
101162306a36Sopenharmony_ci
101262306a36Sopenharmony_ciV4L2 in Linux 2.6.37
101362306a36Sopenharmony_ci====================
101462306a36Sopenharmony_ci
101562306a36Sopenharmony_ci1. Remove the vtx (videotext/teletext) API. This API was no longer used
101662306a36Sopenharmony_ci   and no hardware exists to verify the API. Nor were any userspace
101762306a36Sopenharmony_ci   applications found that used it. It was originally scheduled for
101862306a36Sopenharmony_ci   removal in 2.6.35.
101962306a36Sopenharmony_ci
102062306a36Sopenharmony_ciV4L2 in Linux 2.6.39
102162306a36Sopenharmony_ci====================
102262306a36Sopenharmony_ci
102362306a36Sopenharmony_ci1. The old VIDIOC_*_OLD symbols and V4L1 support were removed.
102462306a36Sopenharmony_ci
102562306a36Sopenharmony_ci2. Multi-planar API added. Does not affect the compatibility of current
102662306a36Sopenharmony_ci   drivers and applications. See :ref:`multi-planar API <planar-apis>`
102762306a36Sopenharmony_ci   for details.
102862306a36Sopenharmony_ci
102962306a36Sopenharmony_ciV4L2 in Linux 3.1
103062306a36Sopenharmony_ci=================
103162306a36Sopenharmony_ci
103262306a36Sopenharmony_ci1. VIDIOC_QUERYCAP now returns a per-subsystem version instead of a
103362306a36Sopenharmony_ci   per-driver one.
103462306a36Sopenharmony_ci
103562306a36Sopenharmony_ci   Standardize an error code for invalid ioctl.
103662306a36Sopenharmony_ci
103762306a36Sopenharmony_ci   Added V4L2_CTRL_TYPE_BITMASK.
103862306a36Sopenharmony_ci
103962306a36Sopenharmony_ciV4L2 in Linux 3.2
104062306a36Sopenharmony_ci=================
104162306a36Sopenharmony_ci
104262306a36Sopenharmony_ci1. V4L2_CTRL_FLAG_VOLATILE was added to signal volatile controls to
104362306a36Sopenharmony_ci   userspace.
104462306a36Sopenharmony_ci
104562306a36Sopenharmony_ci2. Add selection API for extended control over cropping and composing.
104662306a36Sopenharmony_ci   Does not affect the compatibility of current drivers and
104762306a36Sopenharmony_ci   applications. See :ref:`selection API <selection-api>` for details.
104862306a36Sopenharmony_ci
104962306a36Sopenharmony_ciV4L2 in Linux 3.3
105062306a36Sopenharmony_ci=================
105162306a36Sopenharmony_ci
105262306a36Sopenharmony_ci1. Added ``V4L2_CID_ALPHA_COMPONENT`` control to the
105362306a36Sopenharmony_ci   :ref:`User controls class <control>`.
105462306a36Sopenharmony_ci
105562306a36Sopenharmony_ci2. Added the device_caps field to struct v4l2_capabilities and added
105662306a36Sopenharmony_ci   the new V4L2_CAP_DEVICE_CAPS capability.
105762306a36Sopenharmony_ci
105862306a36Sopenharmony_ciV4L2 in Linux 3.4
105962306a36Sopenharmony_ci=================
106062306a36Sopenharmony_ci
106162306a36Sopenharmony_ci1. Added :ref:`JPEG compression control class <jpeg-controls>`.
106262306a36Sopenharmony_ci
106362306a36Sopenharmony_ci2. Extended the DV Timings API:
106462306a36Sopenharmony_ci   :ref:`VIDIOC_ENUM_DV_TIMINGS`,
106562306a36Sopenharmony_ci   :ref:`VIDIOC_QUERY_DV_TIMINGS` and
106662306a36Sopenharmony_ci   :ref:`VIDIOC_DV_TIMINGS_CAP`.
106762306a36Sopenharmony_ci
106862306a36Sopenharmony_ciV4L2 in Linux 3.5
106962306a36Sopenharmony_ci=================
107062306a36Sopenharmony_ci
107162306a36Sopenharmony_ci1. Added integer menus, the new type will be
107262306a36Sopenharmony_ci   V4L2_CTRL_TYPE_INTEGER_MENU.
107362306a36Sopenharmony_ci
107462306a36Sopenharmony_ci2. Added selection API for V4L2 subdev interface:
107562306a36Sopenharmony_ci   :ref:`VIDIOC_SUBDEV_G_SELECTION` and
107662306a36Sopenharmony_ci   :ref:`VIDIOC_SUBDEV_S_SELECTION <VIDIOC_SUBDEV_G_SELECTION>`.
107762306a36Sopenharmony_ci
107862306a36Sopenharmony_ci3. Added ``V4L2_COLORFX_ANTIQUE``, ``V4L2_COLORFX_ART_FREEZE``,
107962306a36Sopenharmony_ci   ``V4L2_COLORFX_AQUA``, ``V4L2_COLORFX_SILHOUETTE``,
108062306a36Sopenharmony_ci   ``V4L2_COLORFX_SOLARIZATION``, ``V4L2_COLORFX_VIVID`` and
108162306a36Sopenharmony_ci   ``V4L2_COLORFX_ARBITRARY_CBCR`` menu items to the
108262306a36Sopenharmony_ci   ``V4L2_CID_COLORFX`` control.
108362306a36Sopenharmony_ci
108462306a36Sopenharmony_ci4. Added ``V4L2_CID_COLORFX_CBCR`` control.
108562306a36Sopenharmony_ci
108662306a36Sopenharmony_ci5. Added camera controls ``V4L2_CID_AUTO_EXPOSURE_BIAS``,
108762306a36Sopenharmony_ci   ``V4L2_CID_AUTO_N_PRESET_WHITE_BALANCE``,
108862306a36Sopenharmony_ci   ``V4L2_CID_IMAGE_STABILIZATION``, ``V4L2_CID_ISO_SENSITIVITY``,
108962306a36Sopenharmony_ci   ``V4L2_CID_ISO_SENSITIVITY_AUTO``, ``V4L2_CID_EXPOSURE_METERING``,
109062306a36Sopenharmony_ci   ``V4L2_CID_SCENE_MODE``, ``V4L2_CID_3A_LOCK``,
109162306a36Sopenharmony_ci   ``V4L2_CID_AUTO_FOCUS_START``, ``V4L2_CID_AUTO_FOCUS_STOP``,
109262306a36Sopenharmony_ci   ``V4L2_CID_AUTO_FOCUS_STATUS`` and ``V4L2_CID_AUTO_FOCUS_RANGE``.
109362306a36Sopenharmony_ci
109462306a36Sopenharmony_ciV4L2 in Linux 3.6
109562306a36Sopenharmony_ci=================
109662306a36Sopenharmony_ci
109762306a36Sopenharmony_ci1. Replaced ``input`` in struct v4l2_buffer by
109862306a36Sopenharmony_ci   ``reserved2`` and removed ``V4L2_BUF_FLAG_INPUT``.
109962306a36Sopenharmony_ci
110062306a36Sopenharmony_ci2. Added V4L2_CAP_VIDEO_M2M and V4L2_CAP_VIDEO_M2M_MPLANE
110162306a36Sopenharmony_ci   capabilities.
110262306a36Sopenharmony_ci
110362306a36Sopenharmony_ci3. Added support for frequency band enumerations:
110462306a36Sopenharmony_ci   :ref:`VIDIOC_ENUM_FREQ_BANDS`.
110562306a36Sopenharmony_ci
110662306a36Sopenharmony_ciV4L2 in Linux 3.9
110762306a36Sopenharmony_ci=================
110862306a36Sopenharmony_ci
110962306a36Sopenharmony_ci1. Added timestamp types to ``flags`` field in
111062306a36Sopenharmony_ci   struct v4l2_buffer. See :ref:`buffer-flags`.
111162306a36Sopenharmony_ci
111262306a36Sopenharmony_ci2. Added ``V4L2_EVENT_CTRL_CH_RANGE`` control event changes flag. See
111362306a36Sopenharmony_ci   :ref:`ctrl-changes-flags`.
111462306a36Sopenharmony_ci
111562306a36Sopenharmony_ciV4L2 in Linux 3.10
111662306a36Sopenharmony_ci==================
111762306a36Sopenharmony_ci
111862306a36Sopenharmony_ci1. Removed obsolete and unused DV_PRESET ioctls VIDIOC_G_DV_PRESET,
111962306a36Sopenharmony_ci   VIDIOC_S_DV_PRESET, VIDIOC_QUERY_DV_PRESET and
112062306a36Sopenharmony_ci   VIDIOC_ENUM_DV_PRESET. Remove the related v4l2_input/output
112162306a36Sopenharmony_ci   capability flags V4L2_IN_CAP_PRESETS and V4L2_OUT_CAP_PRESETS.
112262306a36Sopenharmony_ci
112362306a36Sopenharmony_ci2. Added new debugging ioctl
112462306a36Sopenharmony_ci   :ref:`VIDIOC_DBG_G_CHIP_INFO`.
112562306a36Sopenharmony_ci
112662306a36Sopenharmony_ciV4L2 in Linux 3.11
112762306a36Sopenharmony_ci==================
112862306a36Sopenharmony_ci
112962306a36Sopenharmony_ci1. Remove obsolete ``VIDIOC_DBG_G_CHIP_IDENT`` ioctl.
113062306a36Sopenharmony_ci
113162306a36Sopenharmony_ciV4L2 in Linux 3.14
113262306a36Sopenharmony_ci==================
113362306a36Sopenharmony_ci
113462306a36Sopenharmony_ci1. In struct v4l2_rect, the type of ``width`` and
113562306a36Sopenharmony_ci   ``height`` fields changed from _s32 to _u32.
113662306a36Sopenharmony_ci
113762306a36Sopenharmony_ciV4L2 in Linux 3.15
113862306a36Sopenharmony_ci==================
113962306a36Sopenharmony_ci
114062306a36Sopenharmony_ci1. Added Software Defined Radio (SDR) Interface.
114162306a36Sopenharmony_ci
114262306a36Sopenharmony_ciV4L2 in Linux 3.16
114362306a36Sopenharmony_ci==================
114462306a36Sopenharmony_ci
114562306a36Sopenharmony_ci1. Added event V4L2_EVENT_SOURCE_CHANGE.
114662306a36Sopenharmony_ci
114762306a36Sopenharmony_ciV4L2 in Linux 3.17
114862306a36Sopenharmony_ci==================
114962306a36Sopenharmony_ci
115062306a36Sopenharmony_ci1. Extended struct v4l2_pix_format. Added
115162306a36Sopenharmony_ci   format flags.
115262306a36Sopenharmony_ci
115362306a36Sopenharmony_ci2. Added compound control types and
115462306a36Sopenharmony_ci   :ref:`VIDIOC_QUERY_EXT_CTRL <VIDIOC_QUERYCTRL>`.
115562306a36Sopenharmony_ci
115662306a36Sopenharmony_ciV4L2 in Linux 3.18
115762306a36Sopenharmony_ci==================
115862306a36Sopenharmony_ci
115962306a36Sopenharmony_ci1. Added ``V4L2_CID_PAN_SPEED`` and ``V4L2_CID_TILT_SPEED`` camera
116062306a36Sopenharmony_ci   controls.
116162306a36Sopenharmony_ci
116262306a36Sopenharmony_ciV4L2 in Linux 3.19
116362306a36Sopenharmony_ci==================
116462306a36Sopenharmony_ci
116562306a36Sopenharmony_ci1. Rewrote Colorspace chapter, added new enum v4l2_ycbcr_encoding
116662306a36Sopenharmony_ci   and enum v4l2_quantization fields to struct v4l2_pix_format,
116762306a36Sopenharmony_ci   struct v4l2_pix_format_mplane and struct v4l2_mbus_framefmt.
116862306a36Sopenharmony_ci
116962306a36Sopenharmony_ciV4L2 in Linux 4.4
117062306a36Sopenharmony_ci=================
117162306a36Sopenharmony_ci
117262306a36Sopenharmony_ci1. Renamed ``V4L2_TUNER_ADC`` to ``V4L2_TUNER_SDR``. The use of
117362306a36Sopenharmony_ci   ``V4L2_TUNER_ADC`` is deprecated now.
117462306a36Sopenharmony_ci
117562306a36Sopenharmony_ci2. Added ``V4L2_CID_RF_TUNER_RF_GAIN`` RF Tuner control.
117662306a36Sopenharmony_ci
117762306a36Sopenharmony_ci3. Added transmitter support for Software Defined Radio (SDR) Interface.
117862306a36Sopenharmony_ci
117962306a36Sopenharmony_ci.. _other:
118062306a36Sopenharmony_ci
118162306a36Sopenharmony_ciRelation of V4L2 to other Linux multimedia APIs
118262306a36Sopenharmony_ci===============================================
118362306a36Sopenharmony_ci
118462306a36Sopenharmony_ci.. _xvideo:
118562306a36Sopenharmony_ci
118662306a36Sopenharmony_ciX Video Extension
118762306a36Sopenharmony_ci-----------------
118862306a36Sopenharmony_ci
118962306a36Sopenharmony_ciThe X Video Extension (abbreviated XVideo or just Xv) is an extension of
119062306a36Sopenharmony_cithe X Window system, implemented for example by the XFree86 project. Its
119162306a36Sopenharmony_ciscope is similar to V4L2, an API to video capture and output devices for
119262306a36Sopenharmony_ciX clients. Xv allows applications to display live video in a window,
119362306a36Sopenharmony_cisend window contents to a TV output, and capture or output still images
119462306a36Sopenharmony_ciin XPixmaps [#f1]_. With their implementation XFree86 makes the extension
119562306a36Sopenharmony_ciavailable across many operating systems and architectures.
119662306a36Sopenharmony_ci
119762306a36Sopenharmony_ciBecause the driver is embedded into the X server Xv has a number of
119862306a36Sopenharmony_ciadvantages over the V4L2 :ref:`video overlay interface <overlay>`. The
119962306a36Sopenharmony_cidriver can easily determine the overlay target, i. e. visible graphics
120062306a36Sopenharmony_cimemory or off-screen buffers for a destructive overlay. It can program
120162306a36Sopenharmony_cithe RAMDAC for a non-destructive overlay, scaling or color-keying, or
120262306a36Sopenharmony_cithe clipping functions of the video capture hardware, always in sync
120362306a36Sopenharmony_ciwith drawing operations or windows moving or changing their stacking
120462306a36Sopenharmony_ciorder.
120562306a36Sopenharmony_ci
120662306a36Sopenharmony_ciTo combine the advantages of Xv and V4L a special Xv driver exists in
120762306a36Sopenharmony_ciXFree86 and XOrg, just programming any overlay capable Video4Linux
120862306a36Sopenharmony_cidevice it finds. To enable it ``/etc/X11/XF86Config`` must contain these
120962306a36Sopenharmony_cilines:
121062306a36Sopenharmony_ci
121162306a36Sopenharmony_ci::
121262306a36Sopenharmony_ci
121362306a36Sopenharmony_ci    Section "Module"
121462306a36Sopenharmony_ci	Load "v4l"
121562306a36Sopenharmony_ci    EndSection
121662306a36Sopenharmony_ci
121762306a36Sopenharmony_ciAs of XFree86 4.2 this driver still supports only V4L ioctls, however it
121862306a36Sopenharmony_cishould work just fine with all V4L2 devices through the V4L2
121962306a36Sopenharmony_cibackward-compatibility layer. Since V4L2 permits multiple opens it is
122062306a36Sopenharmony_cipossible (if supported by the V4L2 driver) to capture video while an X
122162306a36Sopenharmony_ciclient requested video overlay. Restrictions of simultaneous capturing
122262306a36Sopenharmony_ciand overlay are discussed in :ref:`overlay` apply.
122362306a36Sopenharmony_ci
122462306a36Sopenharmony_ciOnly marginally related to V4L2, XFree86 extended Xv to support hardware
122562306a36Sopenharmony_ciYUV to RGB conversion and scaling for faster video playback, and added
122662306a36Sopenharmony_cian interface to MPEG-2 decoding hardware. This API is useful to display
122762306a36Sopenharmony_ciimages captured with V4L2 devices.
122862306a36Sopenharmony_ci
122962306a36Sopenharmony_ciDigital Video
123062306a36Sopenharmony_ci-------------
123162306a36Sopenharmony_ci
123262306a36Sopenharmony_ciV4L2 does not support digital terrestrial, cable or satellite broadcast.
123362306a36Sopenharmony_ciA separate project aiming at digital receivers exists. You can find its
123462306a36Sopenharmony_cihomepage at `https://linuxtv.org <https://linuxtv.org>`__. The Linux
123562306a36Sopenharmony_ciDVB API has no connection to the V4L2 API except that drivers for hybrid
123662306a36Sopenharmony_cihardware may support both.
123762306a36Sopenharmony_ci
123862306a36Sopenharmony_ciAudio Interfaces
123962306a36Sopenharmony_ci----------------
124062306a36Sopenharmony_ci
124162306a36Sopenharmony_ci[to do - OSS/ALSA]
124262306a36Sopenharmony_ci
124362306a36Sopenharmony_ci.. _experimental:
124462306a36Sopenharmony_ci
124562306a36Sopenharmony_ciExperimental API Elements
124662306a36Sopenharmony_ci=========================
124762306a36Sopenharmony_ci
124862306a36Sopenharmony_ciThe following V4L2 API elements are currently experimental and may
124962306a36Sopenharmony_cichange in the future.
125062306a36Sopenharmony_ci
125162306a36Sopenharmony_ci-  :ref:`VIDIOC_DBG_G_REGISTER` and
125262306a36Sopenharmony_ci   :ref:`VIDIOC_DBG_S_REGISTER <VIDIOC_DBG_G_REGISTER>` ioctls.
125362306a36Sopenharmony_ci
125462306a36Sopenharmony_ci-  :ref:`VIDIOC_DBG_G_CHIP_INFO` ioctl.
125562306a36Sopenharmony_ci
125662306a36Sopenharmony_ci.. _obsolete:
125762306a36Sopenharmony_ci
125862306a36Sopenharmony_ciObsolete API Elements
125962306a36Sopenharmony_ci=====================
126062306a36Sopenharmony_ci
126162306a36Sopenharmony_ciThe following V4L2 API elements were superseded by new interfaces and
126262306a36Sopenharmony_cishould not be implemented in new drivers.
126362306a36Sopenharmony_ci
126462306a36Sopenharmony_ci-  ``VIDIOC_G_MPEGCOMP`` and ``VIDIOC_S_MPEGCOMP`` ioctls. Use Extended
126562306a36Sopenharmony_ci   Controls, :ref:`extended-controls`.
126662306a36Sopenharmony_ci
126762306a36Sopenharmony_ci-  VIDIOC_G_DV_PRESET, VIDIOC_S_DV_PRESET,
126862306a36Sopenharmony_ci   VIDIOC_ENUM_DV_PRESETS and VIDIOC_QUERY_DV_PRESET ioctls. Use
126962306a36Sopenharmony_ci   the DV Timings API (:ref:`dv-timings`).
127062306a36Sopenharmony_ci
127162306a36Sopenharmony_ci-  ``VIDIOC_SUBDEV_G_CROP`` and ``VIDIOC_SUBDEV_S_CROP`` ioctls. Use
127262306a36Sopenharmony_ci   ``VIDIOC_SUBDEV_G_SELECTION`` and ``VIDIOC_SUBDEV_S_SELECTION``,
127362306a36Sopenharmony_ci   :ref:`VIDIOC_SUBDEV_G_SELECTION`.
127462306a36Sopenharmony_ci
127562306a36Sopenharmony_ci.. [#f1]
127662306a36Sopenharmony_ci   This is not implemented in XFree86.
1277