吴忠躺衫网络科技有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

深入理解Camera的整體五層架構

新機器視覺 ? 來源:csdn ? 2024-04-25 14:41 ? 次閱讀

相機架構概覽

Android系統利用分層思想,將各層的接口定義與實現分離開來,以接口作為各層的脈絡連接整體框架,將具體實現的主導權交由各自有具體實現需求的平臺廠商或者Android 開發者,這樣既做到把控全局,也給予了眾多開發者足夠大的創作空間,這體現出了一個優秀的開源系統應有的胸懷和遠見。其中,谷歌根據職能的不同將Camera框架一共劃分成了五層,分別是App、Service、Provider、Driver以及Hardware,下面的Camera的整體架構圖很清晰地顯示出了其五層架構以及相互的關聯接口。

219a7d46-0224-11ef-a297-92fbcf53809c.jpg

程序員Android轉于網絡

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,微信公眾號:新機器視覺】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    深入理解SD卡原理和其內部結構總結

    深入理解SD卡原理和其內部結構總結
    發表于 08-18 11:11

    深入理解Android

    深入理解Android
    發表于 08-20 15:30

    深入理解和實現RTOS_連載

    和trcohili的帖子。深入理解和實現RTOS_連載1_RTOS的前生今世今天發布的是第一篇,"RTOS的前生今世"。通過軟件系統結構的比對簡要的介紹rtos為何而生。如果讀者對RTOS
    發表于 05-29 11:20

    深入理解和實現RTOS_連載

    和trcohili的帖子。trochili rtos完全是作者興趣所在,且行且堅持,比沒有duo。深入理解和實現RTOS_連載1_RTOS的前生今世今天發布的是第一篇,"RTOS的前生今世"
    發表于 05-30 01:02

    深入理解Linux網絡技術內幕》(EN)

    深入理解Linux網絡技術內幕》(EN)
    發表于 02-06 15:17

    深入理解lte-a

    深入理解LTE-A
    發表于 02-26 10:21

    如何深入理解ES6之函數

    深入理解ES6之函數
    發表于 05-22 07:40

    深入理解STM32

    時鐘系統是處理器的核心,所以在學習STM32所有外設之前,認真學習時鐘系統是必要的,有助于深入理解STM32。下面是從網上找的一個STM32時鐘框圖,比《STM32中文參考手冊》里面的是中途看起來清晰一些:重要的時鐘:PLLCLK,SYSCLK,HCKL,PCLK1,...
    發表于 08-12 07:46

    對棧的深入理解

    為什么要深入理解棧?做C語言開發如果棧設置不合理或者使用不對,棧就會溢出,溢出就會遇到無法預測亂飛現象。所以對棧的深入理解是非常重要的。注:動畫如果看不清楚可以電腦看更清晰啥是棧先來看一段動畫:沒有
    發表于 02-15 07:01

    為什么要深入理解

    [導讀] 從這篇文章開始,將會不定期更新關于嵌入式C語言編程相關的個人認為比較重要的知識點,或者踩過的坑。為什么要深入理解棧?做C語言開發如果棧設置不合理或者使用不對,棧就會溢出,溢出就會遇到無法
    發表于 02-15 06:09

    深入理解Android之資源文件

    深入理解Android之資源文件
    發表于 01-22 21:11 ?22次下載

    深入理解Android》文前

    深入理解Android》文前
    發表于 03-19 11:23 ?0次下載

    深入理解Android:卷I》

    深入理解Android:卷I》
    發表于 03-19 11:23 ?0次下載

    深入理解Android網絡編程

    深入理解Android網絡編程
    發表于 03-19 11:26 ?1次下載

    深入理解MOS管電子版資源下載

    深入理解MOS管電子版資源下載
    發表于 07-09 09:43 ?0次下載
    bet365体育开户| 高尔夫百家乐的玩法技巧和规则| 富田太阳城二期| 百家乐官网网站那个好| A8百家乐娱乐平台| 澳门百家乐官网博彩网| 新手百家乐指点迷津| 南城县| 尊龙国际娱乐网| 百家乐官网换房| 赌博百家乐规则| bet365 网址| 百家乐官网赌博是否违法| 百家乐连线游戏下载| 亲朋棋牌大厅下载| 百家乐官网007| 威尼斯人娱乐网网上百家乐的玩法技巧和规则 | 威尼斯人娱乐诚| 千亿国际娱乐城| 百樂坊百家乐的玩法技巧和规则 | 百家乐蓝盾在线现| 菲律宾在线游戏| 风水24龙| 澳门百家乐官网娱乐城怎么样| 棋牌类游戏| 百家乐改单软件| 玩百家乐官网去哪个娱乐城最安全 | 苗栗县| 亚洲皇冠| tt娱乐城备用网| 二八杠棋牌| 深圳百家乐的玩法技巧和规则 | 百家乐投注技巧球讯网| 百家乐官网发牌牌规| 百家乐官网平投注法| 平远县| 周至县| 延寿县| 通州市| 阿克苏市| 娱乐城在线|