我有一个自定义源过滤器,通过从dshow基类实现CSource
和CSourceStream
来实现。它使用IFilterMapper2::RegisterFilter
方法以不同的名称多次导出。
现在,在我的过滤器中,我想(尽快)知道正在打开哪个过滤器的已注册实例。
例如,假设我有一个模拟虚拟网络摄像头的DLL。同一个dll导出过滤器的两个实例,因此在(比方说)Skype中我可以选择虚拟摄像机#1 和虚拟摄像机#2 。在我的CSource
或CSourceStream
的构造函数中,我想知道它是虚拟凸轮#1 还是虚拟凸轮#2 正在建设中。可以这样做吗?
答案 0 :(得分:2)
没有记录的方法,但有一种解决方法。由于DirectShow稳定,它应该可以正常工作。
在您的过滤器类中覆盖IPersistPropertyBag::Load
,并使用提供的IPropertyBag::Read
读取映射到从HKEY_LOCAL_MACHINE\SOFTWARE\Classes...\CLSID_VideoInputDeviceCategory\Instance\<your-instance>
读取的注册表。因此,您可以在此处输入您需要的所有身份证明,并使其可以访问。
请注意,这是从应用程序的BindToObject
调用中调用的。
我在由IP摄像机http://alax.info/blog/1233
支持的虚拟视频输入中执行此操作