当前位置: 首页 > news >正文

高通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整体框架

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

ISP Pipeline diagram

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

Simple Model

• only have mainly function nodes.

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

Camx and chi_cdk 整体框架

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

CtsVerifier, Camra Formats

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

Topology of Camera Formats.

  1. 如上图所示,Topology of Camera Formats 就是上图 apk所描述的2路流数据。sensor通过MIPI协议出一路 RAW数据,经过 IPE之后,变成了2路数据。一路是 preview流,另外一路是 video流。这就是 IPE 的拷贝分发功能。
  2. 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 后续另外会写一篇博客,详细的介绍一下。这里简单的介绍一下。

  1. Allocate and free buffer in MemPoolMgr.
  2. MemPoolMgr and ImagebufferManger have interface to manager these buffers.

Create

  1. Allocate buffer.
  2. Insert buffer to freeBufferList.

Destroy

  1. Get buffer from freeBufferList.
  2. Free buffer.

Activate

  1. Allocate buffer.

Deactivate

  1. Free buffer.

GetImageBuffer

  1. Get buffer from freeBufferList.
  2. Insert to busyBufferList.

ReleaseReference

  1. Get buffer from busyBufferList.
  2. Insert to freeBufferList.

BinBuffer

MonitorThread

  1. Free buffer of freeBufferList.

DeferredRequestQueue

  1. Node dependent on property and data.
  2. Use readyNodes and deferredNodes to manager nodes.
  3. Property changed, update dependency.
  4. Data call back, update dependency, dispatch ready node.
  5. Subscribe observer to monitor the change.

ProcessRequest diagram

  1. ProcessRequest.
  2. CSLFenceCallback.

Complex design in camx.

Modify source code

  1. Remove redundant function calls.
  2. Use direct call instead of multi-thread.

Remove redundant function calls.

Use direct call instead of mult-thread.

Communication between modules

AddDeferredNode

Update Dependency

  1. Property changed.
  2. Data call back of NorSinkPort.

UpdateDependency

  1. When all dependency satisfied.
  2. 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 …...

任务工单发送失败重试方案设计

需求背景&#xff1a; 该系统为一个工单系统&#xff0c;其中任务工单为该系统中的一个模块&#xff1b;任务工单它是需要周期性调度的一种任务类型&#xff1b;可以按照用户配置的时间周期定时性触发的。由于任务需要发送到对应的工作人员上&#xff0c;所以这里需要先对员工进…...

关于 Vue-iClient-MapboxGL 的使用注意事项

官网&#xff1a;https://iclient.supermap.io/web/apis/vue/zh/api/guide/installation.html 关于图的使用&#xff0c;其余的引入步骤不再赘述&#xff0c;仅说注意事项。 推荐使用的是全局引入&#xff0c;也就是完整引入 因为单独引入我踩了不少坑&#xff0c;比如说 cs…...

Go 语言 map 如何顺序读取?

Go 语言中的 map 是一种非常强大的数据结构&#xff0c;它允许我们快速地存储和检索键值对。 然而&#xff0c;当我们遍历 map 时&#xff0c;会有一个有趣的现象&#xff0c;那就是输出的键值对顺序是不确定的。 现象 先看一段代码示例&#xff1a; package mainimport &q…...

flutter StreamSubscription 订阅者 stream

