camera_module 结构参考
#include < camera_common.h >
数据字段 | |
hw_module_t | 常见的 |
整数(* | get_number_of_cameras )(无效) |
整数(* | get_camera_info )(int camera_id, struct camera_info *info) |
整数(* | set_callbacks )(const camera_module_callbacks_t *callbacks) |
空白(* | get_vendor_tag_ops )(vendor_tag_ops_t *ops) |
整数(* | open_legacy )(const struct hw_module_t *module, const char *id, uint32_t halVersion, struct hw_device_t **device) |
整数(* | set_torch_mode )(const char *camera_id, bool enabled) |
整数(* | 初始化)() |
空白 * | 保留[5] |
详细说明
在文件camera_common.h的第646行定义。
现场文件
摄像头模组的常用方法。这必须是camera_module的第一个成员,因为此结构的用户将在已知hw_module_t引用camera_module的上下文中将 hw_module_t 转换为camera_module指针。
common.methods->open for camera_module的返回值为:
0:成功打开摄像头设备。
-ENODEV:由于内部错误,无法打开相机设备。
-EINVAL:输入参数无效,即 id 无效,和/或模块无效。
-EBUSY:已为此相机 ID 打开相机设备(通过使用此方法或 open_legacy),无论它打开时使用的设备 HAL 版本如何。
-EUSERS:可以同时打开的相机设备的最大数量已经通过此方法或 open_legacy 方法打开。
来自 common.methods->open 的所有其他返回值将被视为 -ENODEV。
在文件camera_common.h的第674行定义。
int(* get_camera_info)(int camera_id, struct camera_info *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() 的相机设备名称只是转换为字符串的数字。也就是说,“0”表示摄像机 ID 0,“1”表示摄像机 ID 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行定义。
无效(* get_vendor_tag_ops)(vendor_tag_ops_t *ops) |
get_vendor_tag_ops:
获取查询供应商扩展元数据标签信息的方法。 HAL 应该填写所有 vendor tag 操作方法,如果没有定义 vendor tag,则保持 ops 不变。
这里使用的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行定义。
整数(*初始化)() |
在里面:
此方法由相机服务在调用任何其他方法之前调用,即在相机 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 设备。例如,如果摄像头模块同时支持 CAMERA_DEVICE_API_VERSION_1_0 和 CAMERA_DEVICE_API_VERSION_3_2 设备 API 用于相同的摄像头 id,则框架可以调用此函数将摄像头设备打开为 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:相机设备已经为此相机 ID 打开(通过使用此方法或 common.methods->open 方法),无论它打开的设备 HAL 版本如何。
-EUSERS:可以同时打开的相机设备的最大数量已经通过此方法或 common.methods->open 方法打开。
在文件camera_common.h的第824行定义。
无效*保留[5] |
在文件camera_common.h的第912行定义。
int(* set_callbacks)(const camera_module_callbacks_t *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:输入参数无效,即回调为空
在文件camera_common.h的第758行定义。
int(* set_torch_mode)(const char *camera_id, bool enabled) |
设置火炬模式:
打开或关闭与给定相机 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()开启一个 flash 单元的手电筒模式时,如果 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行定义。
此结构的文档是从以下文件生成的: