camera_module 结构体参考文档

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

字段文档

相机模块的常用方法。此 必须 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 行。


此结构体的文档是根据以下文件生成的: