Filter加入Filter Graph后,由Filter Graph对其进行控制,完成需要的操作。但是Filter之间并不是直接相连的。Filter只完成对数据的处理,在Filter Graph中数据的接收和输出并不是完全由Filter自身完成的。这里需要介绍另一个COM组件—Pin。Pin分为输入Pin和输出Pin两种,分别完成数据的输入和输出工作,它是Filter处理数据的来源和去向。Filter之间连接事实上是Filter上Pin的连接,而且连接的两个Filter要在同一个Filter Graph中。连接的方向一般总是由上一级的Filter(Upstream Filter)的输出Pin连接下一级Filter(Downstream Filter)的输入Pin。连接成功后数据就沿着Filter链路,经由一系列的输入输出Pin在Filter Graph中传递。Pin的连接过程实际上是连接双方使用的媒体类型的一个"协商"过程,如下图所示:
整个连接过程的步骤大致如下:
- 1)Filter Graph Manager在输出Pin上调用IPin::Connect(输入Pin的指针作为参数)
- 2)如果输出Pin接受连接,则调用输入Pin上的IPin::ReceiveConnection;
- 3)如果输入Pin也接受这次连接,则双方连接成功
参考:
https://www.yuque.com/docs/share/baeadc02-c9ad-4702-969a-5780fe9dba73