2012-11-15 185 views
1

目前我正在開發一個DirectShow應用程序,幫助用戶配置他們的電視採集卡。此配置稍後將在另一個程序中使用。DirectShow:檢測相關過濾器並添加這些過濾器?

我使用ICaptureGraphBuilder2::RenderStream方法呈現視頻和音頻。我的圖表來源取決於用戶選擇哪個設備,但這主要是WDM Video Capture Filter類別中的設備。

這是我的問題。某些設備無法工作,因爲它們不僅需要源過濾器。例如,我有一個網絡攝像頭,它具有獨立的音頻過濾器。另一個例子,我有一個電視調諧卡,它有自己的編碼器/複用器。

由於我的應用程序應該可以與大多數捕獲設備一起工作,有沒有通用方法來檢測圖形工作所需的附加過濾器是否在源過濾器旁邊?

我可以通過所有過濾器列舉並檢查他們的名字是彼此相似,但名字不能被信任......

回答

0

的DirectShow作爲一個框架基本上是一個靈活的DIY設置的過濾器。你有它們的分散集合,並且它們(一些)也被分類,在列舉一個類別時,你可以對包含的特徵集做出一些假設。

特別是,視頻和音頻(以及其他媒體類型)資源之間沒有直接的對應關係。您可以做的是提示用戶選擇設備(例如作爲應用程序配置的一部分),並假設它們是相關的併發送同步內容(如果適用)。

另一個常見任務是連接一個交叉開關,您可能有興趣與電視調諧器一起工作。 Capture Graph Builder對象中有一個幫助器,您可以利用它。請參閱ICaptureGraphBuilder2::FindInterface中的「Supporting Filters」備註。

+0

提示用戶輸入音頻過濾器聽起來像是唯一的選擇。順便說一下,'ICaptureGraphBuilder2 :: RenderStream'也會自動添加一些過濾器,例如交叉開關。 –