CameraProvider启动流程

        从Android 8.0之后,Android 引入Treble机制,主要是为了解决目前Android 版本之间升级麻烦的问题,将OEM适配的部分vendor与google 对android 大框架升级的部分system部分做了分离,一旦适配了一个版本的vendor信息之后,之后的版本再进行升级时,直接升级system即可,这个就不会给OEM厂商升级带来太大的工作量,直接升级最新功能,可以解决目前市面上Android版本过来凌乱的问题。

  首先Treble机制在Vendor分区中有两种模式,一个编译成so库,供System分区的进程和应用直接加载调用,两者在同一个进程中,这种叫直通式 HAL(passthrough)模式, 另外一种是直接编译成一个daemon可运行的服务,然后System分区的进程通过HwBinder的IPC通信方式来调用,两者在二个独立的进程中,这种称为绑定式HAL(Binderized )模式。

        本文主要讲的是HAL(Binderized )模式。

一、main函数入口

/hardware/interface/camera/provider/2.4/default/service.cpp

主要就是defaultPassthroughServiceImplemention这个函数,虽然名字是passthrough,其实并不是上面说的直通式的。

二、LegacySupport

/system/libhidl.transport/include/hidl/LegacySupport.h

/system/libhidl.transport/LegacySupport.cpp

defaultPassthroughServiceImplemention的具体实现就在这两个文件里面了

三、ServiceManagement

/system/libhidl.transport/ServiceManagement.cpp

主要逻辑都在这个文件里面

getRawServiceInternal 的本质就是创建CameraProvider对象,返回的IBase就是CameraProvider,创建完之后将其注册到系统服务由ServiceManager管理

上面这些代码的作用就是到 /system/lib/hw  或者 /vendor/lib/hw 或者 /odm/lib/hw 这些目录下去找动态库,找什么样的动态库呢?就是根据服务的包名。

上面的fqName就是 ICameraProvider::descriptor

这要就是这段解析服务名去找库名(个人感觉很不友好,库名必须要和代码逻辑一致),sys就是找函数符号了,其实就是CameraProvider的构造函数

  构造CameraProvider对象,也就是IBase

service创建好之后就通过回调注册到ServiceManager了,不做深入分析了

四、回到ICameraProvider

/hardware/interface/camera/provider/2.4/default

CameraProvider的构造大概就这么多,至于CameraDevice,CameraSession这些都是通过CameraProvider创建的

另外服务还是需要在manifest里面注册的

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

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

相关文章

【excel】设置可变下拉菜单(一级联动下拉菜单)

文章目录 【需求】制作动态下拉菜单,显示无重复的“班级”列表【思路】设置辅助列,使用UNIQUE()函数去重,并用FILTER()去掉结果中的“0”【步骤】step1 辅助列step2 设置下拉菜单 【总结】 【需求】制作动态下拉菜单,显示无重复的…

深度学习之AlexNet、VGG-19、VGG-16、LeNet-5、ResNet模型的训练

一.AlexNet 1.1.导入资源包 import cv2 import matplotlib.pyplot as plt import numpy as np import os import random注: cv2:这是 OpenCV 模块,用于处理图像和视频,包括摄像头捕捉、图像处理、特征检测等。 matpl…

Playwright 自动化操作

之前有见同事用过playwright进行浏览器模拟操作,但是没有仔细了解,今天去详细看了下,发现playwright着实比selenium牛逼多了 Playwright 相对于selenium优点 1、自动下载chromnium, 无需担心chrome升级对应版本问题; 2、支持录屏操…

干Java的有4年的工作经验;想转行做labview能行吗?

在开始前刚好我有一些资料,是我根据网友给的问题精心整理了一份「 Java的资料从专业入门到高级教程」, 点个关注在评论区回复“888”之后私信回复“888”,全部无偿共享给大家!!!bVIEW和Java都是软件工具&a…

推荐几款优秀的文档加密软件 | 企业文件加密解决方案

在数字化时代,信息安全问题日益突出,文档加密软件成为了保护数据安全的重要手段。但是,市面上的文档加密软件种类繁多,功能各异,如何选择一款好用的文档加密软件成为了许多用户关注的焦点。本文将为大家提供一份实用的…

【第十三节】C++控制台版本坦克大战小游戏

目录 一、游戏简介 1.1 游戏概述 1.2 知识点应用 1.3 实现功能 1.4 开发环境 二、项目设计 2.1 类的设计 2.2 各类功能 三、程序运行截图 3.1 游戏主菜单 3.2 游戏进行中 3.3 双人作战 3.4 编辑地图 一、游戏简介 1.1 游戏概述 本项目是一款基于C语言开发的控制台…

5. MySQL运算符和函数

文章目录 【 1. 算术运算符 】【 2. 逻辑运算符 】2.1 逻辑非 (NOT 或者 !)2.2 逻辑与运算符 (AND 或者 &&)2.3 逻辑或 (OR 或者 ||)2.4 异或运算 (XOR) 【 3. 比较运算符 】3.1 等于 3.2 安全等于运算符 <>3.3 不等于运算符 (<> 或者 !)3.4 小于等于运算符…

Linux基本命令的使用(cp mv)

