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