camera3_capture_result 结构体参考

camera3_capture_result 结构体参考文档

#include < camera3.h >

数据字段

uint32_t  frame_number
 
const camera_metadata_t result
 
uint32_t  num_output_buffers
 
const camera3_stream_buffer_t output_buffers
 
const camera3_stream_buffer_t input_buffer
 
uint32_t  partial_result
 

详细说明

camera3_capture_result_t:

相机 HAL 设备单次拍摄/重新处理的结果。系统会使用 process_capture_result() 异步将此数据发送到框架,以响应使用 process_capture_request() 发送到 HAL 的单个捕获请求。HAL 可能会针对每个请求执行多个 process_capture_result() 调用。

每个调用(均具有相同的帧编号)都可能包含输出缓冲区和/或结果元数据的某个子集。为给定帧编号只能提供一次元数据;所有其他调用都必须将结果元数据设为 NULL。

结果结构包含此捕获的输出元数据,以及已/将为此捕获填充的一组输出缓冲区。每个输出缓冲区都可能附带一个释放同步栅栏,框架会在读取之前等待该栅栏,以防缓冲区尚未由 HAL 填充。

>= CAMERA_DEVICE_API_VERSION_3_2:

可以为单个帧编号多次提供元数据。该框架将通过将每个部分结果合并到总结果集中来累积最终结果集。

如果请求中提供了输入缓冲区,HAL 必须在某个 process_capture_result 调用中返回该缓冲区,并且该调用可能只会返回输入缓冲区,而不会返回元数据和输出缓冲区;同步栅栏的处理方式必须与输出缓冲区相同。

性能注意事项:

应用也会立即收到这些部分结果,因此强烈建议您发送部分结果,以便在发送流水线中很早就已知结果之前避免总流水线延迟时间。

一个典型的用例可能是在流水线中途计算自动对焦状态;通过立即将状态发回给框架,我们可以将自动对焦的性能和感知响应速度提高 50%。

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

字段文档

uint32_t frame_number

帧编号是由框架在提交的请求中设置的递增整数,用于唯一标识此捕获。它还用于在发送到 camera3_callback_ops_t.notify() 的异步通知中识别请求。

定义位于文件 camera3.h 2258 行。

const camera3_stream_buffer_t * input_buffer

>= CAMERA_DEVICE_API_VERSION_3_2:

此捕获的输入流缓冲区的句柄。在 HAL 调用 process_capture_result() 时,它可能尚未被使用;框架会等待 HAL 提供的释放同步栅栏,然后再重复使用缓冲区。

HAL 应以与处理 output_buffers 相同的方式处理同步栅栏。

每个请求只能发送一个输入缓冲区。与输出缓冲区类似,HAL 必须维护返回的输入缓冲区的顺序。

性能注意事项:

应尽早返回输入缓冲区。如果 HAL 支持同步栅栏,则可以调用 process_capture_result 将其返回,并适当地设置同步栅栏。如果不支持同步栅栏,则只有在缓冲区被使用时才能返回,这可能需要很长时间;HAL 可能会选择复制此输入缓冲区,以便更快地返回缓冲区。

定义位于文件 camera3.h 2361 行。

uint32_t num_output_buffers

此结果结构中返回的输出缓冲区数量。必须小于或等于匹配的捕获请求的数量。如果此值小于捕获请求中的缓冲区数量,则必须至少再调用一次 process_capture_result(使用相同的 frame_number),以将剩余的输出缓冲区返回给框架。只有当结构包含有效的结果元数据或此结果中返回输入缓冲区时,此值才可能为零。

定义位于文件 camera3.h 2296 行。

const camera3_stream_buffer_t * output_buffers

此捕获的输出数据流缓冲区的句柄。在 HAL 调用 process_capture_result() 时,这些缓冲区可能尚未填充;框架会等待 HAL 提供的释放同步栅栏,然后再读取缓冲区。

HAL 必须将流式缓冲区的释放同步栅栏设置为有效的同步 fd,如果缓冲区已填满,则设置为 -1。

如果 HAL 在处理缓冲区时遇到错误,并且缓冲区未填充,则必须将缓冲区的状态字段设置为 CAMERA3_BUFFER_STATUS_ERROR。如果 HAL 在遇到错误之前未等待获取栅栏,则应将获取栅栏复制到释放栅栏,以允许框架在重复使用缓冲区之前等待栅栏。

必须为所有输出缓冲区将获取栅栏设置为 -1。如果 num_output_buffers 为零,则此值可能为 NULL。在这种情况下,HAL 必须再调用至少一次 process_capture_result 才能提供输出缓冲区。

使用帧的新缓冲区调用 process_capture_result 时,相应串流的所有先前帧的缓冲区都必须已传送(无需发出栅栏信号)。

>= CAMERA_DEVICE_API_VERSION_3_2:

帧的 Gralloc 缓冲区可能会在相应的 SHUTTER-notify 之前发送到框架。

性能注意事项:

只有在通过 SHUTTER notify() 调用收到曝光开始时间戳后,才会将传送给框架的缓冲区分派到应用层。强烈建议尽早调度该调用。

定义位于文件 camera3.h 2335 行。

uint32_t partial_result

>= CAMERA_DEVICE_API_VERSION_3_2:

为了充分利用部分结果,HAL 必须将静态元数据 android.request.partialResultCount 设置为它将为每个帧发送的部分结果的数量。

包含部分结果的每个新拍摄结果都必须将此字段 (partial_result) 设置为介于 1 和 android.request.partialResultCount 之间的一个不重复的值。

如果 HAL 不想利用此功能,则不得将 android.request.partialResultCount 或 partial_result 设置为 1 以外的值。

如果捕获结果仅包含缓冲区,不包含元数据,则必须将此值设为 0。

定义位于文件 camera3.h 2381 行。

const camera_metadata_t * result

此捕获的结果元数据。其中包含有关最终拍摄参数、拍摄和后处理硬件的状态、3A 算法(如果已启用)的状态以及所有已启用的统计单元的输出的信息。

只有一次对 process_capture_result() 的调用(使用给定的 frame_number)可以包含结果元数据。针对同一 frame_number 的所有其他调用都必须将此值设为 NULL。

如果生成结果元数据时发生错误,则 result 必须为空元数据缓冲区,并且必须使用 ERROR_RESULT 调用 notify()。

>= CAMERA_DEVICE_API_VERSION_3_2:

使用给定 frame_number 多次调用 process_capture_result() 可能会包含结果元数据。

提交的部分元数据不应包含之前针对给定帧返回的任何部分结果中的元数据键。该帧的每个新部分结果还必须设置一个不同的 partial_result 值。

如果已使用 ERROR_RESULT 调用 notify,则框架会忽略该帧的所有其他部分结果。

定义位于文件 camera3.h 2285 行。


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