高通camx开源部分简介
camera整体框架
ISP Pipeline diagram
Simple Model
Camx and chi_cdk 整体框架
CtsVerifier, Camra Formats
Topology of Camera Formats.
Topology (USECASE: UsecaseVideo)
Nodes List
Links between nodes
Pipeline PreviewVideo
Buffer manager
Create
Destroy
Activate
Deactivate
GetImageBuffer
ReleaseReference
BinBuffer
MonitorThread
DeferredRequestQueue
ProcessRequest diagram
Complex design in camx.
Communication between modules
AddDeferredNode
Update Dependency
UpdateDependency
Process request
CSLFenceCallback
Callflow Sequence Diagram
camera整体框架

- sensor 上电,通过 MIPI协议传输,得到RAW图像数据。
- RAW图像数据经过ISP处理,得到YUV图像数据。
- YUV图像数据再经过DMA传输到DDR内存中,DDR内存也就是上图中标识的HOST。
- 每个厂家的 ISP原理和功能大致相同,像Auto Control(AEC、AF、AWB)都是在ISP里面做的,ISP里面还有 Raw Processing、Yuv Processing、Rgb Processing、Offline Processing(一般是去噪功能)。
- 每一个ISP里面都有一个MCU,MCU可以理解为一个处理器。ISP中的MCU需要上电工作,首先需要 load firmware。
- sensor只会出一路数据,但是经过 ISP之后,同时会存在至少三路数据 preview_stream 、snapshot_stream、video_stream。怎么样从sensor的一路数据变成 至少三路数据呢?这个就是 ISP内部做的事情,ISP内部可以将 sneosr出的一路数据拷贝分发成至少三路数据。
- 上图主要有三个部分组成:sensor、ISP、DDR。
ISP Pipeline diagram

- 以上流程图为 ISP工作处理流程图,每个厂商工作原理都差不多。
- 如果输入数据为 8bit,为了提高精度,会做一个 DC(data convert) 将8位数据转化为10位数据。
- 对于软件流程来说,我们最关心的是在什么阶段,图像数据是什么格式的?在DC之前,是Raw数据,在Demosaic之后是RGB数据,在CSC之后是YUV数据。在Linux/Andriod系统中 YUV数据是可以直接显示的,所以我们最关心的是 YUV数据。
- 在ISP里面,图像数据的转化为:RAW数据 --> RGB数据 --> YUV数据。
Simple Model
• only have mainly function nodes.

- 来具体看一个最简单的camera模型。sensor -> IIFE -> IPE -> Target(输出)。
- sensor处理的是 RAW图像数据,作为HAL层,不能直接处理RAW图像数据,所以必须要经过IFE的处理,将RAW数据转化为YUV的数据。
- 经过IFE处理之后,又会经过一个IPE的模块,IPE的功能主要是 :做去噪 + SAT图像裁切。
- Target可以理解为:上层 ,FrameWork层想要的数据。比如:预览模式,Target就需要预览数据,拍照模式,Target就需要拍照数据,录像模式,Target就需要录像数据。
- IFE、IPE 这些模块都是称为一个 node,每个node都有很多输入 port,也有很多输出 port。如果一个node的输出 port 连接到 Target,那么这个 port 就可以称为 SinkPort。如果一个 Node的输出 port连接到不是 Target,那么这个 输出 port 就称为 NorSinkPort。
- NorSinkPort 需要的 buffer 是我们自己申请的,SinkPort 需要的buffer 是 app层给的。
Camx and chi_cdk 整体框架

- chi-cdk是客户自定义的所需要的功能。camx是高通的底层框架,一般手机厂商不会修改。如果用户需要新增功能,在chi-cdk中新增即可。
- camx模块是一个 camera.qcom.so,chi-cdk模块也是一个 com.qti.chi.override.so。这两个so之间可以互相提供多个回调函数,通过 dlopen 进行相互调用。
- frameworks 和 HAL层怎么通信的?framework给HAL下发一个 request,HAL需要回一个 notify(shutter),3个result,其中2个 result 是 metadata,一个 result 是 imagebuffer。
- framework下发一个 request -> camx -> chi-cdk -> camx -> kernel -> camx -> chi-cdk -> camx -> framework
CtsVerifier, Camra Formats

如上图所示,上图是一个简单的apk,只有2路数据,一路数据是 preview数据,一路数据是 video数据。
Topology of Camera Formats.

- 如上图所示,Topology of Camera Formats 就是上图 apk所描述的2路流数据。sensor通过MIPI协议出一路 RAW数据,经过 IPE之后,变成了2路数据。一路是 preview流,另外一路是 video流。这就是 IPE 的拷贝分发功能。
- Node的输出和输出 port 是通过 link 连接起来的。这种 link 关系是通过 XML来描述的。






