高通camx开源部分学习简介

2023-10-06 16:39

本文主要是介绍高通camx开源部分学习简介,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

//未完待续....

这篇关于高通camx开源部分学习简介的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/153502

相关文章

Qt QCustomPlot库简介(最新推荐)

《QtQCustomPlot库简介(最新推荐)》QCustomPlot是一款基于Qt的高性能C++绘图库,专为二维数据可视化设计,它具有轻量级、实时处理百万级数据和多图层支持等特点,适用于科学计算、... 目录核心特性概览核心组件解析1.绘图核心 (QCustomPlot类)2.数据容器 (QCPDataC

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

重新对Java的类加载器的学习方式

《重新对Java的类加载器的学习方式》:本文主要介绍重新对Java的类加载器的学习方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍1.1、简介1.2、符号引用和直接引用1、符号引用2、直接引用3、符号转直接的过程2、加载流程3、类加载的分类3.1、显示

rust 中的 EBNF简介举例

《rust中的EBNF简介举例》:本文主要介绍rust中的EBNF简介举例,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. 什么是 EBNF?2. 核心概念3. EBNF 语法符号详解4. 如何阅读 EBNF 规则5. 示例示例 1:简单的电子邮件地址

Python 异步编程 asyncio简介及基本用法

《Python异步编程asyncio简介及基本用法》asyncio是Python的一个库,用于编写并发代码,使用协程、任务和Futures来处理I/O密集型和高延迟操作,本文给大家介绍Python... 目录1、asyncio是什么IO密集型任务特征2、怎么用1、基本用法2、关键字 async1、async

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen

Android Mainline基础简介

《AndroidMainline基础简介》AndroidMainline是通过模块化更新Android核心组件的框架,可能提高安全性,本文给大家介绍AndroidMainline基础简介,感兴趣的朋... 目录关键要点什么是 android Mainline?Android Mainline 的工作原理关键

一文详解如何在Python中从字符串中提取部分内容

《一文详解如何在Python中从字符串中提取部分内容》:本文主要介绍如何在Python中从字符串中提取部分内容的相关资料,包括使用正则表达式、Pyparsing库、AST(抽象语法树)、字符串操作... 目录前言解决方案方法一:使用正则表达式方法二:使用 Pyparsing方法三:使用 AST方法四:使用字

Mysql删除几亿条数据表中的部分数据的方法实现

《Mysql删除几亿条数据表中的部分数据的方法实现》在MySQL中删除一个大表中的数据时,需要特别注意操作的性能和对系统的影响,本文主要介绍了Mysql删除几亿条数据表中的部分数据的方法实现,具有一定... 目录1、需求2、方案1. 使用 DELETE 语句分批删除2. 使用 INPLACE ALTER T