Merge git://www.linux-watchdog.org/linux-watchdog
[deliverable/linux.git] / Documentation / media / uapi / v4l / func-read.rst
CommitLineData
5377d91f
MH
1.. -*- coding: utf-8; mode: rst -*-
2
3.. _func-read:
4
5***********
6V4L2 read()
7***********
8
15e7d615 9Name
586027ce 10====
5377d91f 11
586027ce 12v4l2-read - Read from a V4L2 device
5377d91f 13
15e7d615
MCC
14
15Synopsis
5377d91f
MH
16========
17
18.. code-block:: c
19
20 #include <unistd.h>
21
22
b7e67f6c 23.. cpp:function:: ssize_t read( int fd, void *buf, size_t count )
5377d91f 24
586027ce 25
15e7d615 26Arguments
5377d91f
MH
27=========
28
29``fd``
30 File descriptor returned by :ref:`open() <func-open>`.
31
32``buf``
33``count``
34
35
15e7d615 36Description
5377d91f
MH
37===========
38
760c7010 39:ref:`read() <func-read>` attempts to read up to ``count`` bytes from file
5377d91f
MH
40descriptor ``fd`` into the buffer starting at ``buf``. The layout of the
41data in the buffer is discussed in the respective device interface
760c7010 42section, see ##. If ``count`` is zero, :ref:`read() <func-read>` returns zero
5377d91f
MH
43and has no other results. If ``count`` is greater than ``SSIZE_MAX``,
44the result is unspecified. Regardless of the ``count`` value each
760c7010 45:ref:`read() <func-read>` call will provide at most one frame (two fields)
5377d91f
MH
46worth of data.
47
760c7010 48By default :ref:`read() <func-read>` blocks until data becomes available. When
5377d91f 49the ``O_NONBLOCK`` flag was given to the :ref:`open() <func-open>`
cdb4af0f 50function it returns immediately with an ``EAGAIN`` error code when no data
5377d91f
MH
51is available. The :ref:`select() <func-select>` or
52:ref:`poll() <func-poll>` functions can always be used to suspend
53execution until data becomes available. All drivers supporting the
760c7010
MCC
54:ref:`read() <func-read>` function must also support :ref:`select() <func-select>` and
55:ref:`poll() <func-poll>`.
5377d91f
MH
56
57Drivers can implement read functionality in different ways, using a
58single or multiple buffers and discarding the oldest or newest frames
59once the internal buffers are filled.
60
760c7010 61:ref:`read() <func-read>` never returns a "snapshot" of a buffer being filled.
5377d91f
MH
62Using a single buffer the driver will stop capturing when the
63application starts reading the buffer until the read is finished. Thus
64only the period of the vertical blanking interval is available for
65reading, or the capture rate must fall below the nominal frame rate of
66the video standard.
67
760c7010 68The behavior of :ref:`read() <func-read>` when called during the active picture
5377d91f
MH
69period or the vertical blanking separating the top and bottom field
70depends on the discarding policy. A driver discarding the oldest frames
71keeps capturing into an internal buffer, continuously overwriting the
72previously, not read frame, and returns the frame being received at the
760c7010 73time of the :ref:`read() <func-read>` call as soon as it is complete.
5377d91f
MH
74
75A driver discarding the newest frames stops capturing until the next
760c7010 76:ref:`read() <func-read>` call. The frame being received at :ref:`read() <func-read>`
5377d91f
MH
77time is discarded, returning the following frame instead. Again this
78implies a reduction of the capture rate to one half or less of the
79nominal frame rate. An example of this model is the video read mode of
760c7010 80the bttv driver, initiating a DMA to user memory when :ref:`read() <func-read>`
5377d91f
MH
81is called and returning when the DMA finished.
82
83In the multiple buffer model drivers maintain a ring of internal
84buffers, automatically advancing to the next free buffer. This allows
85continuous capturing when the application can empty the buffers fast
86enough. Again, the behavior when the driver runs out of free buffers
87depends on the discarding policy.
88
89Applications can get and set the number of buffers used internally by
4e03cb76 90the driver with the :ref:`VIDIOC_G_PARM <VIDIOC_G_PARM>` and
af4a4d0d 91:ref:`VIDIOC_S_PARM <VIDIOC_G_PARM>` ioctls. They are optional,
5377d91f
MH
92however. The discarding policy is not reported and cannot be changed.
93For minimum requirements see :ref:`devices`.
94
95
15e7d615 96Return Value
5377d91f
MH
97============
98
99On success, the number of bytes read is returned. It is not an error if
100this number is smaller than the number of bytes requested, or the amount
101of data required for one frame. This may happen for example because
760c7010 102:ref:`read() <func-read>` was interrupted by a signal. On error, -1 is
5377d91f
MH
103returned, and the ``errno`` variable is set appropriately. In this case
104the next read will start at the beginning of a new frame. Possible error
105codes are:
106
107EAGAIN
108 Non-blocking I/O has been selected using O_NONBLOCK and no data was
109 immediately available for reading.
110
111EBADF
112 ``fd`` is not a valid file descriptor or is not open for reading, or
113 the process already has the maximum number of files open.
114
115EBUSY
116 The driver does not support multiple read streams and the device is
117 already in use.
118
119EFAULT
120 ``buf`` references an inaccessible memory area.
121
122EINTR
123 The call was interrupted by a signal before any data was read.
124
125EIO
126 I/O error. This indicates some hardware problem or a failure to
127 communicate with a remote device (USB camera etc.).
128
129EINVAL
760c7010 130 The :ref:`read() <func-read>` function is not supported by this driver, not
5377d91f 131 on this device, or generally not on this type of device.
This page took 0.07141 seconds and 5 git commands to generate.