第26讲 Camera Native FW Device架构介绍

2024年11月03日 第26讲 Camera Native FW Device架构介绍 极客笔记

本讲是Android Camera Native Framework专题的第26讲,我们介绍Camera Native FW Device架构介绍。

更多资源:

资源 描述
在线课程 极客笔记在线课程
知识星球 星球名称:深入浅出Android Camera 星球ID: 17296815
Wechat 极客笔记圈

Camera Device主要交互逻辑

从两个角度来看Camera Device架构

  • 提供接口给上层控制操作Camera设备 – CameraDeviceBase

  • 回调Result Metadata和Image Buffer给上层 – FrameProcessorStream

提供接口给上层控制操作Camera – CameraDeviceBase

  1. CameraDeviceBase继承FrameProducer,实现对外获取Result metadata的接口

  2. CameraDeviceBase接口用于Client操作HAL2/HAL3 Device, Camera2Device是过渡产品,代码已经废弃

  3. HidlCamera3Device对接HIDL HAL层接口,AidlCamera3Device对接AIDL HAL层接口,他们都继承自Camera3Device

回调Result Metadata架构 – FrameProcessor

  • FrameProcessorBase启动一个线程调用FrameProducer的waitForNextFrame和getNextResult从Result Queue里面获取CaptureResult
  • Camera API2的Result metadata处理逻辑在FrameProcessorBase里面
  • Camera API1的Result metadata处理逻辑在FrameProcessor里面

API2 回调Image Buffer架构 – Camera Stream

  • Camera3Device根据配置信息决定创建Camera3InputStream/Camera3OutputStream/Camera3SharedOutputStream

  • camera_stream是一个结构体,与HAL Stream长得一模一样

疑问 答案
为什么要抽象出 Camera3Stream 1.Input和Output Stream的基类,继承camera_stream(与HAL Stream长得一样的结构体) 2.维护Stream的状态机切换 3.提供接口访问Stream的基本信息,比如ID、width、height、usage、dataspace等等 4.提供接口转换成HAL Stream
为什么要抽象出 Camera3IOStreamBase Input和Output Stream的基类,用于维护哪些Buffer给HAL了,感觉这个类有点冗余了,直接放Camera3Stream可能更好
为什么要抽象出 Camera3OutputStreamInterface 1.Camera3Device对Input Stream和Output Stream操作的流程完全不一样,将Output Stream的特殊操作抽象出来放到Camera3OutputStreamInterface 2.对Input Stream的操作还是放在Camera3Stream,这是做得不太好的地方

API1 回调Image Buffer架构 – Processor

上层使用API1时,Buffer送到Stream后,要么直接送给上层(Preview+Recording Stream),要么送给Processor取出Buffer回调给上层。

Processor 作用
StreamingProcessor 创建Preview和Recording的Stream
JpegProcessor 创建Jpeg的Stream,用于Jpeg拍照
CallbackProcessor 创建Callback的Stream,用于预览Callback
ZslProcessor 创建ZSL的Stream,用于实现ZSL逻辑

本文链接:http://so.lmcjl.com/news/16914/

展开阅读全文