DirectShow 的幾個接口說明
(1) IGraphBuilder接口
用于構造Filter Graph的接口,建立和管理一系列的Filter,過濾和處理源媒體流。
(2) IMediaControl接口
用于控制多媒體流在Filter Graph中的流動,如流的啟動和停止。
(3) IMediaEvent接口
用于捕獲播放過程中發生的事件,并通知應用程序,如EC_COMPLETE等。
(4) IVideoWindow接口
用于控制視頻窗口的屬性。
(5) IMeadiaSeeking接口
用于查找媒體的接口,定位流媒體,控制多媒體數據播放提供精確控制。
(6) IBaseFilter接口
從ImediaFilter接口繼承,用來定義一個具體的過濾器指針,并對多媒體數據進行處理。
(7) IPin接口
用于管理兩個過濾器之間的Pin,從而連接過濾器。
(8) IsampleGrabberCB接口
是Sample Grabber過濾器的一個接口,用于當流媒體數據通過過濾器時進行采樣以獲得幀圖象。
Filter必須加入到Filter Graph并接入到工作鏈路中才能發揮作用。
如想繞過Filter Graph而直接使用Filter實現的功能模塊,那就要將Filter功能
移植成DirectX媒體對象(DMO)。
Filter有3種狀態:停止、暫停和運行。
Filter Chain是相互連接著的一條Filter鏈路,并且鏈路中的每個Filter全都有一個處于“已連接”狀態的
輸入Pin,至多有一個處于“已連接”狀態的輸出Pin,這條Filter鏈路中的數據流不依賴鏈路外的其他Filter。
Filter Chain通過IFilterChain接口來進行相關操作。
當Filter Graph處于運行狀態下,Filter Chain可以在運行和停止狀態之間切換;
當Filter Graph處于暫停狀態下,Filter Chain可以在暫停和停止狀態之間切換。
Filter Chain只有兩種狀態轉換。
Filter的數據傳送
Filter之間以Sample的形式傳送數據。
Sample是一個封裝了一定大小數據內存的COM組件。
用于數據傳輸的一般是輸入pin上實現的IMemInputPin接口。