1 Camera Device主要交互逻辑
从两个角度来看Camera Device架构
- 提供接口给上层控制操作Camera设备 – CameraDeviceBase
- 回调Result Metadata和Image Buffer给上层 – FrameProcessor和Stream
- device 处理完一帧数据之后会产生Metadata,然后将Metadata存放在Queue里面。
- device 处理完一帧数据之后会产生Stream
2 提供接口给上层控制操作Camera – CameraDeviceBase
- CameraDeviceBase继承FrameProducer,实现对外获取Result metadata的接口
- CameraDeviceBase接口用于Client操作HAL2/HAL3 Device, Camera2Device是过渡产品,代码已经废弃
- HidlCamera3Device对接HIDL HAL层接口,AidlCamera3Device对接AIDL HAL层接口,他们都继承自Camera3Device
Camera3Device 和 Camera2Device 都继承自,CameraDeviceBase ,他们的区别对 Camera2ClientBase 是透明的。
3 回调Result Metadata架构 – FrameProcessor
- FrameProcessorBase启动一个线程调用FrameProducer的waitForNextFrame和getNextResult从ResultQueue里面获取CaptureResult
- Camera API2的Result metadata处理逻辑在FrameProcessorBase里面
- Camera API1的Result metadata处理逻辑在FrameProcessor里面
4 API2 回调Image Buffer架构 – Camera Stream
- Camera3Device根据配置信息决定创建Camera3InputStream/Camera3OutputStream/Camera3SharedOutputStream
- camera_stream是一个结构体,与HAL Stream长得一模一样
其实这个设计有点混乱,还有可以优化的地方
5 API1 回调Image Buffer架构 – Processor
上层使用API1时,Buffer送到Stream后,要么直接送给上层(Preview+Recording Stream),要么送给Processor取出Buffer回调给上层。