~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/Documentation/userspace-api/media/v4l/libv4l-introduction.rst

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /Documentation/userspace-api/media/v4l/libv4l-introduction.rst (Architecture alpha) and /Documentation/userspace-api/media/v4l/libv4l-introduction.rst (Architecture m68k)


  1 .. SPDX-License-Identifier: GFDL-1.1-no-invari      1 .. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
  2 .. c:namespace:: V4L                                2 .. c:namespace:: V4L
  3                                                     3 
  4 .. _libv4l-introduction:                            4 .. _libv4l-introduction:
  5                                                     5 
  6 ************                                        6 ************
  7 Introduction                                        7 Introduction
  8 ************                                        8 ************
  9                                                     9 
 10 libv4l is a collection of libraries which adds     10 libv4l is a collection of libraries which adds a thin abstraction layer
 11 on top of video4linux2 devices. The purpose of     11 on top of video4linux2 devices. The purpose of this (thin) layer is to
 12 make it easy for application writers to suppor     12 make it easy for application writers to support a wide variety of
 13 devices without having to write separate code      13 devices without having to write separate code for different devices in
 14 the same class.                                    14 the same class.
 15                                                    15 
 16 An example of using libv4l is provided by          16 An example of using libv4l is provided by
 17 :ref:`v4l2grab <v4l2grab-example>`.                17 :ref:`v4l2grab <v4l2grab-example>`.
 18                                                    18 
 19 libv4l consists of 3 different libraries:          19 libv4l consists of 3 different libraries:
 20                                                    20 
 21 libv4lconvert                                      21 libv4lconvert
 22 =============                                      22 =============
 23                                                    23 
 24 libv4lconvert is a library that converts sever     24 libv4lconvert is a library that converts several different pixelformats
 25 found in V4L2 drivers into a few common RGB an     25 found in V4L2 drivers into a few common RGB and YUY formats.
 26                                                    26 
 27 It currently accepts the following V4L2 driver     27 It currently accepts the following V4L2 driver formats:
 28 :ref:`V4L2_PIX_FMT_BGR24 <V4L2-PIX-FMT-BGR24>`     28 :ref:`V4L2_PIX_FMT_BGR24 <V4L2-PIX-FMT-BGR24>`,
 29 :ref:`V4L2_PIX_FMT_NV12_16L16 <V4L2-PIX-FMT-NV     29 :ref:`V4L2_PIX_FMT_NV12_16L16 <V4L2-PIX-FMT-NV12-16L16>`,
 30 :ref:`V4L2_PIX_FMT_JPEG <V4L2-PIX-FMT-JPEG>`,      30 :ref:`V4L2_PIX_FMT_JPEG <V4L2-PIX-FMT-JPEG>`,
 31 :ref:`V4L2_PIX_FMT_MJPEG <V4L2-PIX-FMT-MJPEG>`     31 :ref:`V4L2_PIX_FMT_MJPEG <V4L2-PIX-FMT-MJPEG>`,
 32 :ref:`V4L2_PIX_FMT_MR97310A <V4L2-PIX-FMT-MR97     32 :ref:`V4L2_PIX_FMT_MR97310A <V4L2-PIX-FMT-MR97310A>`,
 33 :ref:`V4L2_PIX_FMT_OV511 <V4L2-PIX-FMT-OV511>`     33 :ref:`V4L2_PIX_FMT_OV511 <V4L2-PIX-FMT-OV511>`,
 34 :ref:`V4L2_PIX_FMT_OV518 <V4L2-PIX-FMT-OV518>`     34 :ref:`V4L2_PIX_FMT_OV518 <V4L2-PIX-FMT-OV518>`,
 35 :ref:`V4L2_PIX_FMT_PAC207 <V4L2-PIX-FMT-PAC207     35 :ref:`V4L2_PIX_FMT_PAC207 <V4L2-PIX-FMT-PAC207>`,
 36 :ref:`V4L2_PIX_FMT_PJPG <V4L2-PIX-FMT-PJPG>`,      36 :ref:`V4L2_PIX_FMT_PJPG <V4L2-PIX-FMT-PJPG>`,
 37 :ref:`V4L2_PIX_FMT_RGB24 <V4L2-PIX-FMT-RGB24>`     37 :ref:`V4L2_PIX_FMT_RGB24 <V4L2-PIX-FMT-RGB24>`,
 38 :ref:`V4L2_PIX_FMT_SBGGR8 <V4L2-PIX-FMT-SBGGR8     38 :ref:`V4L2_PIX_FMT_SBGGR8 <V4L2-PIX-FMT-SBGGR8>`,
 39 :ref:`V4L2_PIX_FMT_SGBRG8 <V4L2-PIX-FMT-SGBRG8     39 :ref:`V4L2_PIX_FMT_SGBRG8 <V4L2-PIX-FMT-SGBRG8>`,
 40 :ref:`V4L2_PIX_FMT_SGRBG8 <V4L2-PIX-FMT-SGRBG8     40 :ref:`V4L2_PIX_FMT_SGRBG8 <V4L2-PIX-FMT-SGRBG8>`,
 41 :ref:`V4L2_PIX_FMT_SN9C10X <V4L2-PIX-FMT-SN9C1     41 :ref:`V4L2_PIX_FMT_SN9C10X <V4L2-PIX-FMT-SN9C10X>`,
 42 :ref:`V4L2_PIX_FMT_SN9C20X_I420 <V4L2-PIX-FMT-     42 :ref:`V4L2_PIX_FMT_SN9C20X_I420 <V4L2-PIX-FMT-SN9C20X-I420>`,
 43 :ref:`V4L2_PIX_FMT_SPCA501 <V4L2-PIX-FMT-SPCA5     43 :ref:`V4L2_PIX_FMT_SPCA501 <V4L2-PIX-FMT-SPCA501>`,
 44 :ref:`V4L2_PIX_FMT_SPCA505 <V4L2-PIX-FMT-SPCA5     44 :ref:`V4L2_PIX_FMT_SPCA505 <V4L2-PIX-FMT-SPCA505>`,
 45 :ref:`V4L2_PIX_FMT_SPCA508 <V4L2-PIX-FMT-SPCA5     45 :ref:`V4L2_PIX_FMT_SPCA508 <V4L2-PIX-FMT-SPCA508>`,
 46 :ref:`V4L2_PIX_FMT_SPCA561 <V4L2-PIX-FMT-SPCA5     46 :ref:`V4L2_PIX_FMT_SPCA561 <V4L2-PIX-FMT-SPCA561>`,
 47 :ref:`V4L2_PIX_FMT_SQ905C <V4L2-PIX-FMT-SQ905C     47 :ref:`V4L2_PIX_FMT_SQ905C <V4L2-PIX-FMT-SQ905C>`,
 48 :ref:`V4L2_PIX_FMT_SRGGB8 <V4L2-PIX-FMT-SRGGB8     48 :ref:`V4L2_PIX_FMT_SRGGB8 <V4L2-PIX-FMT-SRGGB8>`,
 49 :ref:`V4L2_PIX_FMT_UYVY <V4L2-PIX-FMT-UYVY>`,      49 :ref:`V4L2_PIX_FMT_UYVY <V4L2-PIX-FMT-UYVY>`,
 50 :ref:`V4L2_PIX_FMT_YUV420 <V4L2-PIX-FMT-YUV420     50 :ref:`V4L2_PIX_FMT_YUV420 <V4L2-PIX-FMT-YUV420>`,
 51 :ref:`V4L2_PIX_FMT_YUYV <V4L2-PIX-FMT-YUYV>`,      51 :ref:`V4L2_PIX_FMT_YUYV <V4L2-PIX-FMT-YUYV>`,
 52 :ref:`V4L2_PIX_FMT_YVU420 <V4L2-PIX-FMT-YVU420     52 :ref:`V4L2_PIX_FMT_YVU420 <V4L2-PIX-FMT-YVU420>`, and
 53 :ref:`V4L2_PIX_FMT_YVYU <V4L2-PIX-FMT-YVYU>`.      53 :ref:`V4L2_PIX_FMT_YVYU <V4L2-PIX-FMT-YVYU>`.
 54                                                    54 
 55 Later on libv4lconvert was expanded to also be     55 Later on libv4lconvert was expanded to also be able to do various video
 56 processing functions to improve webcam video q     56 processing functions to improve webcam video quality. The video
 57 processing is split in to 2 parts: libv4lconve     57 processing is split in to 2 parts: libv4lconvert/control and
 58 libv4lconvert/processing.                          58 libv4lconvert/processing.
 59                                                    59 
 60 The control part is used to offer video contro     60 The control part is used to offer video controls which can be used to
 61 control the video processing functions made av     61 control the video processing functions made available by
 62 libv4lconvert/processing. These controls are s     62 libv4lconvert/processing. These controls are stored application wide
 63 (until reboot) by using a persistent shared me     63 (until reboot) by using a persistent shared memory object.
 64                                                    64 
 65 libv4lconvert/processing offers the actual vid     65 libv4lconvert/processing offers the actual video processing
 66 functionality.                                     66 functionality.
 67                                                    67 
 68 libv4l1                                            68 libv4l1
 69 =======                                            69 =======
 70                                                    70 
 71 This library offers functions that can be used     71 This library offers functions that can be used to quickly make v4l1
 72 applications work with v4l2 devices. These fun     72 applications work with v4l2 devices. These functions work exactly like
 73 the normal open/close/etc, except that libv4l1     73 the normal open/close/etc, except that libv4l1 does full emulation of
 74 the v4l1 api on top of v4l2 drivers, in case o     74 the v4l1 api on top of v4l2 drivers, in case of v4l1 drivers it will
 75 just pass calls through.                           75 just pass calls through.
 76                                                    76 
 77 Since those functions are emulations of the ol     77 Since those functions are emulations of the old V4L1 API, it shouldn't
 78 be used for new applications.                      78 be used for new applications.
 79                                                    79 
 80 libv4l2                                            80 libv4l2
 81 =======                                            81 =======
 82                                                    82 
 83 This library should be used for all modern V4L     83 This library should be used for all modern V4L2 applications.
 84                                                    84 
 85 It provides handles to call V4L2 open/ioctl/cl     85 It provides handles to call V4L2 open/ioctl/close/poll methods. Instead
 86 of just providing the raw output of the device     86 of just providing the raw output of the device, it enhances the calls in
 87 the sense that it will use libv4lconvert to pr     87 the sense that it will use libv4lconvert to provide more video formats
 88 and to enhance the image quality.                  88 and to enhance the image quality.
 89                                                    89 
 90 In most cases, libv4l2 just passes the calls d     90 In most cases, libv4l2 just passes the calls directly through to the
 91 v4l2 driver, intercepting the calls to             91 v4l2 driver, intercepting the calls to
 92 :ref:`VIDIOC_TRY_FMT <VIDIOC_G_FMT>`,              92 :ref:`VIDIOC_TRY_FMT <VIDIOC_G_FMT>`,
 93 :ref:`VIDIOC_G_FMT <VIDIOC_G_FMT>`,                93 :ref:`VIDIOC_G_FMT <VIDIOC_G_FMT>`,
 94 :ref:`VIDIOC_S_FMT <VIDIOC_G_FMT>`,                94 :ref:`VIDIOC_S_FMT <VIDIOC_G_FMT>`,
 95 :ref:`VIDIOC_ENUM_FRAMESIZES <VIDIOC_ENUM_FRAM     95 :ref:`VIDIOC_ENUM_FRAMESIZES <VIDIOC_ENUM_FRAMESIZES>` and
 96 :ref:`VIDIOC_ENUM_FRAMEINTERVALS <VIDIOC_ENUM_     96 :ref:`VIDIOC_ENUM_FRAMEINTERVALS <VIDIOC_ENUM_FRAMEINTERVALS>` in
 97 order to emulate the formats                       97 order to emulate the formats
 98 :ref:`V4L2_PIX_FMT_BGR24 <V4L2-PIX-FMT-BGR24>`     98 :ref:`V4L2_PIX_FMT_BGR24 <V4L2-PIX-FMT-BGR24>`,
 99 :ref:`V4L2_PIX_FMT_RGB24 <V4L2-PIX-FMT-RGB24>`     99 :ref:`V4L2_PIX_FMT_RGB24 <V4L2-PIX-FMT-RGB24>`,
