高通camera學習筆記(一)


      高通新的camera驅動架構設計發生了一些變化,借用互聯網上常用的一種結構,大致的原理如此:將camera的所有功能划分為不同的模塊,讓模塊自己來決定自己的事情(高內聚,低耦合),模塊需要有統一的接口和格式。模塊中有端口,通過端口把模塊連接起來,又把模塊掛在總線上。每一個端口的連接就是一個流,把這些流用pipeline來管理。每次啟動一個camera就創建一個會話,由這個會話來管理此camera的一切事物。對於每一個會話,模塊是共享的,它可以是camera的硬件資源也可以是其它資源(如一些軟件算法等資源)。

 

那么如何來定義這個模塊的結構呢?
1.端口——端口屬於模塊,如果這個模塊只有source端口,那么它就是一個src模塊;如果只有sink端口就是sink模塊,如果都有就是中間模塊。沒有端口的模塊是不能連接到流中的,但他可以完成一些其他的功能,比如接收引擎的設置,報告事件到bus等。連接到流中的端口,也就是說流事件(set/get)主要通過端口來處理。而來自於引擎的(set/get)通過模塊來處理,當然端口也可以把事件交給模塊來處理。模塊內部的端口可以通過模塊來建立關系,也可以建立內部的連接,端口有關get/set process。
2.模塊線程——每個模塊可以有一個線程來處理模塊的事情。一個線程對應一個隊列,線程就是從隊列中取出數據處理,然后應答回去。
3.總線回調——擋一個模塊向總線注冊時,總線向其提供一個回調函數,當模塊有事件發生時,調用這個函數向bus發消息,然后總線把這個消息提交給管道,管道把這個消息順着流發下去。
4.模塊的get、set以及process。

 

管道、引擎與會話
管道有兩端,一端用於讀,一端用於寫。camera引擎負責對管道的監控,而會話管理camera引擎。

 

從代碼結構上來看這種新的驅動架構
高通的camera deamon代碼放置在vendor\qcom\proprietary\mm-camera目錄下,而此目錄下的mm-camera2就是新的camera架構位置,進入里面可以看到media-controller、server-imaging、server-tuning及其它幾個目錄,我們這里需要關注的就是media-controller目錄。

media-controller
    |- mct——應該就是camera的引擎?里面包含了引擎、pipiline、bus、module、stream及event等定義及封裝。
    |- modules——這里面就是划分好的一些模塊代碼,各模塊大致功能如下
        |- sensor —— sensor 的驅動模塊?                                                                                   —— src模塊
        |- iface —— ISP interface模塊                                                                                         —— inter模塊
        |- isp —— 主要是ISP的處理,其內部又包含了眾多的模塊                                                         —— inter模塊
        |- stats —— 一些統計算法模塊,如3A,ASD,AFD,IS,GRRO等數據統計的處理                             —— sink模塊
        |- pproc —— post process處理                                                                                        —— inter模塊
        |- imglib —— 主要是圖片的一些后端處理,如HDR等                                                              —— sink模塊
以上各模塊內部又包含了眾多的模塊,具體需要看代碼分析。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM