camera3_callback_ops 结构参考
#include < camera3.h >
数据字段 | |
空白(* | process_capture_result )(const structcamera3_callback_ops *, constcamera3_capture_result_t *结果) |
空白(* | 通知)(常量结构camera3_callback_ops *,常量camera3_notify_msg_t * msg) |
详细说明
现场文档
void(* 通知)(const structcamera3_callback_ops *, constcamera3_notify_msg_t *msg) |
通知:
来自 HAL 的异步通知回调,因各种原因而触发。仅适用于与帧捕获无关的信息,或需要特定计时的信息。消息结构的所有权仍然属于 HAL,并且消息只需要在此调用期间有效。
多个线程可以同时调用notify() 。
<= CAMERA_DEVICE_API_VERSION_3_1:
给定请求的暴露开始通知必须由 HAL 在第一次调用该请求的process_capture_result()之前发送。
>= CAMERA_DEVICE_API_VERSION_3_2:
在通过 SHUTTER notification()调用接收到曝光开始时间戳(或重新处理请求的输入图像的曝光开始时间戳)之前,传递到框架的缓冲区不会被分派到应用程序层。强烈建议尽早拨打此电话。
性能要求:
这是一个非阻塞调用。框架将在 5 毫秒内返回此调用。
void(* process_capture_result)(const structcamera3_callback_ops *, constcamera3_capture_result_t *结果) |
进程捕获结果:
将完成的捕获结果发送到框架。 HAL 可能会多次调用process_capture_result()以响应单个捕获请求。例如,一旦可用,就可以在一次调用中返回元数据和低分辨率缓冲区,并在稍后的调用中返回后处理的 JPEG 缓冲区。每个调用必须包含其返回元数据或缓冲区的请求的帧号。
完整结果的一个组成部分(缓冲区或元数据)只能包含在一个 process_capture_result 调用中。即使在产生某些输出的错误的情况下,HAL 也必须为 process_capture_result 调用之一中的每个请求返回每个流的缓冲区以及结果元数据。不允许在没有输出缓冲区或结果元数据的情况下调用process_capture_result() 。
返回单个结果的元数据和缓冲区的顺序并不重要,但给定流的缓冲区必须按 FIFO 顺序返回。因此,流 A 的请求 5 的缓冲区必须始终在流 A 的请求 6 的缓冲区之前返回。这也适用于结果元数据;请求 5 的元数据必须在请求 6 的元数据之前返回。
然而,不同的流是相互独立的,因此流A的请求5的缓冲区可以在流B的请求6的缓冲区之后返回是可以接受和预期的。并且流B的请求6的结果元数据在流A的请求5的缓冲区之前返回是可接受的。
HAL 保留结果结构的所有权,该结构只需要在本次调用期间有效即可访问。框架将在此调用返回之前复制所需的任何内容。
输出缓冲区还不需要被填充;框架将在读取缓冲区数据之前等待流缓冲区释放同步栅栏。因此,即使部分或全部输出缓冲区仍在填充中,HAL 也应尽快调用此方法。 HAL 必须在每个 output_buffers 流缓冲区条目中包含有效的释放同步栅栏,如果该流缓冲区已满,则为 -1。
如果无法为请求构造结果缓冲区,则 HAL 应返回空的元数据缓冲区,但仍提供输出缓冲区及其同步栅栏。此外, notify()必须使用 ERROR_RESULT 消息来调用。
如果输出缓冲区无法填充,则其状态字段必须设置为 STATUS_ERROR。此外, notify()必须使用 ERROR_BUFFER 消息来调用。
如果整个捕获失败,则仍然需要调用此方法将输出缓冲区返回到框架。所有缓冲区状态应为 STATUS_ERROR,并且结果元数据应为空缓冲区。此外, notify()必须使用 ERROR_REQUEST 消息来调用。在这种情况下,不应发送单独的 ERROR_RESULT/ERROR_BUFFER 消息。
性能要求:
这是一个非阻塞调用。框架将在 5 毫秒内返回此调用。
管道延迟(定义见S7)应小于或等于4帧间隔,并且必须小于或等于8帧间隔。
该结构的文档是从以下文件生成的:
- 硬件/libhardware/include/hardware/camera3.h