2012-04-17 78 views
1

我有一個自定義的源過濾器,通過執行dshow基類中的CSourceCSourceStream。它使用IFilterMapper2::RegisterFilter方法以不同名稱導出多次。 現在,在我的過濾器中,我想知道(儘快)哪些已註冊的過濾器實例正在被打開。 例如,假設我有一個模擬虛擬攝像頭的dll。同樣的dll導出過濾器的兩個實例,所以在(說)Skype中,我可以選擇虛擬凸輪#1虛擬凸輪#2。在我的CSourceCSourceStream的構造函數中,我想知道它是否是虛擬凸輪#1虛擬凸輪#2正在構建中。這可以做到嗎?DShow源過濾器:我是哪個過濾器實例?

回答

2

有沒有文件記錄的方式,但有一個解決方法。由於DirectShow穩定,它應該可以很好地工作。

在您的過濾器類覆蓋IPersistPropertyBag::Load和您所做的讀取IPropertyBag::Read映射到註冊表從HKEY_LOCAL_MACHINE\SOFTWARE\Classes...\CLSID_VideoInputDeviceCategory\Instance\<your-instance>讀取。所以你可以把你需要的所有標識都放在那裏,並讓它可以訪問。

注意這是從應用程序的BindToObject調用中調用的。

Call Stack

我這樣做在通過IP攝像機的回答http://alax.info/blog/1233

+0

感謝支持虛擬視頻輸入,聲音完美。儘管如此,我仍然遇到了一些困難。我的CSource實現類現在繼承自IPersistPropertyBag,但在我的CVCam :: QueryInterface中,我注意到IPersistPropertyBag接口永遠不會被請求。因此IPersistPropertyBag的方法永遠不會被調用。我錯過了明顯的東西嗎? – 2012-04-18 10:16:23

+0

我能想到的是,你不是指示支持IPersistPropertyBag(在'GetInterface'中)。 – 2012-04-18 10:57:54

+0

如果你的意思是QueryInterface,我是。 'REFIID riid'參數永遠不會等於'IID_IPersistPropertyBag',無論是在我的'CSource',還是'QueryInterface'和'NonDelegatingQueryInterface'方法的'CSourceStream'。 – 2012-04-18 11:09:59