Google 致力于为黑人社区推动种族平等。查看具体举措

camera_module 结构参考

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行定义。


此结构的文档是从以下文件生成的: