【Camera Framework笔记】二、Camera Native Framework架构①

一、总体架构:

service -> opencamera -> client(api1/api2) -> device3(hal3)

| |

(不opencamera) |

| |

providermanager |

| |

hal hal

app通过service创建一个client并且维护,后续所有操作均由app与client直接交互

二、 service和client架构

  1. cameraservice 与 cameraprovidermanager 的关系

cameraservice对上实现Bncameraservice接口,对外提供服务

对下与cameraprovidermanager交互,通过cameraprovidermanager调用到底层hal的实现

从上到下的流程:

上层调用到 cameraservice后,cameraservice 调用cameraprovidermanager, cameraprovidermanager 通过 providerinfo对象 调用到 providerinfo类,providerinfo 中通过遍历 device调用到 deviceinfo -> deviceinfo3 -> aidlDeviceinfo3/hidlDeviceinfo3 类中

  1. cameraservice 实现了 Bncameraservice 接口,上层调用到 cameraservice 后,cameraservice通过 mcameraprovidermanager调用到 cameraprovidermanager

  2. cameraprovidermanager内部再次分为两个类: providerinfo 与 deviceinfo

  3. providerinfo是为了区分 aidl 与 hidl,抽象作为基类,差异化的地方由子类aidl/hidl去实现

  4. deviceinfo 中继续对aidl 与 hidl进行区分,抽象出deviceinfo3,差异化的地方由子类aidlDeviceinfo3/hidlDeviceinfo3去实现

回调:

deviceinfo 可以通过 mParentProvider 调用到 providerinfo ,providerinfo 通过 mManager 调用到 cameraprovidermanager,cameraprovidermanager 通过 mStatusListener 调用到 cameraservice

  1. clientManager

clientManager 用于管理处理active状态的所有camera client对象

clientDescriptor 本质是一个map,key:string8 cameraid,value:cameraservice::basicClient(当前处于active的client 实例),用于描述一个 camera client对象的信息

cameraservice 通过 mactiveClientManager 调用到 clientManager,clientManager 通过mclients调用到clientDescriptor中具体的basicClient,

basicClient又可以调用到 cameraservice。

clientManager中存在一个listener会调用到 cameraservice的 clientEventListener,作用为监听每个client的add或remove操作

  1. camera client

所有的client都继承自 basicClient

API2:

bninterface<IcameraDeviceUser>

|

BncameraDeviceUser

|

cameraservice::basicClient <- cameraDeviceClientBase

|

camera2ClientBase<cameraDeviceClientBase>(封装对camera device的操作)

|

cameraDeviceClient(具体实现)

相关推荐
阿巴斯甜4 小时前
Android 报错:Zip file '/Users/lyy/develop/repoAndroidLapp/l-app-android-ble/app/bu
android
Kapaseker4 小时前
实战 Compose 中的 IntrinsicSize
android·kotlin
xq95275 小时前
Andorid Google 登录接入文档
android
黄林晴6 小时前
告别 Modifier 地狱,Compose 样式系统要变天了
android·android jetpack
冬奇Lab19 小时前
Android触摸事件分发、手势识别与输入优化实战
android·源码阅读
城东米粉儿1 天前
Android MediaPlayer 笔记
android
Jony_1 天前
Android 启动优化方案
android
阿巴斯甜1 天前
Android studio 报错:Cause: error=86, Bad CPU type in executable
android
张小潇1 天前
AOSP15 Input专题InputReader源码分析
android
_小马快跑_1 天前
Kotlin | 协程调度器选择:何时用CoroutineScope配置,何时用launch指定?
android