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

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