关于camera 构架设计的一点看法
camera的構(gòu)架目前來看有兩種,一種是集中式管理,比如說建立一個(gè)引擎,引擎向上提供接口,向下管理所有模塊。把camera的所有功能劃分為不同的模塊,又引擎統(tǒng)一管理。模塊的結(jié)構(gòu)就比較隨意了,可以統(tǒng)一接口,也可以對(duì)每個(gè)模塊實(shí)現(xiàn)不同的接口。引擎需要詳細(xì)知道每個(gè)模塊的細(xì)節(jié),然后仔細(xì)的安排模塊的使用。
另一種比較新奇的設(shè)計(jì)思路是有一定的互聯(lián)網(wǎng)思維的,盡可能的讓模塊自己來決定自己的事情。盡可能的去中心化。模塊的依賴通過模塊的連接來決定。這樣的模塊有統(tǒng)一的接口和格式。可以直接采用linux的open max, 或者自定義一套模塊接口,模塊中有端口。通過端口把模塊連接起來。又把模塊掛在總線上。每一個(gè)條端口的連接就是一個(gè)流,又把這些流用pipeline 來管理。
每啟動(dòng)一個(gè)camera 就創(chuàng)建一個(gè)camera的會(huì)話,有這個(gè)會(huì)話來管理這個(gè)camera的一切事物。對(duì)于每一個(gè)會(huì)話,模塊是共享的,是camera的硬件資源,或其他資源,比如facedetec等算法資源。
那么如何定義模塊的結(jié)構(gòu)呢。
1 端口 ,端口屬于模塊,如果這個(gè)模塊有只有 src 端口,那么這個(gè)模塊就是src 模塊,只有sink 端口,就是sink模塊,否則就是中間模塊。沒有端口的模塊不能連接到流中,但可以完成一些其他的功能,比如接收引擎的設(shè)置,報(bào)告事件到bus等。連接到流中的端口,也就是說流事件(set get)主要通過port來處理。而來自于引擎的(get set)通過模塊來處理,當(dāng)然port也可以把事件交給module來處理,模塊內(nèi)部的端口可以通過模塊來建立關(guān)系,也可以建立內(nèi)部連接,端口有關(guān)get set process。
2 模塊線程,每一個(gè)模塊可以有一個(gè)線程來處理模塊的事情。一個(gè)線程對(duì)應(yīng)一個(gè)隊(duì)列,線程就是從隊(duì)列中取出數(shù)據(jù)處理,然后應(yīng)答回去。
3 總線回調(diào),當(dāng)一個(gè)模塊向總線注冊時(shí),總線向其提供一個(gè)回調(diào)函數(shù),當(dāng)模塊有事件發(fā)生時(shí),調(diào)用這個(gè)函數(shù)向 bus 發(fā)消息。然后總線把這個(gè)消息提交給管道,管道把這消息送著流發(fā)下去。
4 模塊的get 和 set , process。
管道的抽象與功能
管道有兩段,一段用于讀,一段用于寫。camera 引擎負(fù)責(zé)對(duì)管道的監(jiān)控。而會(huì)話管理camera 引擎。
?
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/soc-linux-driver/p/3682783.html
總結(jié)
以上是生活随笔為你收集整理的关于camera 构架设计的一点看法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: tomcat的日志不输出日志信息的解决方
- 下一篇: AttachThreadInput