功能拓撲圖(Functional Topology):
BAD的目標是不管硬體或者接收訊號如何變,它的整體架構可以不做大調整,為此BDA引入功能拓撲圖的概念,它把類似DirectShow Filter的結構作為節點(Node),包含在一個receiver
filter中,因此一個filter可以做很多工作,這取決於該filter包含了哪些node,以及這些node都具備哪些功能。Functional Topology只是描述了一個結構,具體工作分發給了拓撲圖中的各個node。在我們的程式中,外部可見的一個filter:tunner
filter,實際上包含了兩個node,tuner
和demodulator。拓撲圖中的node不是隨便什麼類型都可以的,只有在
BDA Node Category GUIDs列表中列明的node類型,才可以加到圖中去,node的各項功能也都是用註冊分發常式的方法完成。
BDA Node Category GUIDs:
KSNODE_BDA_RF_TUNER
KSNODE_BDA_QAM_DEMODULATOR
KSNODE_BDA_QPSK_DEMODULATOR
KSNODE_BDA_8VSB_DEMODULATOR
KSNODE_BDA_OPENCABLE_POD
KSNODE_BDA_PID_FILTER
KSNODE_BDA_IP_SINK
每種node都有特定的GUID,當network provider filter連上tunner filter時,它會根據GUID尋找相應的node並產生執行個體。Tunner
filter中還使用Template topology 來描述各個PIN和 NODE的類型以及串連方式等資訊。
如所示,整幅圖是一個Functional Topology,tunner node和 demodualator node是兩個node,它們都有特定的GUID,他們都是在network
provider filter連上tunner filter時動態產生的。pin1和tunner node相連而不和demodulator相連,tunner node在 demodulator node之前而不是之後等等資訊是Template
topology決定好的,整個圖的串連也是在network provider filter連上tunner filter時根據Template topology動態完成的。
不過一個filter裡包含幾個node不是硬性規定的,比如上面這幅圖,可以是一個filter裡包含兩個node,也可以拆分成兩個filter,每個filter包含一個node,看自己喜歡。
我們常用的node有Network Provider,Tuner,Demodulator和Capture,Network
Provider目前有很多現成的filter可用,可能做DMB的時候需要去修改這部分,大部分時候直接拿來用就可以;tunner和 demodulator現在是放在同一個filter裡,叫tunner
filter;capture filter是最核心的部分,負責從硬體讀取資料和往後傳資料,一般單獨做成一個filter。BDA還提供了很多其他的node,幫我們做了很多工作。比如PID Filter NODE
實際上做的是demultiplexer filter的工作,不過目前為止我都不用PID Filter NODE,而是用DirectShow中的demultiplexer filter。