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 设备可能需要同时获取的缓冲区数量上限。设备同时获取的缓冲区不得超过此值。
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 客户端始终必须先释放重新处理数据流,然后才能释放其所依赖的输出数据流。
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 设备可能需要同时从队列中移除的缓冲区数量上限。设备一次不能取消队列的缓冲区数量超过此值。
int(* construct_default_request)(const struct camera2_device *, int request_template, camera_metadata_t **request) |
int(* dump)(const struct camera2_device *, int fd) |
int(* flush_captures_in_progress)(const struct camera2_device *) |
int(* get_in_progress_count)(const struct camera2_device *) |
int(* get_instance_metadata)(const struct camera2_device *, camera_metadata **instance_metadata) |
int(* get_metadata_vendor_tag_ops)(const struct camera2_device *, vendor_tag_query_ops_t **ops) |
int(* notify_request_queue_not_empty)(const struct camera2_device *) |
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 应在此处检查传入的缓冲区,以确定任何平台专用像素格式信息。
int(* release_reprocess_stream)(const struct camera2_device *, uint32_t stream_id) |
int(* release_stream)(const struct camera2_device *, uint32_t stream_id) |
int(* set_frame_queue_dst_ops)(const struct camera2_device *, const camera2_frame_queue_dst_ops_t *frame_dst_ops) |
int(* set_notify_callback)(const struct camera2_device *, camera2_notify_callback notify_cb, void *user) |
int(* set_request_queue_src_ops)(const struct camera2_device *, const camera2_request_queue_src_ops_t *request_src_ops) |
int(* trigger_action)(const struct camera2_device *, uint32_t trigger_id, int32_t ext1, int32_t ext2) |
此结构体的文档是根据以下文件生成的:
- hardware/libhardware/include/hardware/ camera2.h