1368 lines
49 KiB
ReStructuredText
1368 lines
49 KiB
ReStructuredText
.. -*- coding: utf-8; mode: rst -*-
|
|
|
|
.. _hist-v4l2:
|
|
|
|
***********************
|
|
Changes of the V4L2 API
|
|
***********************
|
|
|
|
Soon after the V4L API was added to the kernel it was criticised as too
|
|
inflexible. In August 1998 Bill Dirks proposed a number of improvements
|
|
and began to work on documentation, example drivers and applications.
|
|
With the help of other volunteers this eventually became the V4L2 API,
|
|
not just an extension but a replacement for the V4L API. However it took
|
|
another four years and two stable kernel releases until the new API was
|
|
finally accepted for inclusion into the kernel in its present form.
|
|
|
|
|
|
Early Versions
|
|
==============
|
|
|
|
1998-08-20: First version.
|
|
|
|
1998-08-27: The :ref:`select() <func-select>` function was introduced.
|
|
|
|
1998-09-10: New video standard interface.
|
|
|
|
1998-09-18: The ``VIDIOC_NONCAP`` ioctl was replaced by the otherwise
|
|
meaningless ``O_TRUNC`` :ref:`open() <func-open>` flag, and the
|
|
aliases ``O_NONCAP`` and ``O_NOIO`` were defined. Applications can set
|
|
this flag if they intend to access controls only, as opposed to capture
|
|
applications which need exclusive access. The ``VIDEO_STD_XXX``
|
|
identifiers are now ordinals instead of flags, and the
|
|
``video_std_construct()`` helper function takes id and
|
|
transmission arguments.
|
|
|
|
1998-09-28: Revamped video standard. Made video controls individually
|
|
enumerable.
|
|
|
|
1998-10-02: The ``id`` field was removed from struct
|
|
struct ``video_standard`` and the color subcarrier fields were
|
|
renamed. The :ref:`VIDIOC_QUERYSTD` ioctl was
|
|
renamed to :ref:`VIDIOC_ENUMSTD`,
|
|
:ref:`VIDIOC_G_INPUT <VIDIOC_G_INPUT>` to
|
|
:ref:`VIDIOC_ENUMINPUT`. A first draft of the
|
|
Codec API was released.
|
|
|
|
1998-11-08: Many minor changes. Most symbols have been renamed. Some
|
|
material changes to struct :c:type:`v4l2_capability`.
|
|
|
|
1998-11-12: The read/write directon of some ioctls was misdefined.
|
|
|
|
1998-11-14: ``V4L2_PIX_FMT_RGB24`` changed to ``V4L2_PIX_FMT_BGR24``,
|
|
and ``V4L2_PIX_FMT_RGB32`` changed to ``V4L2_PIX_FMT_BGR32``. Audio
|
|
controls are now accessible with the
|
|
:ref:`VIDIOC_G_CTRL <VIDIOC_G_CTRL>` and
|
|
:ref:`VIDIOC_S_CTRL <VIDIOC_G_CTRL>` ioctls under names starting
|
|
with ``V4L2_CID_AUDIO``. The ``V4L2_MAJOR`` define was removed from
|
|
``videodev.h`` since it was only used once in the ``videodev`` kernel
|
|
module. The ``YUV422`` and ``YUV411`` planar image formats were added.
|
|
|
|
1998-11-28: A few ioctl symbols changed. Interfaces for codecs and video
|
|
output devices were added.
|
|
|
|
1999-01-14: A raw VBI capture interface was added.
|
|
|
|
1999-01-19: The ``VIDIOC_NEXTBUF`` ioctl was removed.
|
|
|
|
|
|
V4L2 Version 0.16 1999-01-31
|
|
============================
|
|
|
|
1999-01-27: There is now one QBUF ioctl, VIDIOC_QWBUF and VIDIOC_QRBUF
|
|
are gone. VIDIOC_QBUF takes a v4l2_buffer as a parameter. Added
|
|
digital zoom (cropping) controls.
|
|
|
|
|
|
V4L2 Version 0.18 1999-03-16
|
|
============================
|
|
|
|
Added a v4l to V4L2 ioctl compatibility layer to videodev.c. Driver
|
|
writers, this changes how you implement your ioctl handler. See the
|
|
Driver Writer's Guide. Added some more control id codes.
|
|
|
|
|
|
V4L2 Version 0.19 1999-06-05
|
|
============================
|
|
|
|
1999-03-18: Fill in the category and catname fields of v4l2_queryctrl
|
|
objects before passing them to the driver. Required a minor change to
|
|
the VIDIOC_QUERYCTRL handlers in the sample drivers.
|
|
|
|
1999-03-31: Better compatibility for v4l memory capture ioctls. Requires
|
|
changes to drivers to fully support new compatibility features, see
|
|
Driver Writer's Guide and v4l2cap.c. Added new control IDs:
|
|
V4L2_CID_HFLIP, _VFLIP. Changed V4L2_PIX_FMT_YUV422P to _YUV422P,
|
|
and _YUV411P to _YUV411P.
|
|
|
|
1999-04-04: Added a few more control IDs.
|
|
|
|
1999-04-07: Added the button control type.
|
|
|
|
1999-05-02: Fixed a typo in videodev.h, and added the
|
|
V4L2_CTRL_FLAG_GRAYED (later V4L2_CTRL_FLAG_GRABBED) flag.
|
|
|
|
1999-05-20: Definition of VIDIOC_G_CTRL was wrong causing a
|
|
malfunction of this ioctl.
|
|
|
|
1999-06-05: Changed the value of V4L2_CID_WHITENESS.
|
|
|
|
|
|
V4L2 Version 0.20 (1999-09-10)
|
|
==============================
|
|
|
|
Version 0.20 introduced a number of changes which were *not backward
|
|
compatible* with 0.19 and earlier versions. Purpose of these changes was
|
|
to simplify the API, while making it more extensible and following
|
|
common Linux driver API conventions.
|
|
|
|
1. Some typos in ``V4L2_FMT_FLAG`` symbols were fixed. struct
|
|
:c:type:`v4l2_clip` was changed for compatibility with
|
|
v4l. (1999-08-30)
|
|
|
|
2. ``V4L2_TUNER_SUB_LANG1`` was added. (1999-09-05)
|
|
|
|
3. All ioctl() commands that used an integer argument now take a pointer
|
|
to an integer. Where it makes sense, ioctls will return the actual
|
|
new value in the integer pointed to by the argument, a common
|
|
convention in the V4L2 API. The affected ioctls are: VIDIOC_PREVIEW,
|
|
VIDIOC_STREAMON, VIDIOC_STREAMOFF, VIDIOC_S_FREQ,
|
|
VIDIOC_S_INPUT, VIDIOC_S_OUTPUT, VIDIOC_S_EFFECT. For example
|
|
|
|
|
|
.. code-block:: c
|
|
|
|
err = ioctl (fd, VIDIOC_XXX, V4L2_XXX);
|
|
|
|
becomes
|
|
|
|
|
|
.. code-block:: c
|
|
|
|
int a = V4L2_XXX; err = ioctl(fd, VIDIOC_XXX, &a);
|
|
|
|
4. All the different get- and set-format commands were swept into one
|
|
:ref:`VIDIOC_G_FMT <VIDIOC_G_FMT>` and
|
|
:ref:`VIDIOC_S_FMT <VIDIOC_G_FMT>` ioctl taking a union and a
|
|
type field selecting the union member as parameter. Purpose is to
|
|
simplify the API by eliminating several ioctls and to allow new and
|
|
driver private data streams without adding new ioctls.
|
|
|
|
This change obsoletes the following ioctls: ``VIDIOC_S_INFMT``,
|
|
``VIDIOC_G_INFMT``, ``VIDIOC_S_OUTFMT``, ``VIDIOC_G_OUTFMT``,
|
|
``VIDIOC_S_VBIFMT`` and ``VIDIOC_G_VBIFMT``. The image format
|
|
structure struct :c:type:`v4l2_format` was renamed to struct
|
|
:c:type:`v4l2_pix_format`, while struct
|
|
:c:type:`v4l2_format` is now the envelopping structure
|
|
for all format negotiations.
|
|
|
|
5. Similar to the changes above, the ``VIDIOC_G_PARM`` and
|
|
``VIDIOC_S_PARM`` ioctls were merged with ``VIDIOC_G_OUTPARM`` and
|
|
``VIDIOC_S_OUTPARM``. A ``type`` field in the new struct
|
|
:c:type:`v4l2_streamparm` selects the respective
|
|
union member.
|
|
|
|
This change obsoletes the ``VIDIOC_G_OUTPARM`` and
|
|
``VIDIOC_S_OUTPARM`` ioctls.
|
|
|
|
6. Control enumeration was simplified, and two new control flags were
|
|
introduced and one dropped. The ``catname`` field was replaced by a
|
|
``group`` field.
|
|
|
|
Drivers can now flag unsupported and temporarily unavailable controls
|
|
with ``V4L2_CTRL_FLAG_DISABLED`` and ``V4L2_CTRL_FLAG_GRABBED``
|
|
respectively. The ``group`` name indicates a possibly narrower
|
|
classification than the ``category``. In other words, there may be
|
|
multiple groups within a category. Controls within a group would
|
|
typically be drawn within a group box. Controls in different
|
|
categories might have a greater separation, or may even appear in
|
|
separate windows.
|
|
|
|
7. The struct :c:type:`v4l2_buffer` ``timestamp`` was
|
|
changed to a 64 bit integer, containing the sampling or output time
|
|
of the frame in nanoseconds. Additionally timestamps will be in
|
|
absolute system time, not starting from zero at the beginning of a
|
|
stream. The data type name for timestamps is stamp_t, defined as a
|
|
signed 64-bit integer. Output devices should not send a buffer out
|
|
until the time in the timestamp field has arrived. I would like to
|
|
follow SGI's lead, and adopt a multimedia timestamping system like
|
|
their UST (Unadjusted System Time). See
|
|
http://web.archive.org/web/\*/http://reality.sgi.com
|
|
/cpirazzi_engr/lg/time/intro.html. UST uses timestamps that are
|
|
64-bit signed integers (not struct timeval's) and given in nanosecond
|
|
units. The UST clock starts at zero when the system is booted and
|
|
runs continuously and uniformly. It takes a little over 292 years for
|
|
UST to overflow. There is no way to set the UST clock. The regular
|
|
Linux time-of-day clock can be changed periodically, which would
|
|
cause errors if it were being used for timestamping a multimedia
|
|
stream. A real UST style clock will require some support in the
|
|
kernel that is not there yet. But in anticipation, I will change the
|
|
timestamp field to a 64-bit integer, and I will change the
|
|
v4l2_masterclock_gettime() function (used only by drivers) to
|
|
return a 64-bit integer.
|
|
|
|
8. A ``sequence`` field was added to struct
|
|
:c:type:`v4l2_buffer`. The ``sequence`` field counts
|
|
captured frames, it is ignored by output devices. When a capture
|
|
driver drops a frame, the sequence number of that frame is skipped.
|
|
|
|
|
|
V4L2 Version 0.20 incremental changes
|
|
=====================================
|
|
|
|
1999-12-23: In struct :c:type:`v4l2_vbi_format` the
|
|
``reserved1`` field became ``offset``. Previously drivers were required
|
|
to clear the ``reserved1`` field.
|
|
|
|
2000-01-13: The ``V4L2_FMT_FLAG_NOT_INTERLACED`` flag was added.
|
|
|
|
2000-07-31: The ``linux/poll.h`` header is now included by
|
|
``videodev.h`` for compatibility with the original ``videodev.h`` file.
|
|
|
|
2000-11-20: ``V4L2_TYPE_VBI_OUTPUT`` and ``V4L2_PIX_FMT_Y41P`` were
|
|
added.
|
|
|
|
2000-11-25: ``V4L2_TYPE_VBI_INPUT`` was added.
|
|
|
|
2000-12-04: A couple typos in symbol names were fixed.
|
|
|
|
2001-01-18: To avoid namespace conflicts the ``fourcc`` macro defined in
|
|
the ``videodev.h`` header file was renamed to ``v4l2_fourcc``.
|
|
|
|
2001-01-25: A possible driver-level compatibility problem between the
|
|
``videodev.h`` file in Linux 2.4.0 and the ``videodev.h`` file included
|
|
in the ``videodevX`` patch was fixed. Users of an earlier version of
|
|
``videodevX`` on Linux 2.4.0 should recompile their V4L and V4L2
|
|
drivers.
|
|
|
|
2001-01-26: A possible kernel-level incompatibility between the
|
|
``videodev.h`` file in the ``videodevX`` patch and the ``videodev.h``
|
|
file in Linux 2.2.x with devfs patches applied was fixed.
|
|
|
|
2001-03-02: Certain V4L ioctls which pass data in both direction
|
|
although they are defined with read-only parameter, did not work
|
|
correctly through the backward compatibility layer. [Solution?]
|
|
|
|
2001-04-13: Big endian 16-bit RGB formats were added.
|
|
|
|
2001-09-17: New YUV formats and the
|
|
:ref:`VIDIOC_G_FREQUENCY <VIDIOC_G_FREQUENCY>` and
|
|
:ref:`VIDIOC_S_FREQUENCY <VIDIOC_G_FREQUENCY>` ioctls were added.
|
|
(The old ``VIDIOC_G_FREQ`` and ``VIDIOC_S_FREQ`` ioctls did not take
|
|
multiple tuners into account.)
|
|
|
|
2000-09-18: ``V4L2_BUF_TYPE_VBI`` was added. This may *break
|
|
compatibility* as the :ref:`VIDIOC_G_FMT <VIDIOC_G_FMT>` and
|
|
:ref:`VIDIOC_S_FMT <VIDIOC_G_FMT>` ioctls may fail now if the struct
|
|
struct ``v4l2_fmt`` ``type`` field does not contain
|
|
``V4L2_BUF_TYPE_VBI``. In the documentation of the struct
|
|
:c:type:`v4l2_vbi_format` ``offset`` field the
|
|
ambiguous phrase "rising edge" was changed to "leading edge".
|
|
|
|
|
|
V4L2 Version 0.20 2000-11-23
|
|
============================
|
|
|
|
A number of changes were made to the raw VBI interface.
|
|
|
|
1. Figures clarifying the line numbering scheme were added to the V4L2
|
|
API specification. The ``start``\ [0] and ``start``\ [1] fields no
|
|
longer count line numbers beginning at zero. Rationale: a) The
|
|
previous definition was unclear. b) The ``start``\ [] values are
|
|
ordinal numbers. c) There is no point in inventing a new line
|
|
numbering scheme. We now use line number as defined by ITU-R, period.
|
|
Compatibility: Add one to the start values. Applications depending on
|
|
the previous semantics may not function correctly.
|
|
|
|
2. The restriction "count[0] > 0 and count[1] > 0" has been relaxed to
|
|
"(count[0] + count[1]) > 0". Rationale: Drivers may allocate
|
|
resources at scan line granularity and some data services are
|
|
transmitted only on the first field. The comment that both ``count``
|
|
values will usually be equal is misleading and pointless and has been
|
|
removed. This change *breaks compatibility* with earlier versions:
|
|
Drivers may return ``EINVAL``, applications may not function correctly.
|
|
|
|
3. Drivers are again permitted to return negative (unknown) start values
|
|
as proposed earlier. Why this feature was dropped is unclear. This
|
|
change may *break compatibility* with applications depending on the
|
|
start values being positive. The use of ``EBUSY`` and ``EINVAL``
|
|
error codes with the :ref:`VIDIOC_S_FMT <VIDIOC_G_FMT>` ioctl was
|
|
clarified. The ``EBUSY`` error code was finally documented, and the
|
|
``reserved2`` field which was previously mentioned only in the
|
|
``videodev.h`` header file.
|
|
|
|
4. New buffer types ``V4L2_TYPE_VBI_INPUT`` and ``V4L2_TYPE_VBI_OUTPUT``
|
|
were added. The former is an alias for the old ``V4L2_TYPE_VBI``, the
|
|
latter was missing in the ``videodev.h`` file.
|
|
|
|
|
|
V4L2 Version 0.20 2002-07-25
|
|
============================
|
|
|
|
Added sliced VBI interface proposal.
|
|
|
|
|
|
V4L2 in Linux 2.5.46, 2002-10
|
|
=============================
|
|
|
|
Around October-November 2002, prior to an announced feature freeze of
|
|
Linux 2.5, the API was revised, drawing from experience with V4L2 0.20.
|
|
This unnamed version was finally merged into Linux 2.5.46.
|
|
|
|
1. As specified in :ref:`related`, drivers must make related device
|
|
functions available under all minor device numbers.
|
|
|
|
2. The :ref:`open() <func-open>` function requires access mode
|
|
``O_RDWR`` regardless of the device type. All V4L2 drivers
|
|
exchanging data with applications must support the ``O_NONBLOCK``
|
|
flag. The ``O_NOIO`` flag, a V4L2 symbol which aliased the
|
|
meaningless ``O_TRUNC`` to indicate accesses without data exchange
|
|
(panel applications) was dropped. Drivers must stay in "panel mode"
|
|
until the application attempts to initiate a data exchange, see
|
|
:ref:`open`.
|
|
|
|
3. The struct :c:type:`v4l2_capability` changed
|
|
dramatically. Note that also the size of the structure changed,
|
|
which is encoded in the ioctl request code, thus older V4L2 devices
|
|
will respond with an ``EINVAL`` error code to the new
|
|
:ref:`VIDIOC_QUERYCAP` ioctl.
|
|
|
|
There are new fields to identify the driver, a new RDS device
|
|
function ``V4L2_CAP_RDS_CAPTURE``, the ``V4L2_CAP_AUDIO`` flag
|
|
indicates if the device has any audio connectors, another I/O
|
|
capability ``V4L2_CAP_ASYNCIO`` can be flagged. In response to these
|
|
changes the ``type`` field became a bit set and was merged into the
|
|
``flags`` field. ``V4L2_FLAG_TUNER`` was renamed to
|
|
``V4L2_CAP_TUNER``, ``V4L2_CAP_VIDEO_OVERLAY`` replaced
|
|
``V4L2_FLAG_PREVIEW`` and ``V4L2_CAP_VBI_CAPTURE`` and
|
|
``V4L2_CAP_VBI_OUTPUT`` replaced ``V4L2_FLAG_DATA_SERVICE``.
|
|
``V4L2_FLAG_READ`` and ``V4L2_FLAG_WRITE`` were merged into
|
|
``V4L2_CAP_READWRITE``.
|
|
|
|
The redundant fields ``inputs``, ``outputs`` and ``audios`` were
|
|
removed. These properties can be determined as described in
|
|
:ref:`video` and :ref:`audio`.
|
|
|
|
The somewhat volatile and therefore barely useful fields
|
|
``maxwidth``, ``maxheight``, ``minwidth``, ``minheight``,
|
|
``maxframerate`` were removed. This information is available as
|
|
described in :ref:`format` and :ref:`standard`.
|
|
|
|
``V4L2_FLAG_SELECT`` was removed. We believe the select() function
|
|
is important enough to require support of it in all V4L2 drivers
|
|
exchanging data with applications. The redundant
|
|
``V4L2_FLAG_MONOCHROME`` flag was removed, this information is
|
|
available as described in :ref:`format`.
|
|
|
|
4. In struct :c:type:`v4l2_input` the ``assoc_audio``
|
|
field and the ``capability`` field and its only flag
|
|
``V4L2_INPUT_CAP_AUDIO`` was replaced by the new ``audioset`` field.
|
|
Instead of linking one video input to one audio input this field
|
|
reports all audio inputs this video input combines with.
|
|
|
|
New fields are ``tuner`` (reversing the former link from tuners to
|
|
video inputs), ``std`` and ``status``.
|
|
|
|
Accordingly struct :c:type:`v4l2_output` lost its
|
|
``capability`` and ``assoc_audio`` fields. ``audioset``,
|
|
``modulator`` and ``std`` where added instead.
|
|
|
|
5. The struct :c:type:`v4l2_audio` field ``audio`` was
|
|
renamed to ``index``, for consistency with other structures. A new
|
|
capability flag ``V4L2_AUDCAP_STEREO`` was added to indicated if the
|
|
audio input in question supports stereo sound.
|
|
``V4L2_AUDCAP_EFFECTS`` and the corresponding ``V4L2_AUDMODE`` flags
|
|
where removed. This can be easily implemented using controls.
|
|
(However the same applies to AVL which is still there.)
|
|
|
|
Again for consistency the struct
|
|
:c:type:`v4l2_audioout` field ``audio`` was renamed
|
|
to ``index``.
|
|
|
|
6. The struct :c:type:`v4l2_tuner` ``input`` field was
|
|
replaced by an ``index`` field, permitting devices with multiple
|
|
tuners. The link between video inputs and tuners is now reversed,
|
|
inputs point to their tuner. The ``std`` substructure became a
|
|
simple set (more about this below) and moved into struct
|
|
:c:type:`v4l2_input`. A ``type`` field was added.
|
|
|
|
Accordingly in struct :c:type:`v4l2_modulator` the
|
|
``output`` was replaced by an ``index`` field.
|
|
|
|
In struct :c:type:`v4l2_frequency` the ``port``
|
|
field was replaced by a ``tuner`` field containing the respective
|
|
tuner or modulator index number. A tuner ``type`` field was added
|
|
and the ``reserved`` field became larger for future extensions
|
|
(satellite tuners in particular).
|
|
|
|
7. The idea of completely transparent video standards was dropped.
|
|
Experience showed that applications must be able to work with video
|
|
standards beyond presenting the user a menu. Instead of enumerating
|
|
supported standards with an ioctl applications can now refer to
|
|
standards by :ref:`v4l2_std_id <v4l2-std-id>` and symbols
|
|
defined in the ``videodev2.h`` header file. For details see
|
|
:ref:`standard`. The :ref:`VIDIOC_G_STD <VIDIOC_G_STD>` and
|
|
:ref:`VIDIOC_S_STD <VIDIOC_G_STD>` now take a pointer to this
|
|
type as argument. :ref:`VIDIOC_QUERYSTD` was
|
|
added to autodetect the received standard, if the hardware has this
|
|
capability. In struct :c:type:`v4l2_standard` an
|
|
``index`` field was added for
|
|
:ref:`VIDIOC_ENUMSTD`. A
|
|
:ref:`v4l2_std_id <v4l2-std-id>` field named ``id`` was added as
|
|
machine readable identifier, also replacing the ``transmission``
|
|
field. The misleading ``framerate`` field was renamed to
|
|
``frameperiod``. The now obsolete ``colorstandard`` information,
|
|
originally needed to distguish between variations of standards, were
|
|
removed.
|
|
|
|
Struct ``v4l2_enumstd`` ceased to be.
|
|
:ref:`VIDIOC_ENUMSTD` now takes a pointer to a
|
|
struct :c:type:`v4l2_standard` directly. The
|
|
information which standards are supported by a particular video
|
|
input or output moved into struct :c:type:`v4l2_input`
|
|
and struct :c:type:`v4l2_output` fields named ``std``,
|
|
respectively.
|
|
|
|
8. The struct :ref:`v4l2_queryctrl <v4l2-queryctrl>` fields
|
|
``category`` and ``group`` did not catch on and/or were not
|
|
implemented as expected and therefore removed.
|
|
|
|
9. The :ref:`VIDIOC_TRY_FMT <VIDIOC_G_FMT>` ioctl was added to
|
|
negotiate data formats as with
|
|
:ref:`VIDIOC_S_FMT <VIDIOC_G_FMT>`, but without the overhead of
|
|
programming the hardware and regardless of I/O in progress.
|
|
|
|
In struct :c:type:`v4l2_format` the ``fmt`` union was
|
|
extended to contain struct :c:type:`v4l2_window`. All
|
|
image format negotiations are now possible with ``VIDIOC_G_FMT``,
|
|
``VIDIOC_S_FMT`` and ``VIDIOC_TRY_FMT``; ioctl. The ``VIDIOC_G_WIN``
|
|
and ``VIDIOC_S_WIN`` ioctls to prepare for a video overlay were
|
|
removed. The ``type`` field changed to type enum
|
|
:c:type:`v4l2_buf_type` and the buffer type names
|
|
changed as follows.
|
|
|
|
|
|
|
|
.. flat-table::
|
|
:header-rows: 1
|
|
:stub-columns: 0
|
|
|
|
* - Old defines
|
|
- enum :c:type:`v4l2_buf_type`
|
|
* - ``V4L2_BUF_TYPE_CAPTURE``
|
|
- ``V4L2_BUF_TYPE_VIDEO_CAPTURE``
|
|
* - ``V4L2_BUF_TYPE_CODECIN``
|
|
- Omitted for now
|
|
* - ``V4L2_BUF_TYPE_CODECOUT``
|
|
- Omitted for now
|
|
* - ``V4L2_BUF_TYPE_EFFECTSIN``
|
|
- Omitted for now
|
|
* - ``V4L2_BUF_TYPE_EFFECTSIN2``
|
|
- Omitted for now
|
|
* - ``V4L2_BUF_TYPE_EFFECTSOUT``
|
|
- Omitted for now
|
|
* - ``V4L2_BUF_TYPE_VIDEOOUT``
|
|
- ``V4L2_BUF_TYPE_VIDEO_OUTPUT``
|
|
* - ``-``
|
|
- ``V4L2_BUF_TYPE_VIDEO_OVERLAY``
|
|
* - ``-``
|
|
- ``V4L2_BUF_TYPE_VBI_CAPTURE``
|
|
* - ``-``
|
|
- ``V4L2_BUF_TYPE_VBI_OUTPUT``
|
|
* - ``-``
|
|
- ``V4L2_BUF_TYPE_SLICED_VBI_CAPTURE``
|
|
* - ``-``
|
|
- ``V4L2_BUF_TYPE_SLICED_VBI_OUTPUT``
|
|
* - ``V4L2_BUF_TYPE_PRIVATE_BASE``
|
|
- ``V4L2_BUF_TYPE_PRIVATE`` (but this is deprecated)
|
|
|
|
|
|
10. In struct :c:type:`v4l2_fmtdesc` a enum
|
|
:c:type:`v4l2_buf_type` field named ``type`` was
|
|
added as in struct :c:type:`v4l2_format`. The
|
|
``VIDIOC_ENUM_FBUFFMT`` ioctl is no longer needed and was removed.
|
|
These calls can be replaced by
|
|
:ref:`VIDIOC_ENUM_FMT` with type
|
|
``V4L2_BUF_TYPE_VIDEO_OVERLAY``.
|
|
|
|
11. In struct :c:type:`v4l2_pix_format` the ``depth``
|
|
field was removed, assuming applications which recognize the format
|
|
by its four-character-code already know the color depth, and others
|
|
do not care about it. The same rationale lead to the removal of the
|
|
``V4L2_FMT_FLAG_COMPRESSED`` flag. The
|
|
``V4L2_FMT_FLAG_SWCONVECOMPRESSED`` flag was removed because drivers
|
|
are not supposed to convert images in kernel space. A user library
|
|
of conversion functions should be provided instead. The
|
|
``V4L2_FMT_FLAG_BYTESPERLINE`` flag was redundant. Applications can
|
|
set the ``bytesperline`` field to zero to get a reasonable default.
|
|
Since the remaining flags were replaced as well, the ``flags`` field
|
|
itself was removed.
|
|
|
|
The interlace flags were replaced by a enum
|
|
:c:type:`v4l2_field` value in a newly added ``field``
|
|
field.
|
|
|
|
|
|
|
|
.. flat-table::
|
|
:header-rows: 1
|
|
:stub-columns: 0
|
|
|
|
* - Old flag
|
|
- enum :c:type:`v4l2_field`
|
|
* - ``V4L2_FMT_FLAG_NOT_INTERLACED``
|
|
- ?
|
|
* - ``V4L2_FMT_FLAG_INTERLACED`` = ``V4L2_FMT_FLAG_COMBINED``
|
|
- ``V4L2_FIELD_INTERLACED``
|
|
* - ``V4L2_FMT_FLAG_TOPFIELD`` = ``V4L2_FMT_FLAG_ODDFIELD``
|
|
- ``V4L2_FIELD_TOP``
|
|
* - ``V4L2_FMT_FLAG_BOTFIELD`` = ``V4L2_FMT_FLAG_EVENFIELD``
|
|
- ``V4L2_FIELD_BOTTOM``
|
|
* - ``-``
|
|
- ``V4L2_FIELD_SEQ_TB``
|
|
* - ``-``
|
|
- ``V4L2_FIELD_SEQ_BT``
|
|
* - ``-``
|
|
- ``V4L2_FIELD_ALTERNATE``
|
|
|
|
|
|
The color space flags were replaced by a enum
|
|
:c:type:`v4l2_colorspace` value in a newly added
|
|
``colorspace`` field, where one of ``V4L2_COLORSPACE_SMPTE170M``,
|
|
``V4L2_COLORSPACE_BT878``, ``V4L2_COLORSPACE_470_SYSTEM_M`` or
|
|
``V4L2_COLORSPACE_470_SYSTEM_BG`` replaces ``V4L2_FMT_CS_601YUV``.
|
|
|
|
12. In struct :c:type:`v4l2_requestbuffers` the
|
|
``type`` field was properly defined as enum
|
|
:c:type:`v4l2_buf_type`. Buffer types changed as
|
|
mentioned above. A new ``memory`` field of type enum
|
|
:c:type:`v4l2_memory` was added to distinguish between
|
|
I/O methods using buffers allocated by the driver or the
|
|
application. See :ref:`io` for details.
|
|
|
|
13. In struct :c:type:`v4l2_buffer` the ``type`` field was
|
|
properly defined as enum :c:type:`v4l2_buf_type`.
|
|
Buffer types changed as mentioned above. A ``field`` field of type
|
|
enum :c:type:`v4l2_field` was added to indicate if a
|
|
buffer contains a top or bottom field. The old field flags were
|
|
removed. Since no unadjusted system time clock was added to the
|
|
kernel as planned, the ``timestamp`` field changed back from type
|
|
stamp_t, an unsigned 64 bit integer expressing the sample time in
|
|
nanoseconds, to struct :c:type:`timeval`. With the addition
|
|
of a second memory mapping method the ``offset`` field moved into
|
|
union ``m``, and a new ``memory`` field of type enum
|
|
:c:type:`v4l2_memory` was added to distinguish between
|
|
I/O methods. See :ref:`io` for details.
|
|
|
|
The ``V4L2_BUF_REQ_CONTIG`` flag was used by the V4L compatibility
|
|
layer, after changes to this code it was no longer needed. The
|
|
``V4L2_BUF_ATTR_DEVICEMEM`` flag would indicate if the buffer was
|
|
indeed allocated in device memory rather than DMA-able system
|
|
memory. It was barely useful and so was removed.
|
|
|
|
14. In struct :c:type:`v4l2_framebuffer` the
|
|
``base[3]`` array anticipating double- and triple-buffering in
|
|
off-screen video memory, however without defining a synchronization
|
|
mechanism, was replaced by a single pointer. The
|
|
``V4L2_FBUF_CAP_SCALEUP`` and ``V4L2_FBUF_CAP_SCALEDOWN`` flags were
|
|
removed. Applications can determine this capability more accurately
|
|
using the new cropping and scaling interface. The
|
|
``V4L2_FBUF_CAP_CLIPPING`` flag was replaced by
|
|
``V4L2_FBUF_CAP_LIST_CLIPPING`` and
|
|
``V4L2_FBUF_CAP_BITMAP_CLIPPING``.
|
|
|
|
15. In struct :c:type:`v4l2_clip` the ``x``, ``y``,
|
|
``width`` and ``height`` field moved into a ``c`` substructure of
|
|
type struct :c:type:`v4l2_rect`. The ``x`` and ``y``
|
|
fields were renamed to ``left`` and ``top``, i. e. offsets to a
|
|
context dependent origin.
|
|
|
|
16. In struct :c:type:`v4l2_window` the ``x``, ``y``,
|
|
``width`` and ``height`` field moved into a ``w`` substructure as
|
|
above. A ``field`` field of type :c:type:`v4l2_field` was added to
|
|
distinguish between field and frame (interlaced) overlay.
|
|
|
|
17. The digital zoom interface, including struct
|
|
struct ``v4l2_zoomcap``, struct
|
|
struct ``v4l2_zoom``, ``V4L2_ZOOM_NONCAP`` and
|
|
``V4L2_ZOOM_WHILESTREAMING`` was replaced by a new cropping and
|
|
scaling interface. The previously unused struct
|
|
struct :c:type:`v4l2_cropcap` and struct :c:type:`v4l2_crop`
|
|
where redefined for this purpose. See :ref:`crop` for details.
|
|
|
|
18. In struct :c:type:`v4l2_vbi_format` the
|
|
``SAMPLE_FORMAT`` field now contains a four-character-code as used
|
|
to identify video image formats and ``V4L2_PIX_FMT_GREY`` replaces
|
|
the ``V4L2_VBI_SF_UBYTE`` define. The ``reserved`` field was
|
|
extended.
|
|
|
|
19. In struct :c:type:`v4l2_captureparm` the type of
|
|
the ``timeperframe`` field changed from unsigned long to struct
|
|
:c:type:`v4l2_fract`. This allows the accurate
|
|
expression of multiples of the NTSC-M frame rate 30000 / 1001. A new
|
|
field ``readbuffers`` was added to control the driver behaviour in
|
|
read I/O mode.
|
|
|
|
Similar changes were made to struct
|
|
:c:type:`v4l2_outputparm`.
|
|
|
|
20. The struct ``v4l2_performance`` and
|
|
``VIDIOC_G_PERF`` ioctl were dropped. Except when using the
|
|
:ref:`read/write I/O method <rw>`, which is limited anyway, this
|
|
information is already available to applications.
|
|
|
|
21. The example transformation from RGB to YCbCr color space in the old
|
|
V4L2 documentation was inaccurate, this has been corrected in
|
|
:ref:`pixfmt`.
|
|
|
|
|
|
V4L2 2003-06-19
|
|
===============
|
|
|
|
1. A new capability flag ``V4L2_CAP_RADIO`` was added for radio devices.
|
|
Prior to this change radio devices would identify solely by having
|
|
exactly one tuner whose type field reads ``V4L2_TUNER_RADIO``.
|
|
|
|
2. An optional driver access priority mechanism was added, see
|
|
:ref:`app-pri` for details.
|
|
|
|
3. The audio input and output interface was found to be incomplete.
|
|
|
|
Previously the :ref:`VIDIOC_G_AUDIO <VIDIOC_G_AUDIO>` ioctl would
|
|
enumerate the available audio inputs. An ioctl to determine the
|
|
current audio input, if more than one combines with the current video
|
|
input, did not exist. So ``VIDIOC_G_AUDIO`` was renamed to
|
|
``VIDIOC_G_AUDIO_OLD``, this ioctl was removed on Kernel 2.6.39. The
|
|
:ref:`VIDIOC_ENUMAUDIO` ioctl was added to
|
|
enumerate audio inputs, while
|
|
:ref:`VIDIOC_G_AUDIO <VIDIOC_G_AUDIO>` now reports the current
|
|
audio input.
|
|
|
|
The same changes were made to
|
|
:ref:`VIDIOC_G_AUDOUT <VIDIOC_G_AUDOUT>` and
|
|
:ref:`VIDIOC_ENUMAUDOUT <VIDIOC_ENUMAUDOUT>`.
|
|
|
|
Until further the "videodev" module will automatically translate
|
|
between the old and new ioctls, but drivers and applications must be
|
|
updated to successfully compile again.
|
|
|
|
4. The :ref:`VIDIOC_OVERLAY` ioctl was incorrectly
|
|
defined with write-read parameter. It was changed to write-only,
|
|
while the write-read version was renamed to ``VIDIOC_OVERLAY_OLD``.
|
|
The old ioctl was removed on Kernel 2.6.39. Until further the
|
|
"videodev" kernel module will automatically translate to the new
|
|
version, so drivers must be recompiled, but not applications.
|
|
|
|
5. :ref:`overlay` incorrectly stated that clipping rectangles define
|
|
regions where the video can be seen. Correct is that clipping
|
|
rectangles define regions where *no* video shall be displayed and so
|
|
the graphics surface can be seen.
|
|
|
|
6. The :ref:`VIDIOC_S_PARM <VIDIOC_G_PARM>` and
|
|
:ref:`VIDIOC_S_CTRL <VIDIOC_G_CTRL>` ioctls were defined with
|
|
write-only parameter, inconsistent with other ioctls modifying their
|
|
argument. They were changed to write-read, while a ``_OLD`` suffix
|
|
was added to the write-only versions. The old ioctls were removed on
|
|
Kernel 2.6.39. Drivers and applications assuming a constant parameter
|
|
need an update.
|
|
|
|
|
|
V4L2 2003-11-05
|
|
===============
|
|
|
|
1. In :ref:`pixfmt-rgb` the following pixel formats were incorrectly
|
|
transferred from Bill Dirks' V4L2 specification. Descriptions below
|
|
refer to bytes in memory, in ascending address order.
|
|
|
|
|
|
|
|
.. flat-table::
|
|
:header-rows: 1
|
|
:stub-columns: 0
|
|
|
|
* - Symbol
|
|
- In this document prior to revision 0.5
|
|
- Corrected
|
|
* - ``V4L2_PIX_FMT_RGB24``
|
|
- B, G, R
|
|
- R, G, B
|
|
* - ``V4L2_PIX_FMT_BGR24``
|
|
- R, G, B
|
|
- B, G, R
|
|
* - ``V4L2_PIX_FMT_RGB32``
|
|
- B, G, R, X
|
|
- R, G, B, X
|
|
* - ``V4L2_PIX_FMT_BGR32``
|
|
- R, G, B, X
|
|
- B, G, R, X
|
|
|
|
|
|
The ``V4L2_PIX_FMT_BGR24`` example was always correct.
|
|
|
|
In :ref:`v4l-image-properties` the mapping of the V4L
|
|
``VIDEO_PALETTE_RGB24`` and ``VIDEO_PALETTE_RGB32`` formats to V4L2
|
|
pixel formats was accordingly corrected.
|
|
|
|
2. Unrelated to the fixes above, drivers may still interpret some V4L2
|
|
RGB pixel formats differently. These issues have yet to be addressed,
|
|
for details see :ref:`pixfmt-rgb`.
|
|
|
|
|
|
V4L2 in Linux 2.6.6, 2004-05-09
|
|
===============================
|
|
|
|
1. The :ref:`VIDIOC_CROPCAP` ioctl was incorrectly
|
|
defined with read-only parameter. It is now defined as write-read
|
|
ioctl, while the read-only version was renamed to
|
|
``VIDIOC_CROPCAP_OLD``. The old ioctl was removed on Kernel 2.6.39.
|
|
|
|
|
|
V4L2 in Linux 2.6.8
|
|
===================
|
|
|
|
1. A new field ``input`` (former ``reserved[0]``) was added to the
|
|
struct :c:type:`v4l2_buffer` structure. Purpose of this
|
|
field is to alternate between video inputs (e. g. cameras) in step
|
|
with the video capturing process. This function must be enabled with
|
|
the new ``V4L2_BUF_FLAG_INPUT`` flag. The ``flags`` field is no
|
|
longer read-only.
|
|
|
|
|
|
V4L2 spec erratum 2004-08-01
|
|
============================
|
|
|
|
1. The return value of the :ref:`func-open` function was incorrectly
|
|
documented.
|
|
|
|
2. Audio output ioctls end in -AUDOUT, not -AUDIOOUT.
|
|
|
|
3. In the Current Audio Input example the ``VIDIOC_G_AUDIO`` ioctl took
|
|
the wrong argument.
|
|
|
|
4. The documentation of the :ref:`VIDIOC_QBUF` and
|
|
:ref:`VIDIOC_DQBUF <VIDIOC_QBUF>` ioctls did not mention the
|
|
struct :c:type:`v4l2_buffer` ``memory`` field. It was
|
|
also missing from examples. Also on the ``VIDIOC_DQBUF`` page the ``EIO``
|
|
error code was not documented.
|
|
|
|
|
|
V4L2 in Linux 2.6.14
|
|
====================
|
|
|
|
1. A new sliced VBI interface was added. It is documented in
|
|
:ref:`sliced` and replaces the interface first proposed in V4L2
|
|
specification 0.8.
|
|
|
|
|
|
V4L2 in Linux 2.6.15
|
|
====================
|
|
|
|
1. The :ref:`VIDIOC_LOG_STATUS` ioctl was added.
|
|
|
|
2. New video standards ``V4L2_STD_NTSC_443``, ``V4L2_STD_SECAM_LC``,
|
|
``V4L2_STD_SECAM_DK`` (a set of SECAM D, K and K1), and
|
|
``V4L2_STD_ATSC`` (a set of ``V4L2_STD_ATSC_8_VSB`` and
|
|
``V4L2_STD_ATSC_16_VSB``) were defined. Note the ``V4L2_STD_525_60``
|
|
set now includes ``V4L2_STD_NTSC_443``. See also
|
|
:ref:`v4l2-std-id`.
|
|
|
|
3. The ``VIDIOC_G_COMP`` and ``VIDIOC_S_COMP`` ioctl were renamed to
|
|
``VIDIOC_G_MPEGCOMP`` and ``VIDIOC_S_MPEGCOMP`` respectively. Their
|
|
argument was replaced by a struct
|
|
``v4l2_mpeg_compression`` pointer. (The
|
|
``VIDIOC_G_MPEGCOMP`` and ``VIDIOC_S_MPEGCOMP`` ioctls where removed
|
|
in Linux 2.6.25.)
|
|
|
|
|
|
V4L2 spec erratum 2005-11-27
|
|
============================
|
|
|
|
The capture example in :ref:`capture-example` called the
|
|
:ref:`VIDIOC_S_CROP <VIDIOC_G_CROP>` ioctl without checking if
|
|
cropping is supported. In the video standard selection example in
|
|
:ref:`standard` the :ref:`VIDIOC_S_STD <VIDIOC_G_STD>` call used
|
|
the wrong argument type.
|
|
|
|
|
|
V4L2 spec erratum 2006-01-10
|
|
============================
|
|
|
|
1. The ``V4L2_IN_ST_COLOR_KILL`` flag in struct
|
|
:c:type:`v4l2_input` not only indicates if the color
|
|
killer is enabled, but also if it is active. (The color killer
|
|
disables color decoding when it detects no color in the video signal
|
|
to improve the image quality.)
|
|
|
|
2. :ref:`VIDIOC_S_PARM <VIDIOC_G_PARM>` is a write-read ioctl, not
|
|
write-only as stated on its reference page. The ioctl changed in 2003
|
|
as noted above.
|
|
|
|
|
|
V4L2 spec erratum 2006-02-03
|
|
============================
|
|
|
|
1. In struct :c:type:`v4l2_captureparm` and struct
|
|
:c:type:`v4l2_outputparm` the ``timeperframe``
|
|
field gives the time in seconds, not microseconds.
|
|
|
|
|
|
V4L2 spec erratum 2006-02-04
|
|
============================
|
|
|
|
1. The ``clips`` field in struct :c:type:`v4l2_window`
|
|
must point to an array of struct :c:type:`v4l2_clip`, not
|
|
a linked list, because drivers ignore the struct
|
|
struct :c:type:`v4l2_clip`. ``next`` pointer.
|
|
|
|
|
|
V4L2 in Linux 2.6.17
|
|
====================
|
|
|
|
1. New video standard macros were added: ``V4L2_STD_NTSC_M_KR`` (NTSC M
|
|
South Korea), and the sets ``V4L2_STD_MN``, ``V4L2_STD_B``,
|
|
``V4L2_STD_GH`` and ``V4L2_STD_DK``. The ``V4L2_STD_NTSC`` and
|
|
``V4L2_STD_SECAM`` sets now include ``V4L2_STD_NTSC_M_KR`` and
|
|
``V4L2_STD_SECAM_LC`` respectively.
|
|
|
|
2. A new ``V4L2_TUNER_MODE_LANG1_LANG2`` was defined to record both
|
|
languages of a bilingual program. The use of
|
|
``V4L2_TUNER_MODE_STEREO`` for this purpose is deprecated now. See
|
|
the :ref:`VIDIOC_G_TUNER <VIDIOC_G_TUNER>` section for details.
|
|
|
|
|
|
V4L2 spec erratum 2006-09-23 (Draft 0.15)
|
|
=========================================
|
|
|
|
1. In various places ``V4L2_BUF_TYPE_SLICED_VBI_CAPTURE`` and
|
|
``V4L2_BUF_TYPE_SLICED_VBI_OUTPUT`` of the sliced VBI interface were
|
|
not mentioned along with other buffer types.
|
|
|
|
2. In :ref:`VIDIOC_G_AUDIO <VIDIOC_G_AUDIO>` it was clarified that the struct
|
|
:c:type:`v4l2_audio` ``mode`` field is a flags field.
|
|
|
|
3. :ref:`VIDIOC_QUERYCAP` did not mention the sliced VBI and radio
|
|
capability flags.
|
|
|
|
4. In :ref:`VIDIOC_G_FREQUENCY <VIDIOC_G_FREQUENCY>` it was clarified that applications
|
|
must initialize the tuner ``type`` field of struct
|
|
:c:type:`v4l2_frequency` before calling
|
|
:ref:`VIDIOC_S_FREQUENCY <VIDIOC_G_FREQUENCY>`.
|
|
|
|
5. The ``reserved`` array in struct
|
|
:c:type:`v4l2_requestbuffers` has 2 elements,
|
|
not 32.
|
|
|
|
6. In :ref:`output` and :ref:`raw-vbi` the device file names
|
|
``/dev/vout`` which never caught on were replaced by ``/dev/video``.
|
|
|
|
7. With Linux 2.6.15 the possible range for VBI device minor numbers was
|
|
extended from 224-239 to 224-255. Accordingly device file names
|
|
``/dev/vbi0`` to ``/dev/vbi31`` are possible now.
|
|
|
|
|
|
V4L2 in Linux 2.6.18
|
|
====================
|
|
|
|
1. New ioctls :ref:`VIDIOC_G_EXT_CTRLS <VIDIOC_G_EXT_CTRLS>`,
|
|
:ref:`VIDIOC_S_EXT_CTRLS <VIDIOC_G_EXT_CTRLS>` and
|
|
:ref:`VIDIOC_TRY_EXT_CTRLS <VIDIOC_G_EXT_CTRLS>` were added, a
|
|
flag to skip unsupported controls with
|
|
:ref:`VIDIOC_QUERYCTRL`, new control types
|
|
``V4L2_CTRL_TYPE_INTEGER64`` and ``V4L2_CTRL_TYPE_CTRL_CLASS``
|
|
(:c:type:`v4l2_ctrl_type`), and new control flags
|
|
``V4L2_CTRL_FLAG_READ_ONLY``, ``V4L2_CTRL_FLAG_UPDATE``,
|
|
``V4L2_CTRL_FLAG_INACTIVE`` and ``V4L2_CTRL_FLAG_SLIDER``
|
|
(:ref:`control-flags`). See :ref:`extended-controls` for details.
|
|
|
|
|
|
V4L2 in Linux 2.6.19
|
|
====================
|
|
|
|
1. In struct :c:type:`v4l2_sliced_vbi_cap` a
|
|
buffer type field was added replacing a reserved field. Note on
|
|
architectures where the size of enum types differs from int types the
|
|
size of the structure changed. The
|
|
:ref:`VIDIOC_G_SLICED_VBI_CAP <VIDIOC_G_SLICED_VBI_CAP>` ioctl
|
|
was redefined from being read-only to write-read. Applications must
|
|
initialize the type field and clear the reserved fields now. These
|
|
changes may *break the compatibility* with older drivers and
|
|
applications.
|
|
|
|
2. The ioctls :ref:`VIDIOC_ENUM_FRAMESIZES`
|
|
and
|
|
:ref:`VIDIOC_ENUM_FRAMEINTERVALS`
|
|
were added.
|
|
|
|
3. A new pixel format ``V4L2_PIX_FMT_RGB444`` (:ref:`rgb-formats`) was
|
|
added.
|
|
|
|
|
|
V4L2 spec erratum 2006-10-12 (Draft 0.17)
|
|
=========================================
|
|
|
|
1. ``V4L2_PIX_FMT_HM12`` (:ref:`reserved-formats`) is a YUV 4:2:0, not
|
|
4:2:2 format.
|
|
|
|
|
|
V4L2 in Linux 2.6.21
|
|
====================
|
|
|
|
1. The ``videodev2.h`` header file is now dual licensed under GNU
|
|
General Public License version two or later, and under a 3-clause
|
|
BSD-style license.
|
|
|
|
|
|
V4L2 in Linux 2.6.22
|
|
====================
|
|
|
|
1. Two new field orders ``V4L2_FIELD_INTERLACED_TB`` and
|
|
``V4L2_FIELD_INTERLACED_BT`` were added. See :c:type:`v4l2_field` for
|
|
details.
|
|
|
|
2. Three new clipping/blending methods with a global or straight or
|
|
inverted local alpha value were added to the video overlay interface.
|
|
See the description of the :ref:`VIDIOC_G_FBUF <VIDIOC_G_FBUF>`
|
|
and :ref:`VIDIOC_S_FBUF <VIDIOC_G_FBUF>` ioctls for details.
|
|
|
|
A new ``global_alpha`` field was added to
|
|
:c:type:`v4l2_window`, extending the structure. This
|
|
may *break compatibility* with applications using a struct
|
|
struct :c:type:`v4l2_window` directly. However the
|
|
:ref:`VIDIOC_G/S/TRY_FMT <VIDIOC_G_FMT>` ioctls, which take a
|
|
pointer to a :c:type:`v4l2_format` parent structure
|
|
with padding bytes at the end, are not affected.
|
|
|
|
3. The format of the ``chromakey`` field in struct
|
|
:c:type:`v4l2_window` changed from "host order RGB32"
|
|
to a pixel value in the same format as the framebuffer. This may
|
|
*break compatibility* with existing applications. Drivers supporting
|
|
the "host order RGB32" format are not known.
|
|
|
|
|
|
V4L2 in Linux 2.6.24
|
|
====================
|
|
|
|
1. The pixel formats ``V4L2_PIX_FMT_PAL8``, ``V4L2_PIX_FMT_YUV444``,
|
|
``V4L2_PIX_FMT_YUV555``, ``V4L2_PIX_FMT_YUV565`` and
|
|
``V4L2_PIX_FMT_YUV32`` were added.
|
|
|
|
|
|
V4L2 in Linux 2.6.25
|
|
====================
|
|
|
|
1. The pixel formats :ref:`V4L2_PIX_FMT_Y16 <V4L2-PIX-FMT-Y16>` and
|
|
:ref:`V4L2_PIX_FMT_SBGGR16 <V4L2-PIX-FMT-SBGGR16>` were added.
|
|
|
|
2. New :ref:`controls <control>` ``V4L2_CID_POWER_LINE_FREQUENCY``,
|
|
``V4L2_CID_HUE_AUTO``, ``V4L2_CID_WHITE_BALANCE_TEMPERATURE``,
|
|
``V4L2_CID_SHARPNESS`` and ``V4L2_CID_BACKLIGHT_COMPENSATION`` were
|
|
added. The controls ``V4L2_CID_BLACK_LEVEL``, ``V4L2_CID_WHITENESS``,
|
|
``V4L2_CID_HCENTER`` and ``V4L2_CID_VCENTER`` were deprecated.
|
|
|
|
3. A :ref:`Camera controls class <camera-controls>` was added, with
|
|
the new controls ``V4L2_CID_EXPOSURE_AUTO``,
|
|
``V4L2_CID_EXPOSURE_ABSOLUTE``, ``V4L2_CID_EXPOSURE_AUTO_PRIORITY``,
|
|
``V4L2_CID_PAN_RELATIVE``, ``V4L2_CID_TILT_RELATIVE``,
|
|
``V4L2_CID_PAN_RESET``, ``V4L2_CID_TILT_RESET``,
|
|
``V4L2_CID_PAN_ABSOLUTE``, ``V4L2_CID_TILT_ABSOLUTE``,
|
|
``V4L2_CID_FOCUS_ABSOLUTE``, ``V4L2_CID_FOCUS_RELATIVE`` and
|
|
``V4L2_CID_FOCUS_AUTO``.
|
|
|
|
4. The ``VIDIOC_G_MPEGCOMP`` and ``VIDIOC_S_MPEGCOMP`` ioctls, which
|
|
were superseded by the :ref:`extended controls <extended-controls>`
|
|
interface in Linux 2.6.18, where finally removed from the
|
|
``videodev2.h`` header file.
|
|
|
|
|
|
V4L2 in Linux 2.6.26
|
|
====================
|
|
|
|
1. The pixel formats ``V4L2_PIX_FMT_Y16`` and ``V4L2_PIX_FMT_SBGGR16``
|
|
were added.
|
|
|
|
2. Added user controls ``V4L2_CID_CHROMA_AGC`` and
|
|
``V4L2_CID_COLOR_KILLER``.
|
|
|
|
|
|
V4L2 in Linux 2.6.27
|
|
====================
|
|
|
|
1. The :ref:`VIDIOC_S_HW_FREQ_SEEK` ioctl
|
|
and the ``V4L2_CAP_HW_FREQ_SEEK`` capability were added.
|
|
|
|
2. The pixel formats ``V4L2_PIX_FMT_YVYU``, ``V4L2_PIX_FMT_PCA501``,
|
|
``V4L2_PIX_FMT_PCA505``, ``V4L2_PIX_FMT_PCA508``,
|
|
``V4L2_PIX_FMT_PCA561``, ``V4L2_PIX_FMT_SGBRG8``,
|
|
``V4L2_PIX_FMT_PAC207`` and ``V4L2_PIX_FMT_PJPG`` were added.
|
|
|
|
|
|
V4L2 in Linux 2.6.28
|
|
====================
|
|
|
|
1. Added ``V4L2_MPEG_AUDIO_ENCODING_AAC`` and
|
|
``V4L2_MPEG_AUDIO_ENCODING_AC3`` MPEG audio encodings.
|
|
|
|
2. Added ``V4L2_MPEG_VIDEO_ENCODING_MPEG_4_AVC`` MPEG video encoding.
|
|
|
|
3. The pixel formats ``V4L2_PIX_FMT_SGRBG10`` and
|
|
``V4L2_PIX_FMT_SGRBG10DPCM8`` were added.
|
|
|
|
|
|
V4L2 in Linux 2.6.29
|
|
====================
|
|
|
|
1. The ``VIDIOC_G_CHIP_IDENT`` ioctl was renamed to
|
|
``VIDIOC_G_CHIP_IDENT_OLD`` and ``VIDIOC_DBG_G_CHIP_IDENT`` was
|
|
introduced in its place. The old struct
|
|
struct ``v4l2_chip_ident`` was renamed to
|
|
struct ``v4l2_chip_ident_old``.
|
|
|
|
2. The pixel formats ``V4L2_PIX_FMT_VYUY``, ``V4L2_PIX_FMT_NV16`` and
|
|
``V4L2_PIX_FMT_NV61`` were added.
|
|
|
|
3. Added camera controls ``V4L2_CID_ZOOM_ABSOLUTE``,
|
|
``V4L2_CID_ZOOM_RELATIVE``, ``V4L2_CID_ZOOM_CONTINUOUS`` and
|
|
``V4L2_CID_PRIVACY``.
|
|
|
|
|
|
V4L2 in Linux 2.6.30
|
|
====================
|
|
|
|
1. New control flag ``V4L2_CTRL_FLAG_WRITE_ONLY`` was added.
|
|
|
|
2. New control ``V4L2_CID_COLORFX`` was added.
|
|
|
|
|
|
V4L2 in Linux 2.6.32
|
|
====================
|
|
|
|
1. In order to be easier to compare a V4L2 API and a kernel version, now
|
|
V4L2 API is numbered using the Linux Kernel version numeration.
|
|
|
|
2. Finalized the RDS capture API. See :ref:`rds` for more information.
|
|
|
|
3. Added new capabilities for modulators and RDS encoders.
|
|
|
|
4. Add description for libv4l API.
|
|
|
|
5. Added support for string controls via new type
|
|
``V4L2_CTRL_TYPE_STRING``.
|
|
|
|
6. Added ``V4L2_CID_BAND_STOP_FILTER`` documentation.
|
|
|
|
7. Added FM Modulator (FM TX) Extended Control Class:
|
|
``V4L2_CTRL_CLASS_FM_TX`` and their Control IDs.
|
|
|
|
8. Added FM Receiver (FM RX) Extended Control Class:
|
|
``V4L2_CTRL_CLASS_FM_RX`` and their Control IDs.
|
|
|
|
9. Added Remote Controller chapter, describing the default Remote
|
|
Controller mapping for media devices.
|
|
|
|
|
|
V4L2 in Linux 2.6.33
|
|
====================
|
|
|
|
1. Added support for Digital Video timings in order to support HDTV
|
|
receivers and transmitters.
|
|
|
|
|
|
V4L2 in Linux 2.6.34
|
|
====================
|
|
|
|
1. Added ``V4L2_CID_IRIS_ABSOLUTE`` and ``V4L2_CID_IRIS_RELATIVE``
|
|
controls to the :ref:`Camera controls class <camera-controls>`.
|
|
|
|
|
|
V4L2 in Linux 2.6.37
|
|
====================
|
|
|
|
1. Remove the vtx (videotext/teletext) API. This API was no longer used
|
|
and no hardware exists to verify the API. Nor were any userspace
|
|
applications found that used it. It was originally scheduled for
|
|
removal in 2.6.35.
|
|
|
|
|
|
V4L2 in Linux 2.6.39
|
|
====================
|
|
|
|
1. The old VIDIOC_*_OLD symbols and V4L1 support were removed.
|
|
|
|
2. Multi-planar API added. Does not affect the compatibility of current
|
|
drivers and applications. See :ref:`multi-planar API <planar-apis>`
|
|
for details.
|
|
|
|
|
|
V4L2 in Linux 3.1
|
|
=================
|
|
|
|
1. VIDIOC_QUERYCAP now returns a per-subsystem version instead of a
|
|
per-driver one.
|
|
|
|
Standardize an error code for invalid ioctl.
|
|
|
|
Added V4L2_CTRL_TYPE_BITMASK.
|
|
|
|
|
|
V4L2 in Linux 3.2
|
|
=================
|
|
|
|
1. V4L2_CTRL_FLAG_VOLATILE was added to signal volatile controls to
|
|
userspace.
|
|
|
|
2. Add selection API for extended control over cropping and composing.
|
|
Does not affect the compatibility of current drivers and
|
|
applications. See :ref:`selection API <selection-api>` for details.
|
|
|
|
|
|
V4L2 in Linux 3.3
|
|
=================
|
|
|
|
1. Added ``V4L2_CID_ALPHA_COMPONENT`` control to the
|
|
:ref:`User controls class <control>`.
|
|
|
|
2. Added the device_caps field to struct v4l2_capabilities and added
|
|
the new V4L2_CAP_DEVICE_CAPS capability.
|
|
|
|
|
|
V4L2 in Linux 3.4
|
|
=================
|
|
|
|
1. Added :ref:`JPEG compression control class <jpeg-controls>`.
|
|
|
|
2. Extended the DV Timings API:
|
|
:ref:`VIDIOC_ENUM_DV_TIMINGS`,
|
|
:ref:`VIDIOC_QUERY_DV_TIMINGS` and
|
|
:ref:`VIDIOC_DV_TIMINGS_CAP`.
|
|
|
|
|
|
V4L2 in Linux 3.5
|
|
=================
|
|
|
|
1. Added integer menus, the new type will be
|
|
V4L2_CTRL_TYPE_INTEGER_MENU.
|
|
|
|
2. Added selection API for V4L2 subdev interface:
|
|
:ref:`VIDIOC_SUBDEV_G_SELECTION` and
|
|
:ref:`VIDIOC_SUBDEV_S_SELECTION <VIDIOC_SUBDEV_G_SELECTION>`.
|
|
|
|
3. Added ``V4L2_COLORFX_ANTIQUE``, ``V4L2_COLORFX_ART_FREEZE``,
|
|
``V4L2_COLORFX_AQUA``, ``V4L2_COLORFX_SILHOUETTE``,
|
|
``V4L2_COLORFX_SOLARIZATION``, ``V4L2_COLORFX_VIVID`` and
|
|
``V4L2_COLORFX_ARBITRARY_CBCR`` menu items to the
|
|
``V4L2_CID_COLORFX`` control.
|
|
|
|
4. Added ``V4L2_CID_COLORFX_CBCR`` control.
|
|
|
|
5. Added camera controls ``V4L2_CID_AUTO_EXPOSURE_BIAS``,
|
|
``V4L2_CID_AUTO_N_PRESET_WHITE_BALANCE``,
|
|
``V4L2_CID_IMAGE_STABILIZATION``, ``V4L2_CID_ISO_SENSITIVITY``,
|
|
``V4L2_CID_ISO_SENSITIVITY_AUTO``, ``V4L2_CID_EXPOSURE_METERING``,
|
|
``V4L2_CID_SCENE_MODE``, ``V4L2_CID_3A_LOCK``,
|
|
``V4L2_CID_AUTO_FOCUS_START``, ``V4L2_CID_AUTO_FOCUS_STOP``,
|
|
``V4L2_CID_AUTO_FOCUS_STATUS`` and ``V4L2_CID_AUTO_FOCUS_RANGE``.
|
|
|
|
|
|
V4L2 in Linux 3.6
|
|
=================
|
|
|
|
1. Replaced ``input`` in struct :c:type:`v4l2_buffer` by
|
|
``reserved2`` and removed ``V4L2_BUF_FLAG_INPUT``.
|
|
|
|
2. Added V4L2_CAP_VIDEO_M2M and V4L2_CAP_VIDEO_M2M_MPLANE
|
|
capabilities.
|
|
|
|
3. Added support for frequency band enumerations:
|
|
:ref:`VIDIOC_ENUM_FREQ_BANDS`.
|
|
|
|
|
|
V4L2 in Linux 3.9
|
|
=================
|
|
|
|
1. Added timestamp types to ``flags`` field in
|
|
struct :c:type:`v4l2_buffer`. See :ref:`buffer-flags`.
|
|
|
|
2. Added ``V4L2_EVENT_CTRL_CH_RANGE`` control event changes flag. See
|
|
:ref:`ctrl-changes-flags`.
|
|
|
|
|
|
V4L2 in Linux 3.10
|
|
==================
|
|
|
|
1. Removed obsolete and unused DV_PRESET ioctls VIDIOC_G_DV_PRESET,
|
|
VIDIOC_S_DV_PRESET, VIDIOC_QUERY_DV_PRESET and
|
|
VIDIOC_ENUM_DV_PRESET. Remove the related v4l2_input/output
|
|
capability flags V4L2_IN_CAP_PRESETS and V4L2_OUT_CAP_PRESETS.
|
|
|
|
2. Added new debugging ioctl
|
|
:ref:`VIDIOC_DBG_G_CHIP_INFO`.
|
|
|
|
|
|
V4L2 in Linux 3.11
|
|
==================
|
|
|
|
1. Remove obsolete ``VIDIOC_DBG_G_CHIP_IDENT`` ioctl.
|
|
|
|
|
|
V4L2 in Linux 3.14
|
|
==================
|
|
|
|
1. In struct :c:type:`v4l2_rect`, the type of ``width`` and
|
|
``height`` fields changed from _s32 to _u32.
|
|
|
|
|
|
V4L2 in Linux 3.15
|
|
==================
|
|
|
|
1. Added Software Defined Radio (SDR) Interface.
|
|
|
|
|
|
V4L2 in Linux 3.16
|
|
==================
|
|
|
|
1. Added event V4L2_EVENT_SOURCE_CHANGE.
|
|
|
|
|
|
V4L2 in Linux 3.17
|
|
==================
|
|
|
|
1. Extended struct :c:type:`v4l2_pix_format`. Added
|
|
format flags.
|
|
|
|
2. Added compound control types and
|
|
:ref:`VIDIOC_QUERY_EXT_CTRL <VIDIOC_QUERYCTRL>`.
|
|
|
|
|
|
V4L2 in Linux 3.18
|
|
==================
|
|
|
|
1. Added ``V4L2_CID_PAN_SPEED`` and ``V4L2_CID_TILT_SPEED`` camera
|
|
controls.
|
|
|
|
|
|
V4L2 in Linux 3.19
|
|
==================
|
|
|
|
1. Rewrote Colorspace chapter, added new enum
|
|
:c:type:`v4l2_ycbcr_encoding` and enum
|
|
:c:type:`v4l2_quantization` fields to struct
|
|
:c:type:`v4l2_pix_format`, struct
|
|
:c:type:`v4l2_pix_format_mplane` and
|
|
struct :c:type:`v4l2_mbus_framefmt`.
|
|
|
|
|
|
V4L2 in Linux 4.4
|
|
=================
|
|
|
|
1. Renamed ``V4L2_TUNER_ADC`` to ``V4L2_TUNER_SDR``. The use of
|
|
``V4L2_TUNER_ADC`` is deprecated now.
|
|
|
|
2. Added ``V4L2_CID_RF_TUNER_RF_GAIN`` RF Tuner control.
|
|
|
|
3. Added transmitter support for Software Defined Radio (SDR) Interface.
|
|
|
|
|
|
.. _other:
|
|
|
|
Relation of V4L2 to other Linux multimedia APIs
|
|
===============================================
|
|
|
|
|
|
.. _xvideo:
|
|
|
|
X Video Extension
|
|
-----------------
|
|
|
|
The X Video Extension (abbreviated XVideo or just Xv) is an extension of
|
|
the X Window system, implemented for example by the XFree86 project. Its
|
|
scope is similar to V4L2, an API to video capture and output devices for
|
|
X clients. Xv allows applications to display live video in a window,
|
|
send window contents to a TV output, and capture or output still images
|
|
in XPixmaps [#f1]_. With their implementation XFree86 makes the extension
|
|
available across many operating systems and architectures.
|
|
|
|
Because the driver is embedded into the X server Xv has a number of
|
|
advantages over the V4L2 :ref:`video overlay interface <overlay>`. The
|
|
driver can easily determine the overlay target, i. e. visible graphics
|
|
memory or off-screen buffers for a destructive overlay. It can program
|
|
the RAMDAC for a non-destructive overlay, scaling or color-keying, or
|
|
the clipping functions of the video capture hardware, always in sync
|
|
with drawing operations or windows moving or changing their stacking
|
|
order.
|
|
|
|
To combine the advantages of Xv and V4L a special Xv driver exists in
|
|
XFree86 and XOrg, just programming any overlay capable Video4Linux
|
|
device it finds. To enable it ``/etc/X11/XF86Config`` must contain these
|
|
lines:
|
|
|
|
::
|
|
|
|
Section "Module"
|
|
Load "v4l"
|
|
EndSection
|
|
|
|
As of XFree86 4.2 this driver still supports only V4L ioctls, however it
|
|
should work just fine with all V4L2 devices through the V4L2
|
|
backward-compatibility layer. Since V4L2 permits multiple opens it is
|
|
possible (if supported by the V4L2 driver) to capture video while an X
|
|
client requested video overlay. Restrictions of simultaneous capturing
|
|
and overlay are discussed in :ref:`overlay` apply.
|
|
|
|
Only marginally related to V4L2, XFree86 extended Xv to support hardware
|
|
YUV to RGB conversion and scaling for faster video playback, and added
|
|
an interface to MPEG-2 decoding hardware. This API is useful to display
|
|
images captured with V4L2 devices.
|
|
|
|
|
|
Digital Video
|
|
-------------
|
|
|
|
V4L2 does not support digital terrestrial, cable or satellite broadcast.
|
|
A separate project aiming at digital receivers exists. You can find its
|
|
homepage at `https://linuxtv.org <https://linuxtv.org>`__. The Linux
|
|
DVB API has no connection to the V4L2 API except that drivers for hybrid
|
|
hardware may support both.
|
|
|
|
|
|
Audio Interfaces
|
|
----------------
|
|
|
|
[to do - OSS/ALSA]
|
|
|
|
|
|
.. _experimental:
|
|
|
|
Experimental API Elements
|
|
=========================
|
|
|
|
The following V4L2 API elements are currently experimental and may
|
|
change in the future.
|
|
|
|
- :ref:`VIDIOC_DBG_G_REGISTER` and
|
|
:ref:`VIDIOC_DBG_S_REGISTER <VIDIOC_DBG_G_REGISTER>` ioctls.
|
|
|
|
- :ref:`VIDIOC_DBG_G_CHIP_INFO` ioctl.
|
|
|
|
|
|
.. _obsolete:
|
|
|
|
Obsolete API Elements
|
|
=====================
|
|
|
|
The following V4L2 API elements were superseded by new interfaces and
|
|
should not be implemented in new drivers.
|
|
|
|
- ``VIDIOC_G_MPEGCOMP`` and ``VIDIOC_S_MPEGCOMP`` ioctls. Use Extended
|
|
Controls, :ref:`extended-controls`.
|
|
|
|
- VIDIOC_G_DV_PRESET, VIDIOC_S_DV_PRESET,
|
|
VIDIOC_ENUM_DV_PRESETS and VIDIOC_QUERY_DV_PRESET ioctls. Use
|
|
the DV Timings API (:ref:`dv-timings`).
|
|
|
|
- ``VIDIOC_SUBDEV_G_CROP`` and ``VIDIOC_SUBDEV_S_CROP`` ioctls. Use
|
|
``VIDIOC_SUBDEV_G_SELECTION`` and ``VIDIOC_SUBDEV_S_SELECTION``,
|
|
:ref:`VIDIOC_SUBDEV_G_SELECTION`.
|
|
|
|
.. [#f1]
|
|
This is not implemented in XFree86.
|