Android相机-架构2

应用:

大概流程:open,创建session,发送request,得到captureresult
CameraManager,获取系统服务CameraService,打开相机:

1)openCamera:打开相机
    获取相机信息:ICameraService.getCameraInfo
    实例化一个CameraDeviceImpl
    通过ICameraService的connectDevice方法,参数包括CameraDevice.StateCallback,传入CameraService
    获取ICameraDeviceUser的代理
    应用通过回调将CameraDeviceImpl返回给App使用,应用端的打开相机流程就完成了。
    
2)createCaptureSession:创建Session
    通过configureStreamsChecked方法来配置数据流
    实例化一个CameraCaptureImpl对象
    
3)createCaptureRequest:创建request
    通过ICameraDeviceUser的CreateDefaultRequest()方法创建一个默认的CameraMetadataNative
    实例化一个CaptureRequest.Builder对象
    将cameraMetaDataNative传入其中
    完成默认请求的创建
    
4)setRepeatingCapture:设置为Repeating
    CameraDeviceImpI对象会包含CameraCaptureSession.CaptureCallback对象

5)capture:下发request
    ICameraDeviceUser的submitcaptureRequest

6)onCaptureProcessed:将结果回传进行解析及后续处理
    ICameraDeviceCallback的onResultReceived方法将PartialMetaData的数据回传回来
    CameraCaptureSession.CaptureCallback的onCaputreProgressed方法回传给app
7)onCaptureCompleted:将结果回传进行解析及后续处理
    ICameraDeviceCallback的onResultReceived方法将MetaData的数据回传回来
    CameraCaptureSession.CaptureCallback的onCaputreProgressed方法回传给app
    
8)onImageAvailable:此时就可以读出图像数据进行处理
    图像数据通过BufferQueue的缓存方式,通过queueBuffer方法入队图像缓存,并通知消费中去消费。
    APP端可以使用ImageReader的onImageAvailable的方法通知ImageReader读取并进行处理
    

CameraService

AIDL:
    ICameraService:主要是通过CameraService实现,打开Camera设备,获取系统支持的相机个数,添加闪光灯的监听等
    ICameraServiceListener:由CameraManagerGlobal类实现,可以搞只当前Camera设备的状态变更等
    ICameraDeviceUser:由CameraDeviceClient实现,主要是对相机设备的操作,开关设备,发送请求,配流等等
    ICameraDeviceCallback:由CameraDeviceCallback实现,主要是提供Metadata和imagedata的回调,以及错误通知等等

CameraService:
    mCameraProviderManager《-ProviderInfo《-DeviceInfo3

CameraDeviceClient:
    mDevice<-Camera3Device<-RequestThread
    mFrameProcessor<-frameProcessorBase

CameraService的启动:
main_cameraserver开始:instantiate方法进行实例化,
    枚举ProviderManger
    new对象和初始化
    初始化包括:getService获取ICameraProvider代理;实例化ProviderInfo对象并对其初始化,加入容器进行管理
    ProviderInfo的初始化:保存ICameraProvider变量,实现ICameraProviderCallback接口等等,主要是通过ICameraProvider
    来获取ICameraDevice,然后实例化CameraInfo3对象
    这样CameraService就可以管理所有的CameraProvider和CameraDevice了

CameraService是在系统启动启动的系统服务,启动后就会等待处理APP的相关请求,处理流程就是如应用的使用流程进行交互。
    包括:获取相机属性,打开相机,配置数据流,处理图像请求,接收图像结果
    

Camera HAL:

HIDL:主要是提供CameraService使用的一些接口,由Camerahal框架负责实现这些接口。
ICameraProvider及相关的Callback
ICameraDevice及相关的Callback
ICameraDeviceSession

HAL的实现:
Qcom和Rockchip的实现
ComX-CHI的框架
主要的目录结构:
CamX:
core:核心实现模块内部包含hal目录,实现hal3接口,以及chi负责与CHI交互
csl:负责CamX与driver通讯模块
hwl:由独立运算能力的node,受csl管理
swl:需要依靠cpu才能实现的node

