目錄
一、概述
二、目錄
三、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博客
?