diff options
Diffstat (limited to 'Documentation/media/uapi/v4l/hist-v4l2.rst')
-rw-r--r-- | Documentation/media/uapi/v4l/hist-v4l2.rst | 1374 |
1 files changed, 0 insertions, 1374 deletions
diff --git a/Documentation/media/uapi/v4l/hist-v4l2.rst b/Documentation/media/uapi/v4l/hist-v4l2.rst deleted file mode 100644 index 9e097f34cb74..000000000000 --- a/Documentation/media/uapi/v4l/hist-v4l2.rst +++ /dev/null @@ -1,1374 +0,0 @@ -.. Permission is granted to copy, distribute and/or modify this -.. document under the terms of the GNU Free Documentation License, -.. Version 1.1 or any later version published by the Free Software -.. Foundation, with no Invariant Sections, no Front-Cover Texts -.. and no Back-Cover Texts. A copy of the license is included at -.. Documentation/media/uapi/fdl-appendix.rst. -.. -.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections - -.. _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:`pixfmt-rgb`) 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. |