编写source filter最初需要接触的就是 filter的register和unregister,涉及到的函数有两个
DllRegisterServer()
以及
DllUnregisterServer()
在这两个函数中,完成了filter的register和unregister
而其中真正的注册,又是通过IFilterMapper2::RegisterFilter() 和 IFilterMapper2::UnregisterFilter()
来实现的。
我们需要在注册时将Filter放入不同的category,譬如 video capture source / directshow filters (使用GraphEdit可以看到,不同的category下的filters)。注册在video capture source下的filter可以在AMCapture / QQ 等AP,搜索video capture source filters出现。
其中 IFilterMapper2::RegisterFilter()参数:
而Category主要包括:
其中:
CLSID_VideoInputDeviceCategory, 注册到此category后,filter会出现在video capture source category下,被AMCapture / QQ等AP搜索到。
CLSID_LegacyAmFilterCategory, 注册到此category后,filter会出现在 directshow filters category,大部分的filter注册在此category。
需要注意的是 register / unregister 必须在同一个category, 使用同一 REFCLSID, 否则会出现register error。
譬如:
0x80070002 : register / unregister 未在同一个 category
0x80070005 : register / unregister 权限不够 (vista下权限管理,需要在administor下register/unregister filter)