1
是否可以使用已知的視頻捕獲源創建/初始化TFilter對象,而無需使用TSysDevEnum.GetMoniker(...)?如何在不使用TSysDevEnum.GetMoniker的情況下使用已知視頻捕獲源初始化TFilter?
視頻捕獲源的名稱和其他詳細信息是已知的,可以通過GraphEdit篩選器瀏覽器獲取。目的是加快TFilter的初始化並以編程方式將其附加到FilterGraph。
是否可以使用已知的視頻捕獲源創建/初始化TFilter對象,而無需使用TSysDevEnum.GetMoniker(...)?如何在不使用TSysDevEnum.GetMoniker的情況下使用已知視頻捕獲源初始化TFilter?
視頻捕獲源的名稱和其他詳細信息是已知的,可以通過GraphEdit篩選器瀏覽器獲取。目的是加快TFilter的初始化並以編程方式將其附加到FilterGraph。
不,you need to do it via moniker。它取決於支持視頻源過濾器的實際COM類,但幾乎總是沒有獨特的CLSID
,並且不可能通過名字來實例化它。
如果您有綽號顯示名稱,則可以使用MkParseDisplayName
快速獲取IMoniker迂迴枚舉。或者,您可以枚舉名稱並將名稱與您已擁有的名稱進行比較。
要選擇音頻或視頻捕獲設備,請使用系統設備 枚舉器,如主題使用系統設備枚舉器中所述。 系統設備枚舉器返回按設備類別選擇的設備標誌符集合 。一個名字對象是一個COM對象,其中包含有關另一個對象的信息 。 Monikers使應用程序能夠在 的情況下獲取有關對象的信息,而無需實際創建對象。
謝謝。在測試程序中,如果我枚舉CLSID_VideoInputDeviceCategory中的所有可用過濾器,則需要大約10秒來填充該列表。之後,當我選擇一個我想要的,SysDev.GetMoniker(ItemNumber)需要10秒鐘才能返回。或者,如果我在圖形編輯器中構建圖形並保存GRF文件,然後將該文件直接加載到一個vanilla GraphEditor中,結果幾乎是瞬間的!你如何使用MkParseDisplayName? – ssh
很難說爲什麼需要10秒鐘,但是它有什麼問題。除非有什麼被破壞,否則永遠不會這樣。我有一個簡單的實用程序,枚舉這裏的東西[EnumerateVideoCaptureFilterCapabilities](http://trac.assembla.com/roatl-utilities/browser/trunk/EnumerateVideoCaptureFilterCapabilities/Win32/Release),你可以檢查它是否也需要10秒鐘。如果不是,那麼問題可能出現在您的枚舉代碼中? –
['MkParseDisplayName'](http://msdn.microsoft.com/en-us/library/windows/desktop/ms691253%28v=vs.85%29.aspx)很簡單 - 你傳遞字符串(例如「@ device:pnp:\\?\ pci#ven_109e&dev_036e&subsys_18511851&rev_02#4&39c3dd91&0&08f0#{65e8773d-8f56-11d0-a3b9-00a0c9223196} \ global「)在'szUserName'參數中,您將得到您的名字。 –