camera2_device_ops 结构体参考文档

camera2_device_ops 结构体参考文档

#include < camera2.h >

数据字段

int(*  set_request_queue_src_ops )(const struct camera2_device *, const camera2_request_queue_src_ops_t *request_src_ops)
 
int(*  notify_request_queue_not_empty )(const struct camera2_device *)
 
int(*  set_frame_queue_dst_ops )(const struct camera2_device *, const camera2_frame_queue_dst_ops_t *frame_dst_ops)
 
int(*  get_in_progress_count )(const struct camera2_device *)
 
int(*  flush_captures_in_progress )(const struct camera2_device *)
 
int(*  construct_default_request )(const struct camera2_device *, int request_template, camera_metadata_t **request)
 
int(*  allocate_stream )(const struct camera2_device *, uint32_t width, uint32_t height, int format, const camera2_stream_ops_t *stream_ops, uint32_t *stream_id, uint32_t *format_actual, uint32_t *usage, uint32_t *max_buffers)
 
int(*  register_stream_buffers )(const struct camera2_device *, uint32_t stream_id, int num_buffers, buffer_handle_t *buffers)
 
int(*  release_stream )(const struct camera2_device *, uint32_t stream_id)
 
int(*  allocate_reprocess_stream )(const struct camera2_device *, uint32_t width, uint32_t height, uint32_t format, const camera2_stream_in_ops_t *reprocess_stream_ops, uint32_t *stream_id, uint32_t *consumer_usage, uint32_t *max_buffers)
 
int(*  allocate_reprocess_stream_from_stream )(const struct camera2_device *, uint32_t output_stream_id, const camera2_stream_in_ops_t *reprocess_stream_ops, uint32_t *stream_id)
 
int(*  release_reprocess_stream )(const struct camera2_device *, uint32_t stream_id)
 
int(*  trigger_action )(const struct camera2_device *, uint32_t trigger_id, int32_t ext1, int32_t ext2)
 
int(*  set_notify_callback )(const struct camera2_device *, camera2_notify_callback notify_cb, void *user)
 
int(*  get_metadata_vendor_tag_ops )(const struct camera2_device *, vendor_tag_query_ops_t **ops)
 
int(*  dump )(const struct camera2_device *, int fd)
 
int(*  get_instance_metadata )(const struct camera2_device *, camera_metadata **instance_metadata)
 

详细说明

定义位于文件 camera2.h 的第 527 行。

字段文档

int(* allocate_reprocess_stream)(const struct camera2_device *, uint32_t width, uint32_t height, uint32_t format, const camera2_stream_in_ops_t *reprocess_stream_ops,uint32_t *stream_id, uint32_t *consumer_usage, uint32_t *max_buffers)

allocate_reprocess_stream:

分配一个新的输入流以供使用,该输入流由输出缓冲区宽度、高度和像素格式定义。成功时,返回新串流的 ID、gralloc 用法标志和所需的并发可获取缓冲区数量。错误情况:

  • 请求的宽度/高度/格式组合未列为传感器静态特性支持的组合
  • 请求一次配置的重新处理流过多。

输入参数:

  • width、height、format:要通过此数据流发送的缓冲区的规范。格式必须是 HAL_PIXEL_FORMAT_* 列表中的值。
  • reprocess_stream_ops:用于获取和释放此串流的缓冲区的函数指针结构。系统会根据使用情况和 max_buffers 输出配置底层数据流。

输出参数:

  • stream_id:用于标识此数据流的无符号整数。此值用于在传入请求中标识数据流,以及在发布数据流时使用。这些 ID 的编号与输入串流 ID 不同。
  • consumer_usage:HAL 设备消耗请求类型数据所需的 gralloc 使用情况掩码。用于为流缓冲区队列分配新的 gralloc 缓冲区。
  • max_buffers:HAL 设备可能需要同时获取的缓冲区数量上限。设备同时获取的缓冲区不得超过此值。

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

int(* allocate_reprocess_stream_from_stream)(const struct camera2_device *, uint32_t output_stream_id, const camera2_stream_in_ops_t *reprocess_stream_ops,uint32_t *stream_id)

allocate_reprocess_stream_from_stream:

分配一个新的输入流供使用,该输入流将使用为现有输出流分配的缓冲区。也就是说,HAL 将缓冲区加入输出流队列后,可能会看到从此输入重新处理流传递给它的同一缓冲区。HAL 将缓冲区释放回重新处理流后,系统会将其返回到输出队列以供重复使用。

错误情况:

  • 使用大小/格式不适合作为重新处理流基础的输出流。
  • 尝试一次性分配过多的重新处理流。

输入参数:

  • output_stream_id:大小和格式适合重新处理的现有输出流的 ID。
  • reprocess_stream_ops:用于获取和释放此串流的缓冲区的函数指针结构。底层流将使用与输出流相同的图形缓冲区句柄。

输出参数:

  • stream_id:用于标识此数据流的无符号整数。此值用于在传入请求中标识数据流,以及在发布数据流时使用。这些 ID 的编号与输入串流 ID 不同。

HAL 客户端始终必须先释放重新处理数据流,然后才能释放其所依赖的输出数据流。

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

int(* allocate_stream)(const struct camera2_device *,uint32_t width, uint32_t height, int format, const camera2_stream_ops_t *stream_ops,uint32_t *stream_id, uint32_t *format_actual,uint32_t *usage, uint32_t *max_buffers)

allocate_stream:

