高通Camera HAL3: CamX、Chi-CDK要點

目錄

一、概述

二、目錄

三、CamX組件之前的關系


一、概述

高通CamX架構是高通實現的相機HAL3架構,被各OEM廠商廣泛采用。

二、目錄

代碼位于vendor/qcom/proprietary下:

  • camx:通用功能性接口的代碼實現集合
  • chi-cdk:可定制化的代碼實現集合

?CamX子目錄:

  • core/:?用于存放camx的核心實現模塊,其中還包含了主要用于實現hal3接口的hal/目錄,以及負責與CHI進行交互的chi/目錄
  • hwl/: 用于存放自身具有獨立運算能力的硬件node,該部分node受csl管理
  • swl/: 用于存放自身并不具有獨立運算能力,必須依靠CPU才能實現的軟件node
  • csl/:用于存放主要負責camx與camera driver的通訊模塊,為camx提供了統一的Camera driver控制接口

Chi-Cdk子目錄:

  • chioverride/: 用于存放CHI實現的核心模塊,負責與camx進行交互并且實現了CHI的總體框架以及具體的業務處理。
  • bin/: 用于存放平臺相關的配置項
  • topology/: 用于存放用戶自定的Usecase xml配置文件
  • node/: 用于存放用戶自定義功能的node
  • module/: 用于存放不同sensor的配置文件,該部分在初始化sensor的時候需要用到
  • tuning/: 用于存放不同場景下的效果參數的配置文件
  • sensor/: 用于存放不同sensor的私有信息以及寄存器配置參數
  • actuator/: 用于存放不同對焦模塊的配置信息
  • ois/: 用于存放防抖模塊的配置信息
  • flash/: 存放著閃光燈模塊的配置信息
  • eeprom/: 存放著eeprom外部存儲模塊的配置信息
  • fd/: 存放了人臉識別模塊的配置信息

三、CamX組件之前的關系

?

Usecase:一個Usecase代表了某個特定的圖像采集場景,比如人像場景,后置拍照場景等等,在初始化的時候通過根據上層傳入的一些具體信息來進行創建,這個過程中,一方面實例化了特定的Usecase,這個實例是用來管理整個場景的所有資源,同時也負責了其中的業務處理邏輯,另一方面,獲取了定義在XML中的特定Usecase,獲取了用于實現某些特定功能的pipeline。

Feature:在Usecase中,Feature是一個可選項,如果當前用戶選擇了HDR模式或者需要在Zoom下進行拍照等特殊功能的話,在Usecase創建過程中,便會根據需要創建一個或者多個Feature,一般一個Feature對應著一個特定的功能,如果場景中并不需要任何特定的功能,則也完全可以不使用也不創建任何Feature。

Session:每一個Usecase或者Feature都可以包含一個或者多個Session,每一個Session都是直接管理并負責了內部的Pipeline的數據流轉,其中每一次的Request都是Usecase或者Featuret通過Session下發到內部的Pipeline進行處理,數據處理完成之后也是通過Session的方法將結果給到CHI中,之后是直接給到上層還是將數據封裝下再次下發到另一個Session中進行后處理,這都交由CHI來決定。

Pipeline:Session和Pipeline是一對多的關系,通常一個Session只包含了一條Pipeline,用于某個特定圖像處理功能的實現,但是也不絕對,比如FeatureMFNR中包含的Session就包括了三條pipeline,又比如后置人像預覽,也是用一個Session包含了兩條分別用于主副雙攝預覽的Pipeline,主要是要看當前功能需要的pipeline數量以及它們之間是否存在一定關聯。

Node:根據上面關于Pipeline的定義,它內部包含了一定數量的Node,并且實現的功能越復雜,所包含的Node也就越多,同時Node之間的連接也就越錯綜復雜,比如后置人像預覽虛化效果的實現就是將拿到的主副雙攝的圖像通過RTBOfflinePreview這一條Pipeline將兩幀圖像合成一幀具有虛化效果的圖像,從而完成了虛化功能。

