【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(具体实现)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/713.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux网络编程--网络传输

Linux网络编程--网络传输 Linux网络编程TCP/IP网络模型网络通信的过程局域网通信跨网络通信&#xff1a;问题总结&#xff1a; Linux网络编程 TCP/IP网络模型 发送方&#xff08;包装&#xff09;&#xff1a; 应用层&#xff1a;HTTP HTTPS SSH等 —> 包含数据&#xff0…

终极版商城平台 涵盖虚拟商品全功能的商城平台 全能商城小程序 智慧商城系统 全品类百货商城服务

终极版商城平台 涵盖虚拟商品全功能的商城平台 全能商城小程序 智慧商城系统 全品类百货商城服务 含uniapp源码 全功能商城系统&#xff1a;完美运营版&#xff0c;简洁无冗余 这款商城系统完美集成了拼团、团购、秒杀、积分兑换、砍价活动&#xff0c;同时支持实物商品与虚拟…

2010年认证杯SPSSPRO杯数学建模B题(第一阶段)交通拥堵问题全过程文档及程序

2010年认证杯SPSSPRO杯数学建模 交通拥堵问题 B题 Braess 悖论 原题再现&#xff1a; Dietrich Braess 在 1968 年的一篇文章中提出了道路交通体系当中的Braess 悖论。它的含义是&#xff1a;有时在一个交通网络上增加一条路段&#xff0c;或者提高某个路段的局部通行能力&a…

开发语言漫谈-Vue

Vue严格说来不是一门语言&#xff0c;它是Javascript的一个框架。如同Spring是Java语言的一个框架。只是当下为了开发效率&#xff0c;很少有人使用原生Javascript&#xff0c;多少得选择某种框架。类似的框架实在太多&#xff0c;bootstrap、layui、Angular、jQuery、react、E…

深度学习知识点:循环神经网络(RNN)、长短期记忆网络(LSTM)、门控循环单元(GRU)

深度学习知识点&#xff1a;循环神经网络&#xff08;RNN&#xff09;、长短期记忆网络&#xff08;LSTM&#xff09;、门控循环单元&#xff08;GRU&#xff09; 前言循环神经网络&#xff08;RNN&#xff09;RNNs&#xff08;循环神经网络&#xff09;训练和传统ANN&#xff…

VulBG: 构建行为图加强基于深度学习的漏洞检测模型

近年来&#xff0c;人们提出了基于深度学习&#xff08;DL&#xff09;的漏洞检测系统&#xff0c;用于从源代码中自动提取特征。这些方法在合成数据集上可以实现理想的性能&#xff0c;但在检测真实世界的漏洞数据集时&#xff0c;准确率却大幅下降。此外&#xff0c;这些方法…

OpenHarmony网络协议通信—nanopb

简介 nanopb是一种小代码量的协议缓冲区实现&#xff0c;适用于任何内存受限的系统。 下载安装 直接在OpenHarmony-SIG仓中搜索nanopb并下载。 使用说明 以OpenHarmony 3.1 Beta的rk3568版本为例 将下载的Nanopb库代码存在以下路径&#xff1a;./third_party/nanopb 修改添…

docker安装并跑通QQ机器人实践(3)-bs-nonebot搭建

NoneBot2 是一个现代、跨平台、可扩展的 Python 聊天机器人框架&#xff08;下称 NoneBot&#xff09;&#xff0c;它基于 Python 的类型注解和异步优先特性&#xff08;兼容同步&#xff09;&#xff0c;能够为你的需求实现提供便捷灵活的支持。同时&#xff0c;NoneBot 拥有大…

如何在 Netlify 上手动部署 React 和 TypeScript 项目

在本教程中&#xff0c;我将教你如何使用 Vite 在 Netlify 上手动部署 React 和 TypeScript 项目。我将向你展示一些快速简单的步骤&#xff0c;让你的项目能够立即运行。 要跟着本教程操作&#xff0c;有几个先决条件&#xff1a; 一个现有的 React 和 TypeScript 项目&…

Https 中的CA证书

先理清整体的流程&#xff0c;再去看ca证书&#xff0c;对称加密&#xff0c;非对称加密 HTTPS的工作原理涉及非对称加密技术&#xff0c;其中根证书起着至关重要的作用。以下是其工作流程&#xff1a; 数字证书&#xff1a;服务器必须首先向认证机构&#xff08;CA&#xff…

