Android Camera2架构-OpenCamera2流程Frameworks层到HAL层(1)

Camera2API2

frameworks\base\core\java\android\hardware\camera2\CameraManager.java

或者

 

 

/frameworks/base/core/java/android/hardware/camera2/Impl/CameraDeviceImpl.java

 

此处触发 onOpened 与 onUnconfigured 这两个回调,每个回调都是通过 mDeviceHandler 启用一个新线程来调用的。

退回去看CameraManager.java 中opencameradevicAsync方法的connectDevice到CameraService

/frameworks/av/services/camera/libcameraservice/CameraService.cpp

 

 

初始化 client 实例。注意此处的模板类型 client 即是 CameraDeviceClient,传入的参数 mCameraProviderManager 则是与 HAL service 有关,这个相关内容之后再分析。

makeClient 主要是根据 API 版本以及 HAL 版本来选择生成具体的 Client 实例。对于 HAL3 且 CameraAPI2 的情况,实例化了 CameraDeviceClient 类作为 Client(注意此处构造传入了 ICameraDeviceCallbacks,这是连接到 CameraDeviceImpl 的远端回调) 。

 

最终,这一 Client 就沿着前面分析下来的路径返回到 CameraDeviceImpl 实例中,被保存到 mRemoteDevice。

目前只说Camera_API_3.0之后的

/frameworks/av/services/camera/libcameraservice/api2/CameraDeviceClient.cpp

/frameworks/av/services/camera/libcameraservice/common/Camera2ClientBase.cpp

 

Camera2ClientBase是一个模板类,这里的TClientBase是CameraDeviceClientBase,可以从CameraDeviceClient的继承关系看出。除了调用父类TClientBase(CameraDeviceClientBase)的构造函数外,还创建Camera3Device实例中设置了两个回调

再回到: /frameworks/av/services/camera/libcameraservice/api2/CameraDeviceClient.cpp

重要:上面那段话告诉我们Android还有另一种方式调用Camera,就是使用NDK API

 现在返回去再看 /frameworks/av/services/camera/libcameraservice/CameraService.cpp

在connectHlper() 方法中

/frameworks/av/services/camera/libcameraservice/api2/CameraDeviceClient.cpp

/frameworks/av/services/camera/libcameraservice/common/Camera2ClientBase.cpp

 

frameworks/av/services/camera/libcameraservice/common/Camera2ClientBase.h

frameworks/av/services/camera/libcameraservice/device3/Camera3Device.h

frameworks/av/services/camera/libcameraservice/device3/Camera3Device.cpp

在返回看frameworks/av/services/camera/libcameraservice/device3/Camera3Device.cpp

中Camera3Device::initialize方法中manager->openSession

hardware\interfaces\camera\device\3.2\default\CameraDevice.cpp

/hardware/interfaces/camera/common/1.0/default/CameraModule.cpp

 

这里的:mModule->common.methods->open(&mModule->common, id, device)就是底层HAL接口,

高通入口/hardware/qcom/camera/msm8998/QCamera2/QCamera2Hal.cpp

 

先看hardware\libhardware\include\hardware\hardware.h

再看/hardware/libhardware/include/hardware/camera3.h

camera3.h还有两个个重要的结构体

 

 

返回去再看hardware\interfaces\camera\device\3.2\default\CameraDevice.cpp 中的

Return<void> CameraDevice::open方法创建CameraDeviceSession

/hardware/interfaces/camera/device/3.2/default/CameraDeviceSession.cpp

至此就进入HAL

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值