camera2_request_queue_src_ops 结构体参考文档

camera2_request_queue_src_ops 结构体参考文档

#include < camera2.h >

数据字段

int(*  request_count )(const struct camera2_request_queue_src_ops *q)
 
int(*  dequeue_request )(const struct camera2_request_queue_src_ops *q, camera_metadata_t **buffer)
 
int(*  free_request )(const struct camera2_request_queue_src_ops *q, camera_metadata_t *old_buffer)
 

详细说明

请求输入队列协议:

该框架会保留队列及其内容。开始时,队列为空。

  1. 当第一个元数据缓冲区放入队列时,框架会通过调用 notify_request_queue_not_empty() 向设备发送信号。
  2. 收到 notify_request_queue_not_empty 后,设备必须在准备好处理下一个缓冲区后调用 dequeue()。
  3. 设备处理完一个缓冲区并准备好处理下一个缓冲区后,必须再次调用 dequeue(),而不是等待通知。如果没有可用的缓冲区,dequeue() 将返回 NULL。此时,当有缓冲区可用时,框架必须再次调用 notify_request_queue_not_empty()。如果设备从 dequeue 收到 NULL 返回值,则无需再次查询队列,直到从来源收到 notify_request_queue_not_empty() 调用为止。
  4. 如果设备调用 buffer_count() 并收到 0,这并不意味着框架会提供 notify_request_queue_not_empty() 调用。只有在设备从队列中收到 NULL 或在初始启动后,该框架才会提供此类通知。
  5. 响应 notify_request_queue_not_empty() 的 dequeue() 调用可能与 notify_request_queue_not_empty() 调用位于同一线程,并且可以从 notify 调用中执行。
  6. 必须通过调用 free_request 将所有已从队列中移除的请求缓冲区返回给框架,包括在发生错误、请求设备刷新或设备关闭时。

定义位于文件 camera2.h 220 行。

字段文档

int(* dequeue_request)(const struct camera2_request_queue_src_ops *q, camera_metadata_t **buffer)

从框架获取元数据缓冲区。如果没有错误,则返回“OK”。如果队列为空,则在缓冲区中返回 NULL。在这种情况下,设备必须等待 notify_request_queue_not_empty() 消息,然后才能再次尝试从队列中移除请求。以这种方式获取的缓冲区必须使用 free_request() 返回给框架。

定义位于文件 camera2.h 237 行。

int(* free_request)(const struct camera2_request_queue_src_ops *q, camera_metadata_t *old_buffer)

在元数据缓冲区被使用后,或者发生错误或关闭时,将其返回给框架。

定义位于文件 camera2.h 243 行。

int(* request_count)(const struct camera2_request_queue_src_ops *q)

获取队列中待处理的请求缓冲区数量。如果当前配置了重复请求(数据流请求),则可能会返回 CAMERA2_REQUEST_QUEUE_IS_BOTTOMLESS。调用此方法对框架是否会调用 notify_request_queue_not_empty() 方法没有影响。

定义位于文件 camera2.h 228 行。


此结构体的文档是根据以下文件生成的: