[linux-dvb] V4L2 Bug and/or Bad Docs for VIDIOC_REQBUFS ioctl()
andrzej zaborowski
balrogg at gmail.com
Tue Dec 30 05:56:33 CET 2008
[Forwarding from a coder who wants to be anonymous]
The documentation at:
http://v4l2spec.bytesex.org/spec-single/v4l2.html#VIDIOC-REQBUFS
says that the VIDIOC_REQBUFS ioctl(), used to initiate memory mapping
or user pointer i/o on V4L2 devices, returns a 0 upon success, or a -1
on error, and sets errno to either EBUSY or EINVAL. The code, however,
does not follow this logic.
In /usr/src/linux/drivers/media/video/videobuf-core.c, in the function
int videobuf_reqbufs(struct videobuf_queue *q, \
struct v4l2_requestbuffers *req);
If an error occours, "return -EINVAL" is called. If an error does not
occour, execution reaches the following statement:
retval = __videobuf_mmap_setup(q, count, size, req->memory);
followed by:
req->count = retval;
and:
return retval;
So, the value being returned, upon success, is the value returned from
the call to __videobuf_mmap_setup(). Looking inside the code for this
function, the buffers are setup inside a for() loop, and the last value
of "i" used as a counter for that loop is returned. In other words, the
buffers allocated count is returned.
So, is the documentation wrong ? or is the code wrong ?
More information about the linux-dvb
mailing list