常见经典目标检测算法

目标检测是计算机视觉中的一个关键任务&#xff0c;它的目的是识别图像中的对象&#xff0c;并给出它们的类别和位置。以下是一些常见的经典目标检测算法&#xff1a; 1. **R-CNN (Region-based Convolutional Neural Network)**: - R-CNN是目标检测领域的开创性工作&#…

bug(警告):[vue-router] Duplicate named routes definition: …

查看警告&#xff1a;[vue-router] Duplicate named routes definition——翻译[vue-router]重复命名路由定义 小编劝诫&#xff1a;当我们在开发过程中警告也一定不要忽略&#xff0c;虽然你在本地跑代码时这些警告影响项目的正常运行&#xff0c;但是会让你产生误区&#xff…

OSPGF高级实验综合

1.实验拓扑 二.实验要求 1、R4为ISP&#xff0c;其上只配置IP地址&#xff1b;R4与其他所直连设备间均使用公有IP&#xff1b; 2、R3-R5、R6、R7为MGRE环境&#xff0c;R3为中心站点&#xff1b; 3、整个OSPF环境IP基于172.16.0.0/16划分&#xff1b;除了R12有两个环回&#x…

深入理解JAVA垃圾收集器CMS,G1工作流程原理 GC流程图 什么社会触发Minor GC?触发MinorGC过程。Full GC 过程。

java CMS&#xff0c;G1垃圾收集器工作流程原理浅析 JVM内存空间基础知识点&#xff08;基于JDk1.8&#xff09; 1.方法区&#xff1a;逻辑概念&#xff0c;元空间&#xff0c;方法区主要用于存储类的信息、常量池、方法数据、方法代码等。方法区逻辑上属于堆的一部分&#xf…

数据结构-动态规划策略

动态规划 1.理解动态规划思想 基本概念 重叠子问题:原问题可以分解为若干个子问题&#xff0c;且这些子问题之间存在重复部分。也就是说&#xff0c;为了解决一个子问题&#xff0c;我们需要多次求解相同的子子问题。例如&#xff0c;在计算斐波那契数列时&#xff0c;计算第n项…

java实现chatGPT SDK

搭建一个 ChatGPT-SDK 组件工程&#xff0c;专门用于封装对 OpenAI 接口的使用。由于 OpenAI 接口本身较多&#xff0c;并有各类配置的设置&#xff0c;所以开发一个共用的 SDK 组件&#xff0c;更合适我们在各类工程中扩展使用 整个流程为&#xff1a;以会话模型为出口&#x…

C++笔试强训day3

目录 1.简写单词 2.dd爱框框 3.除2&#xff01; 1.简写单词 链接 我的思路超级简单&#xff0c;就是将输入的每个string存入vector&#xff0c;然后遍历每个string的第一个元素&#xff0c;如果为小写字母&#xff0c;就-32存入&#xff0c;若为大写&#xff0c;则直接存入。…

Docker in Docker的原理与实战

Docker in Docker&#xff08;简称DinD&#xff09;是一种在Docker容器内部运行另一个Docker实例的技术。这种技术允许用户在一个隔离的Docker容器中创建、管理和运行其他Docker容器&#xff0c;从而提供了更灵活和可控的部署选项。以下是DinD的主要特点&#xff1a; 隔离性&am…

react 封装请求axios,直接调用即可

概要 我们在开发项目的时候&#xff0c;常常会遇到接口请求的问题的&#xff0c;若我们不进行接口的统一管理&#xff0c;代码开发不仅多而且很麻烦容易出错&#xff0c;也不利于项目的维护。下面我们一下学习下react项目中将如何封装请求&#xff0c;也从另一个方面中少写一些…

Maven实战—搭建微服务 Maven 工程架构

需求案例&#xff1a;搭建一个电商平台项目&#xff0c;该平台包括用户服务、订单服务、通用工具模块等。 项目架构&#xff1a; 用户服务&#xff1a;负责处理用户相关的逻辑&#xff0c;例如用户信息的管理、用户注册、登录等。订单服务&#xff1a;负责处理订单相关的逻辑…