camera_info 结构体参考文档
#include <
camera_common.h
>
数据字段 |
|
int | 朝向 |
int | 屏幕方向 |
uint32_t | device_version |
const camera_metadata_t * | static_camera_characteristics |
int | resource_cost |
char ** | conflicting_devices |
size_t | conflicting_devices_length |
详细说明
定义位于文件 camera_common.h 的 161 行 。
字段文档
char** conflicting_devices |
一个相机设备 ID 数组,表示为以 NULL 结尾的字符串,用于指明在使用此相机设备时无法同时打开的其他设备。
此字段旨在指明此摄像头设备是其他几个摄像头设备的复合体,或者存在禁止同时使用的硬件依赖项。如果没有依赖项,此字段中可能会返回 NULL 来指明这一点。
当此摄像头设备处于打开状态时,相机服务绝不会同时打开此列表中的任何设备。
相机服务不会清理此字段中指向的字符串,并且在设备接通电源时,这些字符串必须保持不变。
版本信息(基于 camera_module_t.common.module_api_version):
CAMERA_MODULE_API_VERSION_2_3 或更低:
无效。可以假定为 NULL。请勿读取此字段。
CAMERA_MODULE_API_VERSION_2_4 或更高版本:
始终有效。
定义位于文件 camera_common.h 的 404 行中。
size_t conflicting_devices_length |
conflicting_devices 字段中给出的数组的长度。
版本信息(基于 camera_module_t.common.module_api_version):
CAMERA_MODULE_API_VERSION_2_3 或更低:
无效。可以假定为 0。请勿读取此字段。
CAMERA_MODULE_API_VERSION_2_4 或更高版本:
始终有效。
定义位于文件 camera_common.h 的 419 行。
uint32_t device_version |
camera_device_t.common.version 的值。
版本信息(基于 camera_module_t.common.module_api_version):
CAMERA_MODULE_API_VERSION_1_0:
无效。可以假定为 CAMERA_DEVICE_API_VERSION_1_0。请勿读取此字段。
CAMERA_MODULE_API_VERSION_2_0 或更高版本:
始终有效
定义位于文件 camera_common.h 的 219 行。
int facing |
摄像头朝向的方向。如需了解相机朝向定义,请参阅 system/core/include/system/camera.h。
版本信息(基于 camera_module_t.common.module_api_version):
CAMERA_MODULE_API_VERSION_2_3 或更低:
该值应为 CAMERA_FACING_BACK 或 CAMERA_FACING_FRONT。
CAMERA_MODULE_API_VERSION_2_4 或更高版本:
应为 CAMERA_FACING_BACK、CAMERA_FACING_FRONT 或 CAMERA_FACING_EXTERNAL。
定义位于文件 camera_common.h 的 177 行。
int orientation |
相机图片的方向。此值表示相机图片需要顺时针旋转的角度,以便以自然屏幕方向正确显示在屏幕上。该值应为 0、90、180 或 270。
例如,假设某个设备的屏幕是自然纵向的。后置摄像头传感器的方向为横向。您正在看着屏幕。如果相机传感器的顶部与自然屏幕方向的屏幕右边缘对齐,则此值应为 90。如果前置摄像头传感器的顶部与屏幕的右侧对齐,则此值应为 270。
版本信息(基于 camera_module_t.common.module_api_version):
CAMERA_MODULE_API_VERSION_2_3 或更低:
适用于所有 camera_module 版本。
CAMERA_MODULE_API_VERSION_2_4 或更高版本:
如果摄像头朝向为 CAMERA_FACING_BACK 或 CAMERA_FACING_FRONT,则有效;如果摄像头朝向为 CAMERA_FACING_EXTERNAL,则无效。
定义位于文件 camera_common.h 的 202 行。
int resource_cost |
使用此相机的总资源“开销”,表示为介于 [0, 100] 范围内的整数值,其中 100 表示相机子系统的限制瓶颈共享资源的总用量。这可能是一个非常粗略的估算值,可用作摄像头服务的提示,以确定何时禁止多个应用同时打开摄像头服务所宣传的不同摄像头。
相机服务必须能够同时打开并使用 HAL 公开的任意组合摄像头设备,并且这些摄像头的资源开销总和不超过 100。在确定费用时,必须假定每台摄像头设备都配置为以摄像头元数据中为该设备公开的配置设置中可用的最高资源消耗帧速率和流大小设置运行。
相机服务可能仍会尝试同时打开总资源开销超过 100 的相机设备组合。此操作可能会成功或失败。如果成功,则由于存在多个打开的设备而导致资源受限而无法支持的配置组合应在配置调用期间失败。如果总资源开销小于等于 100,则任何数据流配置设置或其他设备功能都绝不应在设备是唯一处于开启状态的摄像头设备时失败,因为在这种情况下,这些功能通常会成功打开和配置。
此字段将用于确定在其他应用使用其他摄像头设备时,是否允许后台应用使用此摄像头设备。注意:相机服务绝不会允许多个应用同时打开同一相机设备。
应用场景示例:
例如:1:相机设备 0 = 后置摄像头 1 = 前置摄像头
- 由于 ISP 带宽有限,同时使用这两部摄像头设备会导致帧速率大幅下降。
配置:
相机设备 0 - resource_cost = 51 conflicting_devices = null 相机设备 1 - resource_cost = 51 conflicting_devices = null
结果:
由于资源开销总和大于 100,因此如果优先级较高的应用打开了任一设备,相机服务将不允许优先级较低的应用打开任一设备。如果优先级较低的应用正在使用优先级较高的应用随后尝试打开的设备,系统会强制优先级较低的应用断开与设备的连接。
如果优先级最高的应用选择,它可能仍会尝试打开这两部设备(因为这些设备未在 conflicting_devices 字段中列为冲突),但在打开或配置调用中使用这些设备可能会失败。
例如:2:相机设备 0 = 左后置摄像头;相机设备 1 = 右后置摄像头;相机设备 2 = 同时使用设备 0 和设备 1 使用的右后置摄像头传感器的组合立体声相机;相机设备 3 = 前置摄像头
- 由于硬件限制,一次最多只能打开两个摄像头。组合立体摄像头绝不能与两个后置摄像头设备(设备 0、1)同时使用,并且通常需要太多的带宽,无法与前置摄像头(设备 3)同时使用。
配置:
摄像头设备 0 - resource_cost = 50 conflicting_devices = { 2 } 摄像头设备 1 - resource_cost = 50 conflicting_devices = { 2 } 摄像头设备 2 - resource_cost = 100 conflicting_devices = { 0, 1 } 摄像头设备 3 - resource_cost = 50 conflicting_devices = null
结果:
根据 conflicting_devices 字段,相机服务保证绝不会允许以下一组打开的设备:{ 1, 2 }, { 0, 2 }。
根据 resource_cost 字段,如果高优先级前台应用正在使用相机设备 0,则允许后台应用打开相机设备 1 或 3(但如果前台应用打开了其他设备,则会被迫再次断开连接)。
优先级最高的应用可能仍会尝试同时打开设备 0、2 和 3,但 HAL 可能会对此组合失败打开或配置调用。
例如:3:相机设备 0 = 后置摄像头;相机设备 1 = 前置摄像头;相机设备 2 = 低功耗前置摄像头,与设备 1 使用相同的传感器,但仅公开可在低功耗模式下使用的图像流分辨率
-
由于共用物理传感器,因此无法同时使用两个前置摄像头(设备 1、2)。由于硬件限制,某些数据流配置可能无法使用后置摄像头和“高功率”前置摄像头 (device 1),但可以始终使用“低功率”前置摄像头选项,因为它具有专用的特殊硬件。
配置:
摄像头设备 0 - resource_cost = 100 conflicting_devices = null 摄像头设备 1 - resource_cost = 100 conflicting_devices = { 2 } 摄像头设备 2 - resource_cost = 0 conflicting_devices = { 1 } 结果:
根据 conflicting_devices 字段,相机服务保证绝不会允许以下一组打开的设备:{ 1, 2 }。
根据 resource_cost 字段,只有优先级最高的应用才能尝试同时打开设备 0 和设备 1。如果优先级较高的应用未使用设备 1 或 2,则优先级较低的后台应用可能会打开设备 2(但如果优先级较高的应用随后打开设备 1 或 2,则系统会强制断开设备 2 的连接)。
版本信息(基于 camera_module_t.common.module_api_version):
CAMERA_MODULE_API_VERSION_2_3 或更低:
无效。可以假定为 100。请勿读取此字段。
CAMERA_MODULE_API_VERSION_2_4 或更高版本:
始终有效。
定义位于文件 camera_common.h 的 376 行。
const camera_metadata_t * static_camera_characteristics |
相机的固定特性,包括 system/media/camera/docs/docs.html 中指定的所有静态相机元数据。这应为已排序的元数据缓冲区,不得由调用方修改或释放。该指针应在相机模块的生命周期内保持有效,并且在 get_camera_info() 返回该指针后,其中的值不得更改。
版本信息(基于 camera_module_t.common.module_api_version):
CAMERA_MODULE_API_VERSION_1_0:
无效。无法使用额外特征。请勿读取此字段。
CAMERA_MODULE_API_VERSION_2_0 或更高版本:
如果 device_version 大于等于 CAMERA_DEVICE_API_VERSION_2_0,则有效。否则请勿读取。
定义位于文件 camera_common.h 的 241 行。
此结构体的文档是根据以下文件生成的:
- hardware/libhardware/include/hardware/ camera_common.h