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