7.47. ioctl VIDIOC_QUERYBUF

7.47.1. 名称

VIDIOC_QUERYBUF - 查询缓冲区的状态

7.47.2. 概要

VIDIOC_QUERYBUF

int ioctl(int fd, VIDIOC_QUERYBUF, struct v4l2_buffer *argp)

7.47.3. 参数

fd

open() 返回的文件描述符。

argp

指向 struct v4l2_buffer 的指针。

7.47.4. 描述

此 ioctl 是 流式 I/O 方法的一部分。它可以在使用 ioctl VIDIOC_REQBUFS ioctl 分配缓冲区之后,随时用于查询缓冲区的状态。

应用程序将 struct v4l2_buffertype 字段设置为与之前 struct v4l2_format type 和 struct v4l2_requestbuffers type 使用的相同的缓冲区类型,并设置 index 字段。有效的索引号范围从零到使用 ioctl VIDIOC_REQBUFS 分配的缓冲区数(struct v4l2_requestbuffers count)减一。 reservedreserved2 字段必须设置为 0。当使用 多平面 API 时,m.planes 字段必须包含一个指向 struct v4l2_plane 数组的用户空间指针,并且 length 字段必须设置为该数组中的元素数。在调用 ioctl VIDIOC_QUERYBUF 并传入指向此结构的指针后,驱动程序将返回错误代码或填充结构的其余部分。

flags 字段中,V4L2_BUF_FLAG_MAPPEDV4L2_BUF_FLAG_PREPAREDV4L2_BUF_FLAG_QUEUEDV4L2_BUF_FLAG_DONE 标志将有效。 memory 字段将设置为当前的 I/O 方法。对于单平面 API,m.offset 包含缓冲区从设备内存起始位置的偏移量,length 字段表示其大小。对于多平面 API,将使用 m.planes 数组元素中的 m.mem_offsetlength 字段,并且 struct v4l2_bufferlength 字段设置为已填充的数组元素的数量。驱动程序可能会或可能不会设置其余字段和标志,它们在这种情况下没有意义。

struct v4l2_buffer 结构在 缓冲区 中指定。

7.47.5. 返回值

成功时返回 0,出错时返回 -1,并适当设置 errno 变量。通用错误代码在 通用错误代码 章节中描述。

EINVAL

不支持缓冲区 type,或者 index 超出范围。