关于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 引擎。
?
?
?
轉載于:https://www.cnblogs.com/soc-linux-driver/p/3682783.html
總結
以上是生活随笔為你收集整理的关于camera 构架设计的一点看法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: tomcat的日志不输出日志信息的解决方
- 下一篇: AttachThreadInput