Filter的连接
Filter的连接实际上也就是Filter上Pin的连接。Pin也是一种COM组件,而且每个Pin上都实现了IPin的接口。Pin正是通过这个IPin接口来完成连接的。连接的方向一般总是由上一级Filter(Upstream Filter)的输出Pin指向下一级Filter(Downstream Filter)的输入Pin。Pin的连接实际上是连接双方使用的媒体类型的一个“协商”过程。
连接过程
首先连接Filter的是应用程序,一般通过调用接口方法IFilterGraph::ConnectDirect、IGraphBuilder::Connect、IGraphBuilder::Render或者IGraphBuilder::RenderFile来实现。试图连接的两个Filter必须处在同一个Filter Graph中,对于Filter的加入或者移走,Filter Graph Manager会调用该Filter上的接口方法IBaseFilter::JoinFilterGraph通知。Filter开发人员可以重写IBaseFilter::JoinFilterGraph函数来捕获这个事件。
整个连接过程的步骤大致如下:
(1)Filter Graph Manager在输出Pin上调用IPin::Connect(带输入Pin的指针作为参数);
(2)如果输出Pin接受连接,则调用输入Pin上的IPin::ReceiveConnection;
(3)如果输入Pin也接受这次连接,则双方连接成功。
首先来分析第(1)步在基类函数CBasePin::Connect