7.53. ioctl VIDIOC_REMOVE_BUFS

7.53.1. 名称

VIDIOC_REMOVE_BUFS - 从队列中移除缓冲区

7.53.2. 概要

VIDIOC_REMOVE_BUFS

int ioctl(int fd, VIDIOC_REMOVE_BUFS, struct v4l2_remove_buffers *argp)

7.53.3. 参数

fd

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

argp

指向结构体 v4l2_remove_buffers 的指针。

7.53.4. 描述

应用程序可以选择调用 ioctl VIDIOC_REMOVE_BUFS ioctl 从队列中移除缓冲区。启用 ioctl VIDIOC_REMOVE_BUFS 必须支持 ioctl VIDIOC_CREATE_BUFS。如果 VIDIOC_REQBUFS()VIDIOC_CREATE_BUFS() 被调用时,队列上设置了 V4L2_BUF_CAP_SUPPORTS_REMOVE_BUFS 功能,则此 ioctl 可用。

type v4l2_remove_buffers
struct v4l2_remove_buffers

__u32

index

要移除的起始缓冲区索引。如果 count == 0,则忽略此字段。

__u32

count

要移除的缓冲区数量,索引从 “index” 到 “index + count - 1”。此范围内的所有缓冲区必须有效且处于 DEQUEUED 状态。 ioctl VIDIOC_REMOVE_BUFS 将始终检查 type` 的有效性,如果无效,则返回 ``EINVAL 错误代码。如果 count 设置为 0,则 ioctl VIDIOC_REMOVE_BUFS 将不执行任何操作并返回 0。

__u32

type

流或缓冲区的类型,这与结构体 v4l2_format type 字段相同。有关有效值,请参阅 v4l2_buf_type

__u32

reserved[13]

为未来的扩展预留的位置。驱动程序和应用程序必须将该数组设置为零。

7.53.5. 返回值

成功时返回 0,失败时返回 -1,并适当地设置 errno 变量。通用错误代码在 通用错误代码 章节中描述。如果发生错误,则不会释放任何缓冲区,并且将返回以下错误代码之一

EBUSY

文件 I/O 正在进行中。范围从 indexindex + count - 1 的一个或多个缓冲区未处于 DEQUEUED 状态。

EINVAL

范围从 indexindex + count - 1 的一个或多个缓冲区在队列中不存在。缓冲区类型(type 字段)无效。