最后Pipeline中的Node的連接方式是通過XML文件中的Link來進行描述的,每一個Link定義了一個輸入端和輸出端分別對應著不同Node上面的輸入輸出端口,通過這種方式就將其中的一個Node的輸出端與另外一個Node的輸入端,一個一個串聯起來,等到圖像數據從Pipeline的起始端開始輸入的時候,便可以按照這種定義好的軌跡在一個一個Node之間進行流轉,而在流轉的過程中每經過一個Node都會在內部對數據進行處理,這樣等到數據從起始端一直流轉到最后一個Node的輸出端的時候,數據就經過了很多次處理,這些處理效果最后疊加在一起便是該Pipeline所要實現的功能,比如降噪、虛化等等。?

參考優秀博客:

深入理解Android相機體系結構_深入理解android 相機-CSDN博客

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/163495.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/163495.shtml
英文地址,請注明出處:http://en.pswp.cn/news/163495.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

如何正確接入API接口通過淘寶商品ID和sku ID獲取到淘寶商品SKU信息接口,可獲取sku價格,sku銷量,sku圖片及sku庫存參數等

接入API接口的正確方式可能因API的具體要求而有所不同,但一般來說,以下是一些通用的步驟: 獲取API文檔:API文檔通常包括API的請求方式、請求參數、響應格式等信息。您需要仔細閱讀文檔,了解API的具體要求和使用方式。…

MDK AC5和AC6是什么?在KEIL5中添加和選擇ARMCC版本

前言 看視頻有UP主提到“AC5”“AC6”這樣的詞,一開始有些不理解,原來他說的是ARMCC版本。 keil自帶的是ARMCC5,由于ARMCC5已經停止維護了,很多開發者會選擇ARMCC6。 在維護公司“成年往事”項目可能就會遇到新KEIL舊版本編譯器…

springboot動態加載驅動

