Android Camera-框架小结
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
工作涉及安卓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/Camera.java
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