5.13. ioctl MEDIA_REQUEST_IOC_QUEUE

5.13.1. 名称

MEDIA_REQUEST_IOC_QUEUE - 将请求排队

5.13.2. 概要

MEDIA_REQUEST_IOC_QUEUE

int ioctl(int request_fd, MEDIA_REQUEST_IOC_QUEUE)

5.13.3. 参数

request_fd

ioctl MEDIA_IOC_REQUEST_ALLOC 返回的文件描述符。

5.13.4. 描述

如果媒体设备支持 请求,则可以使用此请求 ioctl 来排队先前分配的请求。

如果请求已成功排队,则可以 轮询 文件描述符以等待请求完成。

如果请求之前已排队,则返回 EBUSY。如果请求的内容包含无效或不一致的数据,则可能会返回其他错误,请参见下一节,获取常见错误代码的列表。发生错误时,请求和驱动程序状态均保持不变。

一旦请求被排队,驱动程序必须优雅地处理当请求应用于硬件时发生的错误。例外情况是 EIO 错误,该错误表示一个致命错误,要求应用程序停止流传输以重置硬件状态。

不允许将排队请求与直接排队缓冲区(没有请求)混合使用。如果第一个缓冲区是直接排队的,而您接下来尝试排队请求,或者反之亦然,则将返回 EBUSY

请求必须至少包含一个缓冲区,否则此 ioctl 将返回 ENOENT 错误。

5.13.5. 返回值

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

EBUSY

请求已排队,或者应用程序直接排队了第一个缓冲区,但后来尝试使用请求。不允许混合使用两个 API。

ENOENT

请求不包含任何缓冲区。所有请求都需要至少一个缓冲区。如果在请求中缺少某些必需的配置,也可能会返回此错误。

ENOMEM

为该请求分配内部数据结构时内存不足。

EINVAL

请求具有无效数据。

EIO

硬件处于错误状态。要恢复,应用程序需要停止流传输以重置硬件状态,然后尝试重新启动流传输。