第28讲 Camera Native FW 获取CameraCharacteristic流程详解

2024年11月03日 第28讲 Camera Native FW 获取CameraCharacteristic流程详解 极客笔记

本讲是Android Camera Native Framework专题的第28讲,我们介绍Camera Native FW的获取CameraCharacteristic流程详解。

更多资源:

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

getCameraCharacteristics总体流程

  • Cameraserver进程刚起来做enumerate时会将CameraCharacteristics存放在CameraProviderManager的DeviceInfo3里面

  • 上层问CameraService要CameraCharacteristics时,CameraService就从DeviceInfo3对象中直接获取,不会调用到HAL去

CameraProvider初始化CameraCharacteristics流程

  • cameraserver进程启动时会从HAL层获取到当前平台支持多少颗Camera,针对每一颗Camera会去获取CameraCharacteristics,保存在mCameraCharacteristics

  • 如果是Logical MultiCamera,会针对每一颗Physical Camera调用HAL层的getPhysicalCameraCharacteristics,保存在mPhysicalCameraCharacteristics Map中

  • 在enumerateProviders会调用CameraProviderManager的filterSmallJpegSizes剔除小于1080P的Jpeg Size,剔除前会保留CameraCharacteristics到mCameraCharNoPCOverride

CameraService的getCameraCharacteristics逻辑

  • 根据SystemCameraKind判断是否要拒绝访问

  • 不拒绝,则通过Target SDK获取到overrideForPerfClass,传递给CameraProviderManager获取CameraCharacteristics

  • 最后判断是否有Camera权限,如果没有则删除需要权限才能获取的静态Metadata(这里可以优化下,将无权限的静态Metadata缓存起来,不用每次都去操作Metadata)

需要权限的静态Metadata Tag

shouldRejectSystemCameraConnection逻辑

SystemCameraKind 描述
PUBLIC 对所有应用程序和系统组件都是可见
SYSTEM_ONLY_CAMERA 只对拥有android.permission.SYSTEM_CAMERA权限的进程可见,不会暴露给第三方应用程序
HIDDEN_SECURE_CAMERA 只对HAL应用可见(通过hwbinder线程连接)
  1. 如果是cameraserver自己调用该API,则不拒绝

  2. 如果是systemClient(uid<10000),则不拒绝

  3. 如果systemCameraKind是PUBLIC,则不拒绝

  4. 否则

  • HIDDEN_SECURE_CAMERA,拒绝

  • SYSTEM_ONLY_CAMERA,是否有SYSTEM_CAMERA权限,如果有则不拒绝,无则拒绝

CameraProviderManager的getCameraCharacteristics逻辑

  • 如果是Hidden physical camera,则从mPhysicalCameraCharacteristics里面获取

  • 否则,判断是否要为PerfClass做Override。如果要做,则返回mCameraCharacteristics,否则返回mCameraCharNoPCOverride

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

展开阅读全文