当您使用[Stream.listen]收听[Stream]时 则返回[StreamSubscription]对象 List<StreamSubscription?> subscriptions []; overridevoid initState() {super.initState();//subscriptions列表添加两个StreamSubscription。Stream.listen返回StreamSubscription对象subs…...

安全性算法

目录 一、安全性算法 二、基础术语 三、对称加密与非对称加密 四、数字签名 五、 哈希算法 六、哈希算法碰撞与溢出处理 一、安全性算法 安全性算法的必要性&#xff1a; 安全性算法的必要性是因为在现代数字化社会中&#xff0c;我们经常需要传输、存储和处理敏感的数据…...

解决ASP.NET Core的中间件无法读取Response.Body的问题

概要 本文主要介绍如何在ASP.NET Core的中间件中&#xff0c;读取Response.Body的方法&#xff0c;以便于我们实现更多的定制化开发。本文介绍的方法适用于.Net 3.1 和 .Net 6。 代码和实现 现象解释 首先我们尝试在自定义中间件中直接读取Response.Body&#xff0c;代码如…...

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、关闭连接 总结 在数字化时代&#xff0c;互联网已经成为我们生活和工作中不可或缺的一部分。然而&#xff0c;随着数据的不断增加&a…...

最新AI创作系统/AI绘画系统/ChatGPT系统+H5源码+微信公众号版+支持Prompt应用

一、AI创作系统 SparkAi创作系统是基于国外很火的ChatGPT进行开发的AI智能问答系统和AI绘画系统。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作ChatGPT&#xff1f;小编这里写一个详细图…...

Z410 2023款无人机,专为零基础开发者打造的入门级开源无人机

为什么开发Z410升级款-Easydrone无人机 新手开发者通常在本科阶段加入人工智能行业&#xff0c;对无人机二次开发往往一知半解&#xff0c;面临着C、Python、ROS和mavlink等一系列入门知识&#xff0c;学习起来非常困难&#xff0c;学习的过程中也面临许多挫折。为了帮助零基础…...

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的常用快捷键 复制&#xff1a;CtrlshiftC 粘贴&#xff1a;CtrlshiftV TAB&#xff1a;补全命令 编写输入&#xff1a;i 退出编写&#xff1a;esc 保存并退出&#xff1a;shift&#xff1a; 2. Hadoop集群部署问…...

通达信指标预警信号,自动发送给微信好友1.0

1.功能介绍&#xff1a;十一节假日期间写了一个&#xff0c;可将股票指标预警信号&#xff0c;自动发送给微信好友/微信群&#xff08;即电脑端的消息&#xff0c;通过模拟微信操作可在手机上显示&#xff09;。本工具按通达信写的&#xff0c;如果大智慧&#xff0c;同花顺也能…...

浅谈CDN内容分发与全局负载均衡

CDN简介 CDN的全称是Content Delivery Network&#xff0c;即内容分发网络。CDN是构建在现有网络基础之上的智能虚拟网络&#xff0c;依靠部署在各地的边缘服务器&#xff0c;通过中心平台的负载均衡、内容分发、调度等功能模块&#xff0c;使用户就近获取所需内容&#xff0c…...

【框架风格】解释器模式

1、描述 解释器框架风格&#xff08;Interpreter Framework Style&#xff09;是一种软件架构风格&#xff0c;其核心思想是构建一个解释器&#xff08;Interpreter&#xff09;来解释并执行特定领域或问题领域的语言或规则。以下是解释器框架风格的一些特点&#xff1a; 1. 领…...

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

业务系统对接大模型的基础方案:架构设计与关键步骤

业务系统对接大模型&#xff1a;架构设计与关键步骤 在当今数字化转型的浪潮中&#xff0c;大语言模型&#xff08;LLM&#xff09;已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中&#xff0c;不仅可以优化用户体验&#xff0c;还能为业务决策提供…...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解

【关注我&#xff0c;后续持续新增专题博文&#xff0c;谢谢&#xff01;&#xff01;&#xff01;】 上一篇我们讲了&#xff1a; 这一篇我们开始讲&#xff1a; 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下&#xff1a; 一、场景操作步骤 操作步…...

STM32F4基本定时器使用和原理详解

STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...

srs linux

下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935&#xff0c;SRS管理页面端口是8080&#xff0c;可…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表

##鸿蒙核心技术##运动开发##Sensor Service Kit&#xff08;传感器服务&#xff09;# 前言 在运动类应用中&#xff0c;运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据&#xff0c;如配速、距离、卡路里消耗等&#xff0c;用户可以更清晰…...

Docker 本地安装 mysql 数据库

Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker &#xff1b;并安装。 基础操作不再赘述。 打开 macOS 终端&#xff0c;开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...

QT3D学习笔记——圆台、圆锥

类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体&#xff08;对象或容器&#xff09;QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质&#xff08;定义颜色、反光等&#xff09;QFirstPersonC…...

Golang——6、指针和结构体

指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...

Ubuntu系统复制(U盘-电脑硬盘)

所需环境 电脑自带硬盘&#xff1a;1块 (1T) U盘1&#xff1a;Ubuntu系统引导盘&#xff08;用于“U盘2”复制到“电脑自带硬盘”&#xff09; U盘2&#xff1a;Ubuntu系统盘&#xff08;1T&#xff0c;用于被复制&#xff09; &#xff01;&#xff01;&#xff01;建议“电脑…...