通过一个 perl脚本将 XML 转化为 一个 .h文件。大概如下所示:

Topology (USECASE: UsecaseVideo)
通过 usecaseconverter.pl 脚本 将XML 转化为 .h文件。
• perl usecaseconverter.pl common_usecase.xml g_pipelines.h

Nodes List

Links between nodes

Pipeline PreviewVideo

Buffer manager
关于 Buffer manager 后续另外会写一篇博客,详细的介绍一下。这里简单的介绍一下。
- Allocate and free buffer in MemPoolMgr.
- MemPoolMgr and ImagebufferManger have interface to manager these buffers.

Create
- Allocate buffer.
- Insert buffer to freeBufferList.

Destroy
- Get buffer from freeBufferList.
- Free buffer.

Activate
- Allocate buffer.

Deactivate
- Free buffer.

GetImageBuffer
- Get buffer from freeBufferList.
- Insert to busyBufferList.

ReleaseReference
- Get buffer from busyBufferList.
- Insert to freeBufferList.

BinBuffer

MonitorThread
- Free buffer of freeBufferList.

DeferredRequestQueue
- Node dependent on property and data.
- Use readyNodes and deferredNodes to manager nodes.
- Property changed, update dependency.
- Data call back, update dependency, dispatch ready node.
- Subscribe observer to monitor the change.
ProcessRequest diagram
- ProcessRequest.
- CSLFenceCallback.

Complex design in camx.

Modify source code
- Remove redundant function calls.
- Use direct call instead of multi-thread.
Remove redundant function calls.

Use direct call instead of mult-thread.


Communication between modules

AddDeferredNode

Update Dependency
- Property changed.
- Data call back of NorSinkPort.

UpdateDependency
- When all dependency satisfied.
- Remove node from deferredNodes List, Insert to readyNodes List.

Process request

CSLFenceCallback

Callflow Sequence Diagram

