關於camera 構架設計的一點看法

camera的構架目前來看有兩種,一種是集中式管理,比如說建立一個引擎,引擎向上提供接口,向下管理所有模塊。把camera的所有功能劃分爲不同的模塊,又引擎統一管理。模塊的結構就比較隨意了,可以統一接口,也可以對每個模塊實現不同的接口。引擎需要詳細知道每個模塊的細節,然後仔細的安排模塊的使用。

另一種比較新奇的設計思路是有一定的互聯網思維的,儘可能的讓模塊自己來決定自己的事情。儘可能的去中心化。模塊的依賴通過模塊的連接來決定。這樣的模塊有統一的接口和格式。可以直接採用linux的open max, 或者自定義一套模塊接口,模塊中有端口。通過端口把模塊連接起來。又把模塊掛在總線上。每一個條端口的連接就是一個流,又把這些流用pipeline 來管理。

每啓動一個camera 就創建一個camera的會話,有這個會話來管理這個camera的一切事物。對於每一個會話,模塊是共享的,是camera的硬件資源,或其他資源,比如facedetec等算法資源。

那麼如何定義模塊的結構呢。

1 端口 ,端口屬於模塊,如果這個模塊有隻有 src 端口,那麼這個模塊就是src 模塊,只有sink 端口,就是sink模塊,否則就是中間模塊。沒有端口的模塊不能連接到流中,但可以完成一些其他的功能,比如接收引擎的設置,報告事件到bus等。連接到流中的端口,也就是說流事件(set get)主要通過port來處理。而來自於引擎的(get set)通過模塊來處理,當然port也可以把事件交給module來處理,模塊內部的端口可以通過模塊來建立關係,也可以建立內部連接,端口有關get set process。

2 模塊線程,每一個模塊可以有一個線程來處理模塊的事情。一個線程對應一個隊列,線程就是從隊列中取出數據處理,然後應答回去。

3 總線回調,當一個模塊向總線註冊時,總線向其提供一個回調函數,當模塊有事件發生時,調用這個函數向 bus 發消息。然後總線把這個消息提交給管道,管道把這消息送着流發下去。

4 模塊的get 和 set , process。

管道的抽象與功能

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

原文鏈接:

http://www.cnblogs.com/soc-linux-driver/p/3682783.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章