本讲是Android Camera Native Framework专题的第37讲,我们介绍Camera Native FW的CameraDeviceClient初始化详解。
更多资源:
资源 | 描述 |
---|---|
在线课程 | 极客笔记在线课程 |
知识星球 | 星球名称:深入浅出Android Camera 星球ID: 17296815 |
极客笔记圈 |
CameraDeviceClient初始化总体概述
完成3件事情
- Camera2ClientBase初始化
- FrameProcessor初始化
- CameraDeviceClient用到的静态Metadata初始化
Camera2ClientBase初始化
- 首先根据HIDL/AIDL创建相应Device
- 然后再次检查是否有使用Camera的权限
- 将NotificationListener设置给Device通知回调信息
- 最后启动Camera2ClientBase watchdong对(目前主要监听disconnect是否超时)
NotificationListener用于Device回调通知信息
函数 | 解释 |
---|---|
notifyError | 通知错误 |
notifyPhysicalCameraChange | logical multi-camera情况下通知最新哪颗physical目前处于Active状态 |
notifyActive | 通知Device处于Active出流状态 |
notifyIdle | 通知Device处于IDLE不出流状态 |
notifyShutter | Only API2,通知每帧的shutter事件 |
notifyPrepared | 通知某路stream prepare结束(提前申请streambuffer) |
notifyRequestQueueEmpty | 通知Request Queue空了 |
notifyAutoFocus/notifyAutoExposure/notifyAutoWhitebalance | Only API1,FrameProcessor通知3A信息 |
notifyRepeatingRequestError | Repeating用的Surface发生abandon了 |
FrameProcessor初始化
FrameProcessor是用于回调Result Metadata的架构
- FrameProcessorBase启动一个线程调用FrameProducer的waitForNextFrame和getNextResult从Result Queue里面获取CaptureResult,回调函数如下
- FrameProcessor用RangeListener来管理每个客户端对Metadata的需求
FrameProcessor的RangeListener可以同时有多个客户端(API1 path的情况)
CameraDeviceClient用到的静态Metadata初始化
Metadata | 说明 |
---|---|
mSupportedPhysicalRequestKeys | Physical Camera支持设置的Request Keys,submitRequest时用于过滤掉不支持的Request设置 |
mDynamicProfileMap | (profile id -> Supported dynamic profiles bit map) 存放支持的Dynamic Range Profiles,submitRequest时会对设置的值做检查 |
mHighResolutionSensors | 支持高分辨率Stream的Camera,有ULTRA_HIGH_RESOLUTION_SENSOR capability,submitRequest时会对设置CONTROL_SENSOR_PIXEL_MODE 做检查,要求Request和configure时填的值是一样的 |