CHI-cdk:
chioveride:CHI的实现。负责与CamX交互并实现CHI的总体框架与业务逻辑
bin:平台相关的配置
actuator:对焦模块
ois
flash:
eeprom:外部存储
fd
topology:usecase
node:用户定义功能的node
module:不同sensor的配置文件
tunnig:
sensor:sensor的私有信息以及寄存器配置

实现用户场景需求。
usecase-》feature -》session -》pipeline -》Node(port,link,sink)

feature包括:HDR,CFA,JPEG,ASD,ZSL,MFNR,SuperNight,MultiFrame,MFSR等等

Camx-Chi的启动流程:
HwEnvironment
CSLModeManager
SettingsManager

通过dlopen打开com.qti.chi.override.so
dlsym或者chi_hal_override_entry,进入入口。

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

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

相关文章

树莓派示例代码 点亮led灯 跑马灯 开关控制led 红外感应灯 超声波测距

树莓派示例代码 gpio代码 gpio介绍 GPIO&#xff08;英语&#xff1a;General-purpose input/output&#xff09;&#xff0c;通用型之输入输出的简称&#xff0c;功能类似8051的P0—P3&#xff0c;其接脚可以供使用者由程控自由使用&#xff0c;PIN脚依现实考量可作为通用输…

深度学习11:Transformer

目录 什么是 Transformer&#xff1f; Encoder Decoder Attention Self-Attention Context-Attention 什么是 Transformer&#xff08;微软研究院笨笨&#xff09; RNN和Transformer区别 Universal Transformer和Transformer 区别 什么是 Transformer&#xff1f; ​ …

tomcat版本升级

一、升级原由 因漏洞扫描发现生产环境中所使用的tomcat版本有高风险漏洞&#xff0c;评估后决定将其升级至当前系统最新版本 tomcat8.5.32升级至apache-tomcat-8.5.81.tar.gz&#xff0c;可到官网下载&#xff1a;https://archive.apache.org/dist/tomcat/tomcat-8/ 二、升级步…

习题练习 C语言(暑期第二弹)

编程能力小提升&#xff01; 前言一、表达式判断二、Assii码的理解应用三、循环跳出判断四、数字在升序数组中出现的次数五、整数转换六、循环语句的应用七、函数调用八、两个数组的交集九、C语言基础十、图片整理十一、数组的引用十二、数组的引用十三、字符个数统计十四、多数…

【考研数学】矩阵、向量与线性方程组解的关系梳理与讨论

文章目录 引言一、回顾二、梳理齐次线性方程组非齐次线性方程组 写在最后 引言 两个原因让我想写这篇文章&#xff0c;一是做矩阵题目的时候就发现这三货经常绑在一起&#xff0c;让人想去探寻其中奥秘&#xff1b;另一就是今天学了向量组的秩&#xff0c;让我想起来了之前遗留…

初阶数据结构(六)队列的介绍与实现

&#x1f493;博主csdn个人主页&#xff1a;小小unicorn&#x1f493; ⏩专栏分类&#xff1a;C &#x1f69a;代码仓库&#xff1a;小小unicorn的学习足迹&#x1f69a; &#x1f339;&#x1f339;&#x1f339;关注我带你学习编程知识 栈 队列的介绍队列的概念&#xff1a;队…

H5商城公众号商城系统源码 积分兑换商城系统独立后台

网购商城系统源码 积分兑换商城系统源码 独立后台附教程 测试环境&#xff1a;NginxPHP7.0MySQL5.6thinkphp伪静态

剑指 Offer 43. 1~n 整数中 1 出现的次数

目录 ​编辑 一&#xff0c;问题描述 二&#xff0c;例子 三&#xff0c;题目接口 四&#xff0c;题目解答 1&#xff0c;暴力解法 2.规律解法 总结&#xff1a; 代码&#xff1a; 一&#xff0c;问题描述 输入一个整数 n &#xff0c;求1&#xff5e;n这n个整数的十进…

2023高教社杯数学建模思路 - 复盘:人力资源安排的最优化模型

文章目录 0 赛题思路1 描述2 问题概括3 建模过程3.1 边界说明3.2 符号约定3.3 分析3.4 模型建立3.5 模型求解 4 模型评价与推广5 实现代码 建模资料 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 描述 …

异侠的CSDN笔记目录