分配一个新的输出流以供使用,该输出流由输出缓冲区宽度、高度、目标和可能的像素格式定义。成功时,返回新串流的 ID、gralloc 使用标志、最小队列缓冲区计数,以及可能的像素格式。错误情况:

  • 请求的宽度/高度/格式组合未列为传感器静态特性支持的组合
  • 请求的给定格式类型的流过多(例如 2 个 Bayer 原始流)。

输入参数:

  • width、height、format:要通过此数据流发送的缓冲区的规范。格式是 HAL_PIXEL_FORMAT_* 列表中的值。如果使用 HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED,则平台 gralloc 模块将根据相机 HAL 和数据流使用方提供的使用标志选择格式。相机 HAL 应检查在 register_stream_buffers 调用中传递给它的缓冲区,以便根据需要获取特定于实现的格式。
  • stream_ops:一个函数指针结构,用于获取此数据流的缓冲区并将其加入队列。系统会根据使用情况和 max_buffers 输出配置底层数据流。在 allocate_stream 返回之前,不得调用此结构中的方法。

输出参数:

  • stream_id:用于标识此数据流的无符号整数。此值用于在传入请求中标识数据流,以及在发布数据流时。
  • usage:HAL 设备生成请求类型数据所需的 gralloc 用量掩码。用于为流缓冲区队列分配新的 gralloc 缓冲区。
  • max_buffers:HAL 设备可能需要同时从队列中移除的缓冲区数量上限。设备一次不能取消队列的缓冲区数量超过此值。

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

int(* construct_default_request)(const struct camera2_device *, int request_template, camera_metadata_t **request)

为标准相机用例创建已填充的默认请求。

设备必须返回配置为满足请求的用例(必须是 CAMERA2_TEMPLATE_* 枚举之一)的完整请求。必须包含所有请求控制字段,但 android.request.outputStreams 除外。

必须使用 allocate_camera_metadata 分配返回的元数据缓冲区。框架会获得缓冲区的所有权。

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

int(* dump)(const struct camera2_device *, int fd)

转储相机硬件的状态

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

int(* flush_captures_in_progress)(const struct camera2_device *)

刷新所有正在进行的捕获。这包括尚未将任何输出放入流或帧队列的所有已从队列中移除的请求(常规请求或重新处理请求)。部分完成的拍摄必须正常完成。在刷新完成之前,不得从请求队列中移除任何新请求。

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

int(* get_in_progress_count)(const struct camera2_device *)

设备当前正在处理的相机请求数量(请求已从队列中移除,但尚未加入输出流水线的捕获/重新处理)。在处理中请求数量为 0 之前,框架不得释放任何串流。

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

int(* get_instance_metadata)(const struct camera2_device *, camera_metadata **instance_metadata)

获取特定于设备实例的元数据。对于相机设备的单个实例,此元数据必须是常量,但在 open() 调用之间可能会有所不同。在调用 device close() 方法之前,返回的 camera_metadata 指针必须有效。

版本信息:

CAMERA_DEVICE_API_VERSION_2_0:

不可用。框架可能无法访问此函数指针。

CAMERA_DEVICE_API_VERSION_2_1:

有效。可由框架调用。

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

int(* get_metadata_vendor_tag_ops)(const struct camera2_device *, vendor_tag_query_ops_t **ops)

获取用于查询供应商扩展元数据标记信息的方法。如果未定义任何供应商扩展标记,则可以将 ops 设置为 NULL。

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

int(* notify_request_queue_not_empty)(const struct camera2_device *)

通知设备请求队列不再为空。仅当第一个缓冲区添加到新队列时,或来源在响应 dequeue 调用后返回 NULL 时,才应调用此方法。

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

int(* register_stream_buffers)(const struct camera2_device *, uint32_t stream_id, int num_buffers, buffer_handle_t *buffers)

为给定数据流注册缓冲区。此方法会在成功调用 allocate_stream 之后、将引用该数据流的第一个请求加入队列之前调用。此方法旨在允许 HAL 设备映射或以其他方式准备缓冲区以供日后使用。num_buffers 保证至少为 max_buffers(来自 allocate_stream),但可以更大。缓冲区将已锁定以供使用。调用结束时,所有缓冲区都必须准备好返回队列。如果将数据流格式设置为 HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED,相机 HAL 应在此处检查传入的缓冲区,以确定任何平台专用像素格式信息。

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

int(* release_reprocess_stream)(const struct camera2_device *, uint32_t stream_id)

发布重新处理数据流。如果在 get_in_progress_count 不为零或串流 ID 无效时调用,则会返回错误。

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

int(* release_stream)(const struct camera2_device *, uint32_t stream_id)

释放数据流。如果在 get_in_progress_count 不为零时调用,或者如果串流 ID 无效,则会返回错误。

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

int(* set_frame_queue_dst_ops)(const struct camera2_device *, const camera2_frame_queue_dst_ops_t *frame_dst_ops)

传入输出帧队列接口方法

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

int(* set_notify_callback)(const struct camera2_device *, camera2_notify_callback notify_cb, void *user)

通知回调设置

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

int(* set_request_queue_src_ops)(const struct camera2_device *, const camera2_request_queue_src_ops_t *request_src_ops)

传入输入请求队列接口方法。

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

int(* trigger_action)(const struct camera2_device *, uint32_t trigger_id, int32_t ext1, int32_t ext2)

触发异步 activity。这用于在相机 3A 例程使用时触发其特殊行为。如需详细了解触发器 ID 及其参数,请参阅上文中 CAMERA2_TRIGGER_* 的相关文档。

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


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