整体架构概述
Android Camera整体框架主要包括三个进程:app进程、camera server进程、hal进程。进程之间的通信都是通过binder实现,其中app和camera server通信使用aidl,camera server和hal通信使用hidl。Android Camera2整体架构如下图:
Camera architecture
大致分为这几个部分:
Application framework
这一层是用于给APP提供访问hardware的Camera API2,通过binder来访问camera service。有两个主要的类:
CameraManager,CameraManager是一个独一无二地用于检测、连接和描述相机设备的系统服务,负责管理所有的CameraDevice相机设备。通过ICameraService调用到CameraService。
// CameraManager.java
private void connectCameraServiceLocked() { // CameraManager是一个系统服务,应该是开机就会被创建起来
IBinder cameraServiceBinder = ServiceManager.getService(CAMERA_SERVICE_BINDER_NAME);
ICameraService cameraService = ICameraService.Stub.asInterface(cameraServiceBinder); // 返回Stub.Proxy对象,也就是ICameraServiceProxy
CameraStatus[] cameraStatuses = cameraService.addListener(this); // 注册 ICameraServiceListener
mCameraService = cameraService;
}
CameraDevice:CameraDevice是连接在安卓设备上的单个相机的抽象表示。通过ICameraDeviceUser调用到CameraDeviceClient。
private CameraDevice openCameraDeviceUserAsync() {
CameraDevice device = null;
ICamer