camera_module 结构体参考文档
#include <
camera_common.h
>
数据字段 |
|
hw_module_t | 常见 |
int(* | get_number_of_cameras )(void) |
int(* | get_camera_info )(int camera_id, struct camera_info *info) |
int(* | set_callbacks )(const camera_module_callbacks_t *callbacks) |
void(* | get_vendor_tag_ops )(vendor_tag_ops_t *ops) |
int(* | open_legacy )(const struct hw_module_t *module, const char *id, uint32_t halVersion, struct hw_device_t **device) |
int(* | set_torch_mode )(const char *camera_id, bool enabled) |
int(* | init )() |
void * | 预留 [5] |
详细说明
定义位于文件 camera_common.h 的第 646 行。
字段文档
hw_module_t common |
相机模块的常用方法。此 必须 是 camera_module 的第一个成员,因为此结构的用户会在已知 hw_module_t 引用 camera_module 的情况下,将 hw_module_t 转换为 camera_module 指针。
camera_module 的 common.methods->open 的返回值如下:
0:成功打开相机设备时。
-ENODEV:由于内部错误,无法打开相机设备。
-EINVAL:输入参数无效,即 ID 无效,和/或模块无效。
-EBUSY:无论相机设备以何种设备 HAL 版本打开,系统都已为此相机 ID 打开相机设备(使用此方法或 open_legacy)。
-EUSERS:可以同时打开的相机设备的数量上限已被使用,无论是通过此方法还是通过 open_legacy 方法。
common.methods->open 中的所有其他返回值都将被视为 -ENODEV。
定义位于文件 camera_common.h 的 674 行。
int(* get_camera_info)(int camera_id, struct camera_info *info) |
get_camera_info:
返回给定相机设备的静态相机信息。摄像头设备的此信息可能不会发生变化。
返回值:
0:操作成功时
-ENODEV:由于内部错误,无法提供信息。
-EINVAL:输入参数无效,即 ID 无效,和/或模块无效。
版本信息(基于 camera_module_t.common.module_api_version):
CAMERA_MODULE_API_VERSION_2_4 或更高版本:
当摄像头断开连接时,其相机 ID 会失效。使用此无效相机 ID 调用此方法将会得到 -EINVAL 和 NULL 相机静态元数据 ( camera_info.static_camera_characteristics )。
定义位于文件 camera_common.h 的 727 行。
int(* get_number_of_cameras)(void) |
get_number_of_cameras:
返回可通过相机模块访问的相机设备数量。摄像头设备的编号为 0 到 N-1,其中 N 是此调用返回的值。open() 的摄像头设备名称只是将数字转换为字符串。即,相机 ID 为 0 时为“0”,相机 ID 为 1 时为“1”。
版本信息(基于 camera_module_t.common.module_api_version):
CAMERA_MODULE_API_VERSION_2_3 或更低:
此处的值必须是静态的,并且在首次调用此方法后不得更改。
CAMERA_MODULE_API_VERSION_2_4 或更高版本:
此处的值必须是静态值,并且必须仅统计具有 CAMERA_FACING_BACK 或 CAMERA_FACING_FRONT 相机朝向值 ( camera_info.facing ) 的内置摄像头。HAL 不得将外置摄像头 ( camera_info.facing == CAMERA_FACING_EXTERNAL) 包含在此调用的返回值中。框架将使用 camera_device_status_change 回调来管理外接摄像头的数量。
定义位于文件 camera_common.h 的 701 行。
void(* get_vendor_tag_ops)(vendor_tag_ops_t *ops) |
get_vendor_tag_ops:
获取方法以查询供应商扩展元数据标签信息。HAL 应填充所有供应商标记操作方法,如果未定义任何供应商标记,则应让操作保持不变。
此处使用的 vendor_tag_ops 结构在以下文件中定义:system/media/camera/include/system/vendor_tags.h
版本信息(基于 camera_module_t.common.module_api_version):
CAMERA_MODULE_API_VERSION_1_x/2_0/2_1:HAL 模块未提供。框架可能无法调用此函数。
CAMERA_MODULE_API_VERSION_2_2:可供框架调用。
定义位于文件 camera_common.h 的 778 行。
int(* init)() |
init:
相机服务会在成功加载相机 HAL 库后立即调用此方法,并在调用任何其他方法之前调用此方法。如果不需要初始化,HAL 模块可能会将其保留为 NULL。
HAL 实现可以使用它来执行初始化和其他一次性操作。
版本信息(基于 camera_module_t.common.module_api_version):
CAMERA_MODULE_API_VERSION_1_x/2_0/2_1/2_2/2_3:HAL 模块未提供。框架不会调用此函数。
CAMERA_MODULE_API_VERSION_2_4:如果不为 NULL,框架会在加载 HAL 模块后(在调用任何其他 HAL 模块方法之前)始终调用一次。
返回值:
0:操作成功。
-ENODEV:由于内部错误,无法完成初始化。必须假定 HAL 处于非功能状态。
定义位于文件 camera_common.h 的 909 行。
int(* open_legacy)(const struct hw_module_t *module, const char *id, uint32_t halVersion, struct hw_device_t **device) |
open_legacy:
如果此相机 HAL 模块支持多个设备 HAL API 版本,则打开特定的旧版相机 HAL 设备。例如,如果相机模块针对同一相机 ID 同时支持 CAMERA_DEVICE_API_VERSION_1_0 和 CAMERA_DEVICE_API_VERSION_3_2 设备 API,框架可以调用此函数以将相机设备打开为 CAMERA_DEVICE_API_VERSION_1_0 设备。
这是一种可选方法。相机 HAL 模块不需要针对每部设备支持多个设备 HAL 版本,并且此类模块可能会针对对此方法的所有调用返回 -ENOSYS。对于所有不受支持的旧版 HAL 设备 API 版本,它可能会返回 -EOPNOTSUPP。当发生上述情况时,框架将改用常规的 open() 方法 (common.methods->open)。
版本信息(基于 camera_module_t.common.module_api_version):
CAMERA_MODULE_API_VERSION_1_x/2_0/2_1/2_2:HAL 模块未提供。框架不会调用此函数。
CAMERA_MODULE_API_VERSION_2_3:可供框架调用。
返回值:
0:成功打开相机设备时。
-ENOSYS 不支持此方法。
-EOPNOTSUPP:此方法不支持请求的 HAL 版本。
-EINVAL:输入参数无效,即 ID 无效,和/或模块无效。
-EBUSY:无论相机设备以何种设备 HAL 版本打开,系统都已为此相机 ID 打开相机设备(使用此方法或 common.methods->open 方法)。
-EUSERS:可以同时打开的相机设备的数量上限已被使用,可能是通过此方法或 common.methods->open 方法打开的。
定义位于文件 camera_common.h 的 824 行。
void* reserved[5] |
定义位于文件 camera_common.h 的 912 行。
int(* set_callbacks)(const camera_module_callbacks_t *callbacks) |
set_callbacks:
向 HAL 模块提供回调函数指针,以便通知框架异步相机模块事件。框架会在初始相机 HAL 模块加载后、首次调用 get_number_of_cameras() 方法后,以及在对模块进行任何其他调用之前调用此函数一次。
版本信息(基于 camera_module_t.common.module_api_version):
CAMERA_MODULE_API_VERSION_1_0、CAMERA_MODULE_API_VERSION_2_0:
由 HAL 模块提供。框架可能无法调用此函数。
CAMERA_MODULE_API_VERSION_2_1:
可供框架调用。
返回值:
0:操作成功时
-ENODEV:由于内部错误,无法完成操作。
-EINVAL:输入参数无效,即回调为 null
定义位于文件 camera_common.h 的 758 行。
int(* set_torch_mode)(const char *camera_id, bool enabled) |
set_torch_mode:
开启或关闭与给定相机 ID 关联的闪光灯元件的手电筒模式。如果操作成功,HAL 必须使用新状态调用 camera_module_callbacks.torch_mode_status_change() ,以通知框架手电筒状态。
相机设备对闪光灯元件的访问优先级更高。当出现任何资源冲突时(例如调用 open() 以打开相机设备),HAL 模块必须通过 camera_module_callbacks.torch_mode_status_change() 通知框架手电筒模式已关闭,并且手电筒模式状态已变为 TORCH_MODE_STATUS_NOT_AVAILABLE。当用于开启手电筒模式的资源再次可用时,HAL 模块必须通过 camera_module_callbacks.torch_mode_status_change() 通知框架手电筒模式状态已变为 TORCH_MODE_STATUS_AVAILABLE_OFF,以便调用 set_torch_mode() 。
当框架调用 set_torch_mode() 来开启闪光灯单元的手电筒模式时,如果 HAL 无法同时保持多个手电筒模式处于开启状态,则 HAL 应关闭之前通过 set_torch_mode() 调用开启的手电筒模式,并通知框架该闪光灯单元的手电筒模式状态已变为 TORCH_MODE_STATUS_AVAILABLE_OFF。
版本信息(基于 camera_module_t.common.module_api_version):
CAMERA_MODULE_API_VERSION_1_x/2_0/2_1/2_2/2_3:HAL 模块未提供。框架不会调用此函数。
CAMERA_MODULE_API_VERSION_2_4:可供框架调用。
返回值:
0:操作成功。
-ENOSYS:相机设备不支持此操作。仅当 android.flash.info.available 为 false 时才会返回此值。
-EBUSY:相机设备已被使用。
-EUSERS:无法使用开启手电筒模式所需的资源,通常是因为其他相机设备占用了这些资源,导致无法使用闪光灯。
-EINVAL:camera_id 无效。
定义位于文件 camera_common.h 的 878 行。
此结构体的文档是根据以下文件生成的:
- hardware/libhardware/include/hardware/ camera_common.h