DirectShow 的几个接口说明
(1) IGraphBuilder接口
用于构造Filter Graph的接口,建立和管理一系列的Filter,过滤和处理源媒体流。
(2) IMediaControl接口
用于控制多媒体流在Filter Graph中的流动,如流的启动和停止。
(3) IMediaEvent接口
用于捕获播放过程中发生的事件,并通知应用程序,如EC_COMPLETE等。
(4) IVideoWindow接口
用于控制视频窗口的属性。
(5) IMeadiaSeeking接口
用于查找媒体的接口,定位流媒体,控制多媒体数据播放提供精确控制。
(6) IBaseFilter接口
从ImediaFilter接口继承,用来定义一个具体的过滤器指针,并对多媒体数据进行处理。
(7) IPin接口
用于管理两个过滤器之间的Pin,从而连接过滤器。
(8) IsampleGrabberCB接口
是Sample Grabber过滤器的一个接口,用于当流媒体数据通过过滤器时进行采样以获得帧图象。
Filter必须加入到Filter Graph并接入到工作链路中才能发挥作用。
如想绕过Filter Graph而直接使用Filter实现的功能模块,那就要将Filter功能
移植成DirectX媒体对象(DMO)。
Filter有3种状态:停止、暂停和运行。
Filter Chain是相互连接着的一条Filter链路,并且链路中的每个Filter全都有一个处于“已连接”状态的
输入Pin,至多有一个处于“已连接”状态的输出Pin,这条Filter链路中的数据流不依赖链路外的其他Filter。
Filter Chain通过IFilterChain接口来进行相关操作。
当Filter Graph处于运行状态下,Filter Chain可以在运行和停止状态之间切换;
当Filter Graph处于暂停状态下,Filter Chain可以在暂停和停止状态之间切换。
Filter Chain只有两种状态转换。
Filter的数据传送
Filter之间以Sample的形式传送数据。
Sample是一个封装了一定大小数据内存的COM组件。
用于数据传输的一般是输入pin上实现的IMemInputPin接口。