之前一直接触的是老的camera架构,这里介绍下最新的架构:
首先看下最新的架构图:
Android 相机架构
应用框架:
应用代码位于应用框架级别,它使用 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 和 ICameraDeviceCallbacks 分别是对应用框架的 CameraService 和 CameraDevice 回调。
相机服务
位于 frameworks/av/services/camera/libcameraservice/CameraService.cpp 下的相机服务是与 HAL 进行互动的实际代码。
HAL:
硬件抽象层定义了由相机服务调用、且您必须实现以确保相机硬件正常运行的标准接口。
Tips:
通过上面的google的介绍我们不难看出,现在最新的Camera架构已经摒弃了native层,完全使用binder通讯达到连接应用框架到cameraService的目的,这样的目的可能是为了简化代码冗余并且提升效率吧.
来源:CSDN
作者:xiaozi63
链接:https://blog.csdn.net/u012596975/article/details/104342254