第37讲 Camera Native FW 之CameraDeviceClient初始化详解

本讲是Android Camera Native Framework专题的第37讲,我们介绍Camera Native FW的CameraDeviceClient初始化详解。

更多资源:

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

CameraDeviceClient初始化总体概述

完成3件事情

  • Camera2ClientBase初始化
  • FrameProcessor初始化
  • CameraDeviceClient用到的静态Metadata初始化

CameraDeviceClient初始化总体概述

Camera2ClientBase初始化

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初始化

  • FrameProcessor用RangeListener来管理每个客户端对Metadata的需求

FrameProcessor初始化

FrameProcessor的RangeListener可以同时有多个客户端(API1 path的情况)

FrameProcessor初始化

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时填的值是一样的

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程

Android Camera Native Framework