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_buffer
的 type
字段设置为与之前 struct v4l2_format
type
和 struct v4l2_requestbuffers
type
使用的相同的缓冲区类型,并设置 index
字段。有效的索引号范围从零到使用 ioctl VIDIOC_REQBUFS 分配的缓冲区数(struct v4l2_requestbuffers
count
)减一。 reserved
和 reserved2
字段必须设置为 0。当使用 多平面 API 时,m.planes
字段必须包含一个指向 struct v4l2_plane
数组的用户空间指针,并且 length
字段必须设置为该数组中的元素数。在调用 ioctl VIDIOC_QUERYBUF 并传入指向此结构的指针后,驱动程序将返回错误代码或填充结构的其余部分。
在 flags
字段中,V4L2_BUF_FLAG_MAPPED
、V4L2_BUF_FLAG_PREPARED
、V4L2_BUF_FLAG_QUEUED
和 V4L2_BUF_FLAG_DONE
标志将有效。 memory
字段将设置为当前的 I/O 方法。对于单平面 API,m.offset
包含缓冲区从设备内存起始位置的偏移量,length
字段表示其大小。对于多平面 API,将使用 m.planes
数组元素中的 m.mem_offset
和 length
字段,并且 struct v4l2_buffer
的 length
字段设置为已填充的数组元素的数量。驱动程序可能会或可能不会设置其余字段和标志,它们在这种情况下没有意义。
struct v4l2_buffer
结构在 缓冲区 中指定。
7.47.5. 返回值¶
成功时返回 0,出错时返回 -1,并适当设置 errno
变量。通用错误代码在 通用错误代码 章节中描述。
- EINVAL
不支持缓冲区
type
,或者index
超出范围。