ElliottZC

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  11 随笔 :: 0 文章 :: 0 评论 :: 0 Trackbacks

1、DirectShow的基本工作原理是:将单元组件——Filter串联在一起,然后交由Filter Graph Manager统一控制,系统的一些输入设备、输出设备啊都可以看作是Filter。其实,DirectShow的基本工作单元就是Filter,如:采集设备也是Filter,DirectShow用特殊的包装Filter对它们进行了包装。

WDM Video Capture Filter是WDM驱动模型的采集设备Filter,实现文件是kswdmcap.ax

VFW Capture Filter是VFW驱动模型的采集设备Filter,实现文件是qcap.dll

2、采集设备Filter的不同注册目录。Video在Video Capture Sources目录,Audio在Audio Capture Sources目录下,另外WDM Streaming Capture Devices目录包括了以上两个目录的设备以及另外一些采集设备。

3、设备枚举的过程大致如下:

(1)创建一个系统枚举组件(CLSID_SystemDeviceEnum),并获得ICreateDevEnum接口。使用CoCreateInstance函数。

(2)使用接口方法ICreateDevEnum::CreateClassEnumerator为指定目录创建一个枚举器,即IEnumMoniker对象,同时获得IEnumMoniker接口。

(3)使用接口方法IEnumMoniker::Next枚举指定类型目录下所有的设备标识(DeviceMoniker)。每个设备标识对象上都实现了IMoniker接口。实际上可以认为每个设备就是一个IMoniker,它从IEnumMoniker::Next函数中获得实际值,或者说实例,然后可以取得设备的一些属性。

(4)调用IMoniker::BindToStorage之后就可以访问设备标识的属性集了。

(5)调用IMoniker::BindToObject将某个设备标识绑定到一个DirectShow Filter,然后调用IFilterGraph::AddFilter加入到Filter Graph中,这个设备就可以参与工作了。

posted on 2007-07-19 13:47 ElliottZC 阅读(523) 评论(0)  编辑 收藏 引用 所属分类: Directx