Android Camera--hw_get_module获取camx模块接口_hw_module_exists

本文解析了Android系统中HAL(HardwareAbstractionLayer)的加载过程,重点介绍了通过hw_get_module接口如何获取并初始化Camera模块,以及涉及到的cameraserver和provider进程的交互和HIDL的使用情况。
摘要由CSDN通过智能技术生成

问题来了,Android中的HAL是比较具有通用性的,需要上层的函数对其进行加载调用,Android的

HAL加载器是如何实现对不同的Hardware Module进行通用性的调用的呢?

带着这个疑问查看Android源码,会发现Android中实现调用HAL是通过hw_get_module实现的。

1.Camera 服务启动流程概览

cameraserver 与 provider 这两个进程启动、初始化的调用逻辑,如下图

总体逻辑顺序:
 
provider 进程启动,注册;

cameraserver 进程启动,注册,初始化;

cameraserver 获取远端 provider(此时实例化 CameraProvider 并初始化)。

上图中,实线箭头是调用关系。左边是 cameraserver 进程中的动作,右边则是 provider 进程中的

动作,它们之间通过 ICameraProvider 联系在了一起,而这个东西与 HIDL 相关,我们可以不用关

心它的实现方式。

由图可见:

Cameraserver 一侧,Cameraservice 类依旧是主体。它通过 CameraProviderManager 来管理对

CameraProvider 的操作。此处初始化的最终目的是连接上 CameraProvider。

provider 一侧,最终主体是 CameraProvider。初始化最终目的是得到一个 mModule(Camera 模

块),通过它可以直接与 HAL 接口定义层进行交互。

2.获取camx模块接口

路径:android\hardware\interfaces\camera\provider\2.4\default\LegacyCameraProviderImpl_2_4.cpp

通过hw_get_module接口获取camera模块入口结构体。

#define CAMERA_HARDWARE_MODULE_ID "camera"

step1

注意:rawModule类型为camera_module_t,被强制转换为hw_module_t类型去获取结构体。原因

是camera_module_t的第一个成员变量即为hw_module_t类型,所以地址相同,获取到该成员变量

地址即获取整个结构体地址。

bool LegacyCameraProviderImpl_2_4::initialize() {
    camera_module_t *rawModule;
    int err = hw_get_module(CAMERA_HARDWARE_MODULE_
  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值