一、cp命令-1 1、CP命令作用&#xff1a;复制一个源文件到目标文件&#xff08;夹&#xff09; 2、 语法&#xff1a;cp [选项] 源文件 目标文件&#xff08;夹&#xff09; ① 复制到文件夹下&#xff0c;则文件名保持不变 ② 复制到文件中&#xff0c;则文件名变更 二、cp命…

【文件fd】回顾C语言文件操作 | 详细解析C语言文件操作写w追加a | 重定向和“w““a“

目录 前言 回顾C语言的操作 Q1 Q2 Q3 C语言文件操作 w方式 a方式 重定向和"w""a"方式 前言 前面进程虚拟地址空间让我们对进程的理解更加深入。在基础IO我们会详细介绍文件和文件系统。本专题的核心内容是文件。 深刻理解文件&#xff08;站在…

两数之和 II - 输入有序数组,三数之和

题目一&#xff1a; 代码如下&#xff1a; vector<int> twoSum(vector<int>& numbers, int target) {int left 0;int right numbers.size() - 1;vector<int> ret;while (left < right){int tmp numbers[left] numbers[right];if (tmp target){r…

vue3学习使用笔记

1.学习参考资料 vue3菜鸟教程&#xff1a;https://www.runoob.com/vue3/vue3-tutorial.html 官方网站&#xff1a;https://cn.vuejs.org/ 中文文档: https://cn.vuejs.org/guide/introduction.html Webpack 入门教程&#xff1a;https://www.runoob.com/w3cnote/webpack-tutor…

Proteus 安装报错There is a problem with this Windows lnstaller package

Proteus 安装常见问题 1.安装秘钥(许可证)的时候报错 报错信息如下所示&#xff1a; There is a problem with this Windows lnstaller package. A program required for this instalt to compiete coutd notbe run,contact your support personnet or packagevendor. 这个是…

在Ubuntu乌班图上安装Docker

最近在学习乌班图相关的内容&#xff0c;找了一些文档安装的都是报错的&#xff0c;于是记录一下学习过程&#xff0c;希望也能帮助有缘人&#xff0c;首先查看乌班图的系统版本&#xff0c;我的是如下的&#xff1a; cat /proc/version以下是在Ubuntu 20.04版本上安装Docker。…

Apache Druid 代码执行(CVE-2021-25646)漏洞复现

Druid简介与漏洞成因 Apache Druid是一个高性能的实时分析型数据库&#xff0c;旨在对大型数据集进行快速查询分析。Druid最常被当做数据库来用以支持实时摄取、高性能查询和高稳定运行的应用场景&#xff0c;同时&#xff0c;Druid也通常被用来助力分析型应用的图形化界面&am…

3---C++之list(逻辑梳理、简单使用演示、部分源码实现)

一、先决知识点1——认识list&#xff1a; list底层实现是双向链表&#xff0c;但是不是循环链表。list是否使用哨兵节点&#xff0c;是细节问题&#xff0c;C标准并未规定。list是链表&#xff0c;他的优势在于对节点的操作会十分灵活&#xff0c;因此它在需要频繁插入和删除元…

【UnityShader入门精要学习笔记】第十六章 Unity中的渲染优化技术 (下)

本系列为作者学习UnityShader入门精要而作的笔记&#xff0c;内容将包括&#xff1a; 书本中句子照抄 个人批注项目源码一堆新手会犯的错误潜在的太监断更&#xff0c;有始无终 我的GitHub仓库 总之适用于同样开始学习Shader的同学们进行有取舍的参考。 文章目录 减少需要处…

德人合科技——天锐绿盾内网安全管理软件 | -文档透明加密模块

天锐绿盾文档加密功能能够为各种模式的电子文档提供高强度加密保护&#xff0c;丰富的权限控制以及灵活的应用管理&#xff0c;帮助企业构建更严密的立体保密体系。 PC地址&#xff1a; https://isite.baidu.com/site/wjz012xr/2eae091d-1b97-4276-90bc-6757c5dfedee ————…

BioVendor—sHLA-G ELISA试剂盒

人类白细胞抗原-G (HLA-G)与其他MHC类基因的不同之处在于它的低多态性和产生七种HLA-G蛋白的选择性剪接&#xff0c;这些蛋白的组织分布局限于正常的胎儿和成人组织&#xff0c;这些组织对先天和后天免疫细胞都具有耐受性。可溶性HLA-G是一种免疫抑制分子&#xff0c;诱导活化的…

详细解析Barlow Twins:自监督学习中的创新方法

首先先简单了解一下机器学习中&#xff0c;主要有三种学习范式&#xff1a;监督学习、无监督学习和自监督学习&#xff1a; 监督学习&#xff1a;依赖带标签的数据&#xff0c;通过输入输出映射关系进行训练。无监督学习&#xff1a;不依赖标签&#xff0c;关注数据的内在结构…

pikachu靶场(unsafe upfileupload(文件上传)通关教程)

目录 client check 1.在桌面新建一个文本文档 2.保存为.png格式 3.打开网站 4.按照图中操作 5.点击forward 6.访问 MIME type 1.新建一个php文件&#xff0c;里面写上 2.上传文件&#xff0c;就是我们保存的文件 3.打开抓包工具&#xff0c;点击开始上传 4.修改Conen…