相关文章:
高通camx开源部分简介
camera整体框架 ISP Pipeline diagram Simple Model Camx and chi_cdk 整体框架 CtsVerifier, Camra Formats Topology of Camera Formats. Topology (USECASE: UsecaseVideo) Nodes List Links between nodes Pipeline PreviewVideo Buffer manager Create Destro…...
Springboot 框架中加解密字段后存储数据库
为防止数据库泄露,表里的敏感字段被曝光,需要对用户的重要数据做加密存取。 选择加密算法: 首先,你需要选择适合你的需求的加密算法。一些常见的加密算法包括AES、RSA、SHA等。具体的选择取决于你要加密的数据和安全需求。 引入…...
计算机毕设 大数据工作岗位数据分析与可视化 - python flask
文章目录 0 前言1 课题背景2 实现效果3 项目实现3.1 概括 3.2 Flask实现3.3 HTML页面交互及Jinja2 4 **完整代码**5 最后 0 前言 🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要…...
Maven聚合项目配合Springcloud案例
创建maven项目 导入依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache…...
目标检测网络系列——YOLO V1
文章目录 One Stage DectectionYOLO网络正向预测pipline反向传播过程理解grid和grid对应的B个预测框YOLO网络的限制对比实验与其他的real-time detection的对比VOC 2007数据集的错误分析YOLO和Fast RCNN的集成学习VOC 2012数据集结果YOLO模型的泛化性DEMOOne Stage Dectection …...
任务工单发送失败重试方案设计
需求背景: 该系统为一个工单系统,其中任务工单为该系统中的一个模块;任务工单它是需要周期性调度的一种任务类型;可以按照用户配置的时间周期定时性触发的。由于任务需要发送到对应的工作人员上,所以这里需要先对员工进…...
关于 Vue-iClient-MapboxGL 的使用注意事项
官网:https://iclient.supermap.io/web/apis/vue/zh/api/guide/installation.html 关于图的使用,其余的引入步骤不再赘述,仅说注意事项。 推荐使用的是全局引入,也就是完整引入 因为单独引入我踩了不少坑,比如说 cs…...
Go 语言 map 如何顺序读取?
Go 语言中的 map 是一种非常强大的数据结构,它允许我们快速地存储和检索键值对。 然而,当我们遍历 map 时,会有一个有趣的现象,那就是输出的键值对顺序是不确定的。 现象 先看一段代码示例: package mainimport &q…...
flutter StreamSubscription 订阅者 stream
当您使用[Stream.listen]收听[Stream]时 则返回[StreamSubscription]对象 List<StreamSubscription?> subscriptions []; overridevoid initState() {super.initState();//subscriptions列表添加两个StreamSubscription。Stream.listen返回StreamSubscription对象subs…...
安全性算法
目录 一、安全性算法 二、基础术语 三、对称加密与非对称加密 四、数字签名 五、 哈希算法 六、哈希算法碰撞与溢出处理 一、安全性算法 安全性算法的必要性: 安全性算法的必要性是因为在现代数字化社会中,我们经常需要传输、存储和处理敏感的数据…...
解决ASP.NET Core的中间件无法读取Response.Body的问题
概要 本文主要介绍如何在ASP.NET Core的中间件中,读取Response.Body的方法,以便于我们实现更多的定制化开发。本文介绍的方法适用于.Net 3.1 和 .Net 6。 代码和实现 现象解释 首先我们尝试在自定义中间件中直接读取Response.Body,代码如…...
DownloadingImages 下载缓存图片,显示图片文字列表
1. 用到的技术点: 1) Codable : 可编/解码 JSON 数据 2) background threads : 后台线程 3) weak self : 弱引用 4) Combine : 取消器/组合操作 5) Publishers and Subscribers : 发布者与订阅者 6) FileManager : 文件管理器 7) NSCache : 缓存 2. 网址: 2.1 测试接口网址: …...
【应用层协议】HTTPS的加密流程
目录 一、认识HTTPS 二、密文 1、对称加密 2、非对称加密 三、HTTPS加密流程 1、建立连接 2、证书验证 3、密钥协商 4、数据传输 5、关闭连接 总结 在数字化时代,互联网已经成为我们生活和工作中不可或缺的一部分。然而,随着数据的不断增加&a…...
最新AI创作系统/AI绘画系统/ChatGPT系统+H5源码+微信公众号版+支持Prompt应用
一、AI创作系统 SparkAi创作系统是基于国外很火的ChatGPT进行开发的AI智能问答系统和AI绘画系统。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作ChatGPT?小编这里写一个详细图…...
Z410 2023款无人机,专为零基础开发者打造的入门级开源无人机
为什么开发Z410升级款-Easydrone无人机 新手开发者通常在本科阶段加入人工智能行业,对无人机二次开发往往一知半解,面临着C、Python、ROS和mavlink等一系列入门知识,学习起来非常困难,学习的过程中也面临许多挫折。为了帮助零基础…...
elementui修改message消息提示颜色
/* el弹出框样式 */ .el-message {top: 80px !important;border: 0; }.el-message * {color: var(--white) !important;font-weight: 600; }.el-message--success {background: var(--themeBackground); }.el-message--warning {background: var(--gradientBG); }.el-message--…...
Linux和Hadoop的学习
目录 1. Linux的常用快捷键2. Hadoop集群部署问题汇总 1. Linux的常用快捷键 复制:CtrlshiftC 粘贴:CtrlshiftV TAB:补全命令 编写输入:i 退出编写:esc 保存并退出:shift: 2. Hadoop集群部署问…...
通达信指标预警信号,自动发送给微信好友1.0
1.功能介绍:十一节假日期间写了一个,可将股票指标预警信号,自动发送给微信好友/微信群(即电脑端的消息,通过模拟微信操作可在手机上显示)。本工具按通达信写的,如果大智慧,同花顺也能…...
浅谈CDN内容分发与全局负载均衡
CDN简介 CDN的全称是Content Delivery Network,即内容分发网络。CDN是构建在现有网络基础之上的智能虚拟网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,…...
【框架风格】解释器模式
1、描述 解释器框架风格(Interpreter Framework Style)是一种软件架构风格,其核心思想是构建一个解释器(Interpreter)来解释并执行特定领域或问题领域的语言或规则。以下是解释器框架风格的一些特点: 1. 领…...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...
微信小程序之bind和catch
这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...
docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...
通过Wrangler CLI在worker中创建数据库和表
官方使用文档:Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后,会在本地和远程创建数据库: npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库: 现在,您的Cloudfla…...
高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...
【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验
系列回顾: 在上一篇中,我们成功地为应用集成了数据库,并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了!但是,如果你仔细审视那些 API,会发现它们还很“粗糙”:有…...
12.找到字符串中所有字母异位词
🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...
Typeerror: cannot read properties of undefined (reading ‘XXX‘)
最近需要在离线机器上运行软件,所以得把软件用docker打包起来,大部分功能都没问题,出了一个奇怪的事情。同样的代码,在本机上用vscode可以运行起来,但是打包之后在docker里出现了问题。使用的是dialog组件,…...
视觉slam十四讲实践部分记录——ch2、ch3
ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...
