【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


2. 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操作

3. camera client

所有的client都继承自 basicClient
API2:

                                                            bninterface<IcameraDeviceUser>
                                                                                    |
                                                                    BncameraDeviceUser
                                                                                    |
cameraservice::basicClient    <-     cameraDeviceClientBase
                                                                                    |
                                                                    camera2ClientBase<cameraDeviceClientBase>(封装对camera device的操作)
                                                                                    |
                                                            cameraDeviceClient(具体实现)

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-04-20 12:32:08       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-20 12:32:08       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-20 12:32:08       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-20 12:32:08       18 阅读

热门阅读

  1. unity socket udp 连接

    2024-04-20 12:32:08       32 阅读
  2. 数据仓库—维度建模—事实表设计

    2024-04-20 12:32:08       17 阅读
  3. 如何防范XSS?

    2024-04-20 12:32:08       19 阅读
  4. WEB前端常规技术面试题之HTML+CSS基础

    2024-04-20 12:32:08       14 阅读
  5. centos安装mysql并设置远程访问

    2024-04-20 12:32:08       35 阅读
  6. Unity WebGL 2020 Release-Notes

    2024-04-20 12:32:08       21 阅读
  7. Mongodb

    Mongodb

    2024-04-20 12:32:08      18 阅读
  8. C++|list的模拟实现

    2024-04-20 12:32:08       14 阅读