camera3_callback_ops 结构参考

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)

详细说明

定义位于文件camera3.h的第2397行。

现场文档

通知:

来自 HAL 的异步通知回调,因各种原因而触发。仅适用于与帧捕获无关的信息,或需要特定计时的信息。消息结构的所有权仍然属于 HAL,并且消息只需要在此调用期间有效。

多个线程可以同时调用notify()

<= CAMERA_DEVICE_API_VERSION_3_1:

给定请求的暴露开始通知必须由 HAL 在第一次调用该请求的process_capture_result()之前发送。

>= CAMERA_DEVICE_API_VERSION_3_2:

在通过 SHUTTER notification()调用接收到曝光开始时间戳(或重新处理请求的输入图像的曝光开始时间戳)之前,传递到框架的缓冲区不会被分派到应用程序层。强烈建议尽早拨打此电话。


性能要求:

这是一个非阻塞调用。框架将在 5 毫秒内返回此调用。

定义位于文件camera3.h的第2499行。

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帧间隔。

定义位于文件camera3.h的第2466行。


该结构的文档是从以下文件生成的:
  • 硬件/libhardware/include/hardware/camera3.h