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

TOMOYO Linux Cross Reference
Linux/Documentation/userspace-api/media/v4l/rw.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 ] ~

  1 .. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
  2 .. c:namespace:: V4L
  3 
  4 .. _rw:
  5 
  6 **********
  7 Read/Write
  8 **********
  9 
 10 Input and output devices support the :c:func:`read()` and
 11 :c:func:`write()` function, respectively, when the
 12 ``V4L2_CAP_READWRITE`` flag in the ``capabilities`` field of struct
 13 :c:type:`v4l2_capability` returned by the
 14 :ref:`VIDIOC_QUERYCAP` ioctl is set.
 15 
 16 Drivers may need the CPU to copy the data, but they may also support DMA
 17 to or from user memory, so this I/O method is not necessarily less
 18 efficient than other methods merely exchanging buffer pointers. It is
 19 considered inferior though because no meta-information like frame
 20 counters or timestamps are passed. This information is necessary to
 21 recognize frame dropping and to synchronize with other data streams.
 22 However this is also the simplest I/O method, requiring little or no
 23 setup to exchange data. It permits command line stunts like this (the
 24 vidctrl tool is fictitious):
 25 
 26 .. code-block:: none
 27 
 28     $ vidctrl /dev/video --input=0 --format=YUYV --size=352x288
 29     $ dd if=/dev/video of=myimage.422 bs=202752 count=1
 30 
 31 To read from the device applications use the :c:func:`read()`
 32 function, to write the :c:func:`write()` function. Drivers
 33 must implement one I/O method if they exchange data with applications,
 34 but it need not be this. [#f1]_ When reading or writing is supported, the
 35 driver must also support the :c:func:`select()` and
 36 :c:func:`poll()` function. [#f2]_
 37 
 38 .. [#f1]
 39    It would be desirable if applications could depend on drivers
 40    supporting all I/O interfaces, but as much as the complex memory
 41    mapping I/O can be inadequate for some devices we have no reason to
 42    require this interface, which is most useful for simple applications
 43    capturing still images.
 44 
 45 .. [#f2]
 46    At the driver level :c:func:`select()` and :c:func:`poll()` are
 47    the same, and :c:func:`select()` is too important to be optional.

~ [ 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