文章目录 B站雷神B站黑马其他零散记录MyBatis 及其 Plus常用工具类线程 & 网络编程过滤器监听器Listener会话Session异步请求 AJAX B站雷神 基础知识 如何创建项目 快速创建项目 自动配置原理 容器功能 小技巧 yaml用法 web开发简单功能 数据响应与内容协商模板引擎 …

1. 卷积原理

① 卷积核不停的在原图上进行滑动&#xff0c;对应元素相乘再相加。 ② 下图为每次滑动移动1格&#xff0c;然后再利用原图与卷积核上的数值进行计算得到缩略图矩阵的数据&#xff0c;如下图右所示。 import torch import torch.nn.functional as Finput torch.tensor([[1, 2…

mysql并行效率提升

下面是一个并行读取mysql数据库表的测试程序&#xff0c;测试结果发现&#xff0c;读取10个表&#xff0c;1个个读取&#xff0c;和并行读取10个&#xff0c;效率一样&#xff0c;甚至并行读取还慢很多&#xff0c;这是为什么&#xff1f; con get_db_conn() results {} poo…

2023.8 - java - 数组

声明数组变量 首先必须声明数组变量&#xff0c;才能在程序中使用数组。下面是声明数组变量的语法&#xff1a; dataType[] arrayRefVar; // 首选的方法或dataType arrayRefVar[]; // 效果相同&#xff0c;但不是首选方法int[] a {1,2,3};int b[] new int[10];TS:let a:…

布隆过滤器

目录 初识布隆过滤器使用布隆过滤器布隆过滤器如何实现布隆过滤器使用场景布隆过滤器存在问题解决策略 初识布隆过滤器 布隆过滤器&#xff08;Bloom Filter&#xff09;是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一…

【排序】快排的优化(三数取中)

三数取中 就是将整个数组分为两半&#xff0c;三个数&#xff08;头、尾、中间&#xff09;的第二大的数字和 left 位置的数字相交换&#xff0c;可以避免排一个有序的数组从而出现单分支树的情况。 如果每次都找了一个最小的值作为基准值&#xff0c;那就会导致这个结点没有左…

具有优异导电性能且抑制了准饱和效应的1200V 4H-SiC沟槽MOSFET

标题&#xff1a;1200V 4H-SiC trench MOSFET with superior figure of merit and suppressed quasi-saturation effect 摘要 本文提出一种具有部分被埋层n区包围的p屏蔽区的优异性能(FoM)1200V 4H-SiC沟槽MOSFET。在准饱和(QS)状态下&#xff0c;埋层n区抑制由p屏蔽区形成的耗…

IPD流程中,TR2评审的内容、评审标准和评审要素

在IPD&#xff08;Integrated Product Development&#xff09;流程中&#xff0c;TR2&#xff08;Technical Review 2&#xff09;评审是项目开发过程中的一个重要里程碑评审&#xff0c;通常在项目的中期进行。TR2评审的目的是对项目的技术进展和实施情况进行评估和审查&…

异地访问Oracle数据库的解决方案:利用内网穿透实现PL/SQL远程连接的建议与步骤

文章目录 前言1. 数据库搭建2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射 3. 公网远程访问4. 配置固定TCP端口地址4.1 保留一个固定的公网TCP端口地址4.2 配置固定公网TCP端口地址4.3 测试使用固定TCP端口地址远程Oracle ​ 小月糖糖主页 在强者的眼中&#xff0c;没有最…

【C++】特殊类的设计

特殊类的设计 前言正式开始设计一个类&#xff0c;不能被拷贝设计一个类&#xff0c;只能在堆上创建对象设计一个类&#xff0c;只能在栈上创建对象设计一个类&#xff0c;不能被继承设计一个类&#xff0c;只能创建一个对象(单例模式)饿汉模式懒汉模式总结 前言 点进来的同学…

c++ 学习之函数的默认参数

当在C中使用默认参数时&#xff0c;你可以在函数声明中为一个或多个参数指定默认值。这允许你在调用函数时&#xff0c;如果没有为这些参数提供实际值&#xff0c;编译器会使用你提供的默认值。这样可以在不同的情况下使用同一个函数&#xff0c;避免编写多个函数重载。 以下是…