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
超出范围。