当前位置: 首页 > 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. 领…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录

ASP.NET Core 是一个跨平台的开源框架&#xff0c;用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录&#xff0c;以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...

React Native 导航系统实战(React Navigation)

导航系统实战&#xff08;React Navigation&#xff09; React Navigation 是 React Native 应用中最常用的导航库之一&#xff0c;它提供了多种导航模式&#xff0c;如堆栈导航&#xff08;Stack Navigator&#xff09;、标签导航&#xff08;Tab Navigator&#xff09;和抽屉…...

服务器硬防的应用场景都有哪些?

服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式&#xff0c;避免服务器受到各种恶意攻击和网络威胁&#xff0c;那么&#xff0c;服务器硬防通常都会应用在哪些场景当中呢&#xff1f; 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...

Nuxt.js 中的路由配置详解

Nuxt.js 通过其内置的路由系统简化了应用的路由配置&#xff0c;使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

IT供电系统绝缘监测及故障定位解决方案

随着新能源的快速发展&#xff0c;光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域&#xff0c;IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选&#xff0c;但在长期运行中&#xff0c;例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

Device Mapper 机制

Device Mapper 机制详解 Device Mapper&#xff08;简称 DM&#xff09;是 Linux 内核中的一套通用块设备映射框架&#xff0c;为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程&#xff0c;并配以详细的…...

laravel8+vue3.0+element-plus搭建方法

创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...

用机器学习破解新能源领域的“弃风”难题

音乐发烧友深有体会&#xff0c;玩音乐的本质就是玩电网。火电声音偏暖&#xff0c;水电偏冷&#xff0c;风电偏空旷。至于太阳能发的电&#xff0c;则略显朦胧和单薄。 不知你是否有感觉&#xff0c;近两年家里的音响声音越来越冷&#xff0c;听起来越来越单薄&#xff1f; —…...

uniapp 开发ios, xcode 提交app store connect 和 testflight内测

uniapp 中配置 配置manifest 文档&#xff1a;manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号&#xff1a;4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...