DynamicDriverUtil: package com.zy.fastdync.demos.web;import java.io.File; import java.net.URL; import java.net.URLClassLoader; import java.sql.*; import java.util.Properties; import java.util.logging.Logger;public class DynamicDriverUtil {// 動態加載jdbc驅…

玻色量子“揭秘”之可滿足性問題(SAT)與QUBO建模

? 摘要:布爾可滿足性問題(Boolean Satisfiability Problem,簡稱SAT問題)是邏輯學和計算機科學中的一個問題,它的目的是確定是否存在一種解釋,使給定的布爾公式成立。換句話說,它詢問給定布爾公…

SpringBoot面試之SpringBoot自動裝配原理

SpringBoot自動裝配原理 背景 最近因為各種原因,我又重新加入到了找工作的大軍當中。昨天在面試的時候與面試官聊到我們項目都是基于SpringBoot開發的,然后面試官就順口問了句:”SpringBoot項目會引入許多的starter,比如&#x…

前端 計算機基礎篇 ( 二 )

文章目錄 websockt及原理ipv4和ipv6的區別線程和進程的區別cdn原理緩存所涉及的http狀態碼緩存的時候設置 no-store和no-cache和max-age0這幾個有什么區別token一般存放在哪兒怎么設置強緩存和協商緩存強緩存:1. 使用 Cache-Control 頭字段: 協商緩存&am…

C++復制構造函數中的對象形參只能是引用的形式

這是一個簡單的復制構造函數的應用&#xff1a; #include <bits/stdc.h> using namespace std;class A { public:A() {cout << "創建對象&#xff08;默認構造函數&#xff09;\n";}A(A & a) { // 最好是&#xff1a;const A & acout << …

C語言打字游戲案例

#include <stdio.h> #include <stdlib.h> #include <time.h>int main() {// 設置隨機數種子srand((unsigned int)time(NULL));char c[201] { 0 }; // 加上一個 \0結束符位置// 產生隨機數for (int i 0; i < 20; i){c[i] rand() % 26 a;}printf("…

Flutter和Android的混合跳轉

1、項目特點 項目是Flutter作為主工程&#xff0c;將Android module或SDK作為模塊嵌入到flutter中&#xff0c;與通常所熟悉的Android&#xff08;或iOS&#xff09;工程將flutter 為module嵌入到工程中有所不同。 2、業務需求 任意界面間的跳轉&#xff0c;不管是flutter頁…

工作中死循環害死人

背景&#xff1a;研發的一段代碼&#xff0c;循環一直沒有跳出&#xff0c;導致其他依賴邏輯有問題&#xff0c;生產事故導致9萬左右數據不正常。 這里while&#xff08;true&#xff09;真的不要輕易用 &#xff0c;后來研發改動限制mysql的id切分步長&#xff0c;控制不會有數…

去大連發展還是去蘇州

公司要搬到蘇州&#xff0c;你是跟隨公司去蘇州發展&#xff0c;還是留在大連另尋出路&#xff1f;

【RtpRtcp】1: webrtc m79:audio的ChannelReceive 創建并使用

m79中,RtpRtcp::Create 的調用很少 不知道誰負責創建ChannelReceiveclass ChannelReceive : public ChannelReceiveInterface,public MediaTransportAudioSinkInterface {接收編碼后的音頻幀:接收rtcp包:

linux端無法magic上網,該怎么處理

可以打開網址&#xff1a;登錄 — iKuuu VPN 不用重新安裝&#xff0c;再次配置一下即可。

深入了解前饋網絡、CNN、RNN 和 Hugging Face 的 Transformer 技術!

一、說明 本篇在此對自然語言模型做一個簡短總結&#xff0c;從CNN\RNN\變形金剛&#xff0c;和抱臉的變形金剛庫說起。 二、基本前饋神經網絡&#xff1a; 讓我們分解一個基本的前饋神經網絡&#xff0c;也稱為多層感知器&#xff08;MLP&#xff09;。此代碼示例將&#xff1…

Web應用系統的小安全漏洞及相應的攻擊方式

1 寫作目的 本文講述一個簡單的利用WebAPI來進行一次基本沒有破壞力的“黑客”行為。 主要目的如下&#xff1a; 了解什么叫安全漏洞知道什么是api了解一些獲取api的工具通過對API的認識了解白盒接口測試基本概念和技術 免責聲明&#xff1a; 本文主要是以學習交流為目的…

C++ ,VCPKG那些事

玩過C都知道&#xff0c;熟悉三方庫對開發工作的重要性&#xff0c;尋找同步更新、穩定、權威的庫源更是每一位開發者經常要做的功課&#xff0c;諸如赫赫有名的boost,google SDK、騰迅sdk、阿里庫&#xff0c;vcpkg等等&#xff0c;這里要說的就是VCPKG&#xff0c;以下是記錄…

盤點63個Python登錄第三方源碼Python愛好者不容錯過

盤點63個Python登錄第三方源碼Python愛好者不容錯過 學習知識費力氣&#xff0c;收集整理更不易。 知識付費甚歡喜&#xff0c;為咱碼農謀福利。 鏈接&#xff1a;https://pan.baidu.com/s/1l7oooH9YovHmWzQ_58FRdg?pwd8888 提取碼&#xff1a;8888 項目名稱 A headless…

11-23 SSM4

Ajax 同步請求 &#xff1a;全局刷新的方式 -> synchronous請求 客戶端發一個請求&#xff0c;服務器響應之后你客戶端才能繼續后續操作&#xff0c;請求二響應完之后才能發送后續的請求&#xff0c;依次類推 有點&#xff1a;服務器負載較小&#xff0c;但是由于服務器相應…

Vue3+Ts實現聊天機器人(chatBot-附代碼)

一&#xff1a;項目介紹 本次實驗主要涉及到的技術是 Vue3 Ts&#xff0c;當然其中也有部分是 Vue2 格式的代碼以及 json 和 CSS 布局等。本來是想仿照 文心一言 來開發的一個聊天機器人案例。結果由于時間不足&#xff0c;可能只是做出來了一個半成品。不過核心功能是有的。由…

淺談安科瑞智能照明系統在馬來西亞國家石油公司項目的應用

摘要&#xff1a;隨著社會經濟的發展及網絡技術、通信技術的提高&#xff0c;人們對照明設計提出了新的要求&#xff0c;它不僅要控制照明光源的發光時間、 亮度&#xff0c;而且與其它系統來配合不同的應用場合做出相應的燈光場景。本文介紹了馬亞西亞石油公司智能照明項目的應…