工作涉及安卓Camera的内容,做一下笔记
Android Camera的分层
最新的Android Camera的框架如下图所示
原图:Camera | Android Open Source Project (google.cn)
从上图可知道,Camera的框架主要包括三个进程,从上到下大概分为Camera APP,Camera Sevice,Camera HAL进程
Camera App
packages/apps/Camera2/src/com/android/camera/***
Camera App通过AIDL通信调用Camera Sevice的接口,Camera Sevice通过HIDL调用Camera HAL(Camera Provider)的接口
Camera Framework
frameworks/base/core/java/android/hardware/camera2
frameworks/base/core/jni/android_hardware_Camera.cpp
该层位于Camera APP和CameraSevice之间,封装Camera2 API的实现细节,并将APP的请求通过AIDL接口跨进程通信发送至CameraSevice处理,并将CameraSevice的结果返回给APP
- android.hardware.camera2.CameraDevice:提供给APP的编程接口,代表一个camera,应用可以此类来对Camera进行拍照等
- android.hardware.camera2.CameraManger:提供给APP的编程接口,应用可以通过此接口获取相机ID列表,摄像头信息,打开和关闭相机等操作,创建Camera状态回调等
getCameraIdList() : 返回当前设备中可用的相机列表
getCameraCharacteristics(String cameraId) : 根据摄像头id返回该摄像头的相关信息
openCamera(String cameraId, final CameraDevice.StateCallback callback,Handler handler): 打开指定cameraId的相机。参数callback为相机打开时的回调,参数handler为callback被调用时所在的线程
CameraSevice
frameworks/av/camera/
frameworks/services/camera/libcameraservice/
CameraSevice在Camera FrameWork和CameraProvider之间,在安卓系统中进程名为cameraserver,封装AIDL的接口给Framework使用,通过HIDL接口跨进程通信请求下发给Camera HAL(Camera Provider)进程,并将结果回传给Framework
- CameraDeviceClient:实现CameraDevice的功能,CameraDevice通过AIDL通信调用本类执行
- Camera3Device:代表一个Camera,负责与Camera HAL交互
- CameraService:实现CameraManager的API,以及管理系统中的Camera,主要的功能是加载系统中的Camera以及打开/关闭Camera
- CameraProviderManager:管理系统中的ICameraProvider
Camera HAL
Camera HAL包括Camera Provider和OEM/ODM自己实现的Camera HAL module,
1.Camera Provider
hardware/interfaces/camera
Camera Provider作为一个独立进程运行在安卓系统中,提供HIDL接口供CameraSevice使用
- ICameraProvider:向下调用Camera HAL module,承上启下
- ICameraDevice:代表HAL层级的一个Camera
- ICameraDeviceSession:封装HAL层级的Camera操作,包括:拍照,摄像,硬件配置等
2.Camera HAL module
谷歌提供的Camera HAL module参考
hardware/libhardware/modules/camera
OEM/ODM产商对谷歌Camera HAL3的实现,以so库的形式被加载到Camera Provider中,接收来自Provider的请求,发送命令给驱动接口,并将结果上传给Provider