100 :ref:`V4L2_PIX_FMT_YUV420 <V4L2-PIX-FMT-YUV420    100 :ref:`V4L2_PIX_FMT_YUV420 <V4L2-PIX-FMT-YUV420>`, and
101 :ref:`V4L2_PIX_FMT_YVU420 <V4L2-PIX-FMT-YVU420    101 :ref:`V4L2_PIX_FMT_YVU420 <V4L2-PIX-FMT-YVU420>`, if they aren't
102 available in the driver. :ref:`VIDIOC_ENUM_FMT    102 available in the driver. :ref:`VIDIOC_ENUM_FMT <VIDIOC_ENUM_FMT>`
103 keeps enumerating the hardware supported forma    103 keeps enumerating the hardware supported formats, plus the emulated
104 formats offered by libv4l at the end.             104 formats offered by libv4l at the end.
105                                                   105 
106 .. _libv4l-ops:                                   106 .. _libv4l-ops:
107                                                   107 
108 Libv4l device control functions                   108 Libv4l device control functions
109 -------------------------------                   109 -------------------------------
110                                                   110 
111 The common file operation methods are provided    111 The common file operation methods are provided by libv4l.
112                                                   112 
113 Those functions operate just like the gcc func    113 Those functions operate just like the gcc function ``dup()`` and
114 V4L2 functions                                    114 V4L2 functions
115 :c:func:`open()`, :c:func:`close()`,              115 :c:func:`open()`, :c:func:`close()`,
116 :c:func:`ioctl()`, :c:func:`read()`,              116 :c:func:`ioctl()`, :c:func:`read()`,
117 :c:func:`mmap()` and :c:func:`munmap()`:          117 :c:func:`mmap()` and :c:func:`munmap()`:
118                                                   118 
119 .. c:function:: int v4l2_open(const char *file    119 .. c:function:: int v4l2_open(const char *file, int oflag, ...)
120                                                   120 
121    operates like the :c:func:`open()` function    121    operates like the :c:func:`open()` function.
122                                                   122 
123 .. c:function:: int v4l2_close(int fd)            123 .. c:function:: int v4l2_close(int fd)
124                                                   124 
125    operates like the :c:func:`close()` functio    125    operates like the :c:func:`close()` function.
126                                                   126 
127 .. c:function:: int v4l2_dup(int fd)              127 .. c:function:: int v4l2_dup(int fd)
128                                                   128 
129    operates like the libc ``dup()`` function,     129    operates like the libc ``dup()`` function, duplicating a file handler.
130                                                   130 
131 .. c:function:: int v4l2_ioctl (int fd, unsign    131 .. c:function:: int v4l2_ioctl (int fd, unsigned long int request, ...)
132                                                   132 
133    operates like the :c:func:`ioctl()` functio    133    operates like the :c:func:`ioctl()` function.
134                                                   134 
135 .. c:function:: int v4l2_read (int fd, void* b    135 .. c:function:: int v4l2_read (int fd, void* buffer, size_t n)
136                                                   136 
137    operates like the :c:func:`read()` function    137    operates like the :c:func:`read()` function.
138                                                   138 
139 .. c:function:: void *v4l2_mmap(void *start, s    139 .. c:function:: void *v4l2_mmap(void *start, size_t length, int prot, int flags, int fd, int64_t offset);
140                                                   140 
141    operates like the :c:func:`mmap()` function    141    operates like the :c:func:`mmap()` function.
142                                                   142 
143 .. c:function:: int v4l2_munmap(void *_start,     143 .. c:function:: int v4l2_munmap(void *_start, size_t length);
144                                                   144 
145    operates like the :c:func:`munmap()` functi    145    operates like the :c:func:`munmap()` function.
146                                                   146 
147 Those functions provide additional control:       147 Those functions provide additional control:
148                                                   148 
149 .. c:function:: int v4l2_fd_open(int fd, int v    149 .. c:function:: int v4l2_fd_open(int fd, int v4l2_flags)
150                                                   150 
151    opens an already opened fd for further use     151    opens an already opened fd for further use through v4l2lib and possibly
152    modify libv4l2's default behavior through t    152    modify libv4l2's default behavior through the ``v4l2_flags`` argument.
153    Currently, ``v4l2_flags`` can be ``V4L2_DIS    153    Currently, ``v4l2_flags`` can be ``V4L2_DISABLE_CONVERSION``, to disable
154    format conversion.                             154    format conversion.
155                                                   155 
156 .. c:function:: int v4l2_set_control(int fd, i    156 .. c:function:: int v4l2_set_control(int fd, int cid, int value)
157                                                   157 
158    This function takes a value of 0 - 65535, a    158    This function takes a value of 0 - 65535, and then scales that range to the
159    actual range of the given v4l control id, a    159    actual range of the given v4l control id, and then if the cid exists and is
160    not locked sets the cid to the scaled value    160    not locked sets the cid to the scaled value.
161                                                   161 
162 .. c:function:: int v4l2_get_control(int fd, i    162 .. c:function:: int v4l2_get_control(int fd, int cid)
163                                                   163 
164    This function returns a value of 0 - 65535,    164    This function returns a value of 0 - 65535, scaled to from the actual range
165    of the given v4l control id. when the cid d    165    of the given v4l control id. when the cid does not exist, could not be
166    accessed for some reason, or some error occ    166    accessed for some reason, or some error occurred 0 is returned.
167                                                   167 
168 v4l1compat.so wrapper library                     168 v4l1compat.so wrapper library
169 =============================                     169 =============================
170                                                   170 
171 This library intercepts calls to                  171 This library intercepts calls to
172 :c:func:`open()`, :c:func:`close()`,              172 :c:func:`open()`, :c:func:`close()`,
173 :c:func:`ioctl()`, :c:func:`mmap()` and           173 :c:func:`ioctl()`, :c:func:`mmap()` and
174 :c:func:`munmap()`                                174 :c:func:`munmap()`
175 operations and redirects them to the libv4l co    175 operations and redirects them to the libv4l counterparts, by using
176 ``LD_PRELOAD=/usr/lib/v4l1compat.so``. It also    176 ``LD_PRELOAD=/usr/lib/v4l1compat.so``. It also emulates V4L1 calls via V4L2
177 API.                                              177 API.
178                                                   178 
179 It allows usage of binary legacy applications     179 It allows usage of binary legacy applications that still don't use
180 libv4l.                                           180 libv4l.
                                                      

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php