相機架構概覽
Android系統利用分層思想,將各層的接口定義與實現分離開來,以接口作為各層的脈絡連接整體框架,將具體實現的主導權交由各自有具體實現需求的平臺廠商或者Android 開發者,這樣既做到把控全局,也給予了眾多開發者足夠大的創作空間,這體現出了一個優秀的開源系統應有的胸懷和遠見。其中,谷歌根據職能的不同將Camera框架一共劃分成了五層,分別是App、Service、Provider、Driver以及Hardware,下面的Camera的整體架構圖很清晰地顯示出了其五層架構以及相互的關聯接口。
Camera App
應用層處于整個框架的頂端,承擔著于用戶直接進行交互的責任,承接來自用戶直接或者間接的比如預覽/拍照/錄像等一系列具體需求,一旦接收到用戶相關UI操作,便會通過Camera Api v2標準接口將需求發送至Camera Framework部分,并且等待Camera Framework回傳處理結果,其中包括了圖像數據以及整體相機系統狀態參數,之后將結果以一定方式反饋給用戶,達到記錄顯示種種美好瞬間的目的。
Camera Framework
該層主要位于Camera App與Camera Service之間,以jar包的形式運行在App進程中,它封裝了Camera Api v2接口的實現細節,暴露接口給App進行調用,進而接收來自App的請求,同時維護著請求在內部流轉的業務邏輯,最終通過調用Camera AIDL跨進程接口將請求發送至Camera Service中進行處理,緊接著,等待Camera Service結果的回傳,進而將最終結果發送至App。
Camera Service
該層位于Camera Framework與Camera Provider之間,作為一個獨立進程存在于Android系統中,在系統啟動初期會運行起來,它封裝了Camera AIDL跨進程接口,提供給Framework進行調用,進而接收來自Framework的圖像請求,同時內部維護著關于請求在該層的處理邏輯,最終通過調用Camera HIDL跨進程接口將請求再次下發到Camera Provider中,并且等待結果的回傳,進而將結果上傳至Framework中。
Camera Provider
該層位于Camera Service與Camera Driver之間,作為一個獨立的進程存在于Android系統中,同時在系統啟動初期被運行,提供Camera HIDL跨進程接口供Camera Service進行調用,封裝了該接口的實現細節,接收來自Service的圖像請求,并且內部加載了Camera HAL Module,該Module由OEM/ODM實現,遵循谷歌制定的標準Camera HAL3接口,進而通過該接口控制Camera HAL部分,最后等待Camera HAL的結果回傳,緊接著Provider通過Camera HIDL接口將結果發送至Camera Service。
CamX-CHI(Camera HAL)
該部分是高通對谷歌Camera HAL3接口的實現,以so庫的形式被加載至Camera Provider中,之前采用的是QCamera & MM-Camera架構,但是為了更好靈活性和可擴展性,而今高通又提出了CamX-CHI架構,該架構提供HAL3接口給Provider進行調用,接收來自Provider的請求,而內部對HAL3接口進行了實現,并且通過V4L2標準框架控制著相機驅動層,將請求下發至驅動部分,并且等待結果回傳,進而上報給Camera Provider。
CamX-CHI架構由CamX和CHI兩個部分組成,CamX負責一些基礎服務代碼的實現,不經常改動,CHI負責實現一些可擴展性和定制化的需求,方便OEM/ODM添加自己的擴展功能。CamX主要包括實現HAL3入口的hal模塊,實現與V4L2驅動交互的csl模塊,實現硬件node的hwl和實現軟件node的swl。CHI通過抽象出Usecase、Feature、Session、Pipeline、Node的概念,使廠商可以通過實現Node接口來接入自己的算法,并通過XML文件靈活配置Usecase、Pipeline、Node的結構關系。
Camera Driver
Linux為視頻采集設備制定了標準的V4L2接口,并在內核中實現了其基礎框架V4L2 Core。用戶空間進程可以通過V4L2接口調用相關設備功能,而不用考慮其實現細節。V4L2提出了總設備和子設備的概念,并通過media controller機制向用戶空間暴露自己的硬件拓撲結構。視頻采集設備驅動廠商按照V4L2 Core的要求開發自己的驅動程序,只需要實現相應的結構體和函數接口并調用注冊函數注冊自己就行。
在高通平臺上,高通對相機驅動部分進行了實現,利用了V4L2框架的可擴展特性,設計出了一套獨特的KMD框架。在該框架內部主要包含了三個部分,CRM、Camera Sync以及一系列子設備,首先,作為框架頂層管理者,CRM創建了一個V4L2主設備用來管理所有的子設備,并且暴露設備節點video0給用戶空間,同時內部維護著整個底層驅動業務邏輯。其次,Camera Sync創建了一個V4L2主設備,同時暴露了設備節點video1給用戶空間,主要用于向用戶空間反饋圖像數據處理狀態。最后,子設備模塊被抽象成v4l2_subdev設備,同樣也暴露設備節點v4l2-subdev給用戶空間進行更精細化的控制。另外,在整個框架初始化的過程中,通過media controller機制,保持了在用戶空間進行枚舉底層硬件設備的能力。
Camera Hardware
相機硬件處在整個相機體系的最底層,是相機系統的物理實現部分,該部分包括鏡頭、感光器、ISP三個最重要的模塊,還有對焦馬達、閃光燈、濾光片、光圈等輔助模塊。鏡頭的作用是匯聚光線,利用光的折射性把射入的光線匯聚到感光器上。感光器的作用是負責光電轉換,通過內部感光元件將接收到的光信號轉換為電子信號進而通過數電轉換模塊轉為數字信號,并最后傳給ISP。ISP負責對數字圖像進行一些算法處理,如白平衡、降噪、去馬賽克等。
通過上面的介紹,我們可以發現,谷歌通過以上五級分層,形成了整個相機框架體系,其中層與層之間通過行業協會、開源社區或者谷歌制訂的標準接口進行連接,上層通過調用標準接口下發請求到下層,下層負責對標準接口進行實現,最終將請求再次封裝并調用下一層級的對外接口下發到下層。所以總得來說,谷歌使用標準接口作為骨架搭建整體框架,而其具體實現交由各層自己負責,從整體上來看,職責劃分明確,界限分明,這樣的設計,一來利用標準接口,保持了整個框架業務正常流轉,二來極大地降低了各層耦合度,保持了各層的相互獨立,最終讓整個框架處于一個穩定同時高效的運行狀態。
審核編輯:黃飛
-
Android
+關注
關注
12文章
3945瀏覽量
127936 -
Linux
+關注
關注
87文章
11345瀏覽量
210399 -
Camera
+關注
關注
0文章
79瀏覽量
20898 -
開源系統
+關注
關注
0文章
25瀏覽量
13744
原文標題:深入理解Camera 二 (相機架構概覽)
文章出處:【微信號:vision263com,微信公眾號:新機器視覺】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論