Qualcomm camera for Android8.0 学习(一)---- Camera架构概述

最近上手高通 camera项目,负责驱动模块,或多或少对android o还是不足。所以打算恶补一下,一起进步【(android 8.0)camera hal3】

首先将代码路径澄清以一下:(由于代码开发需要对路径掌握十分熟悉,所以对于代码路径的熟悉度是必须的)

代码路径(每天三遍 上中晚)
(1)framework 层代码
frameworks/base/core/java/android/hardware/camera2

(1.5)是camera framework和Camera service之间的IPC数据通信载体 /frameworks/av/camera
也就是说这就是一个binder通信载体

(2)camera service
frameworks/av/services/camera/libcameraservice$

(3)camera provider
hardware/interfaces/camera/provider/2.4

(4)hal层接口
hardware/interfaces/camera/common/1.0/
hardware/interfaces/camera/device/3.2
hardware/libhardware/include/hardware/camera3.h
hardware/libhardware/modules/camera/3_0

(5)hal层的实现
vendor/qcom/proprietary/camx/src/core/

(6)算法实现
vendor/qcom/proprietary/chi-cdk/vendor/node/

Android 的相机硬件抽象层 (HAL) 可将 Camera 2 中较高级别的相机框架 API (framework)连接到底层的相机驱动程序和硬件(hardware(这句话指明了hal的作用,就是链接framework和硬件的桥梁)。相机子系统包括相机管道组件的实现,而相机 HAL 则可提供用于实现这些组件版本的接口。

下面这张图较好的说明了Camera各组件之间的关系:

其实以下这张图片 我这边也没弄太明白,如果哪位大神了解可以直接回复,我这边再进行组织,也可联系我邮箱([email protected]),一起进步!

Qualcomm camera for Android8.0 学习(一)---- Camera架构概述_第1张图片

 

framework:应用代码位于framework层,它使用 Camera 2 API 与相机硬件进行交互。在内部,这些代码会调用相应的 Binder 接口,以访问与相机互动的原生代码。

 

AIDL:与CameraService 关联的 Binder 接口可在 frameworks/av/camera/aidl/android/hardware 中找到。生成的代码会调用较低级别的原生代码以获取对实体相机的访问权限,并返回用于在框架级别创建 CameraDevice 并最终创建 CameraCaptureSession 对象的数据。


原生框架:此框架位于 frameworks/av/ 中,并提供相当于 CameraDevice 和 CameraCaptureSession 类的原生类。

Binder IPC 接口:IPC binder 接口用于实现跨越进程边界的通信。调用相机服务的若干个相机 Binder 类位于 frameworks/av/camera/camera/aidl/android/hardware 目录中。

ICameraService 是相机服务的接口

ICameraDeviceUser 是已打开的特定相机设备的接口

ICameraServiceListener 是 CameraService的回调

ICameraDeviceCallbacks 是CameraDevice 回调。
相机服务(camer service):位于 frameworks/av/services/camera/libcameraservice/CameraService.cpp 下的相机服务是与 HAL 进行互动的实际代码。
HAL:硬件抽象层定义了由相机服务调用、且您必须实现以确保相机硬件正常运行的标准接口。

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(linux,驱动,android)