C++ 在graphstudio中,连接两个过滤器时没有错误,但它们尚未连接,这意味着什么

C++ 在graphstudio中,连接两个过滤器时没有错误,但它们尚未连接,这意味着什么,c++,directshow,C++,Directshow,当我尝试连接graphstudio中两个不匹配的过滤器时,通常会得到一个错误代码。 但是,在我的情况下,如果我尝试将我的筛选器连接到另一个筛选器,则不会出现错误消息,也不会出现错误 是否已连接,例如过滤器之间没有箭头 根据文档,这就是过滤器的连接方式 连接过程的总体概述如下: 过滤器图形管理器在输出管脚上调用IPin::Connect,并将指针传递到输入管脚 如果输出管脚接受连接,则在输入管脚上调用IPin::ReceiveConnection 如果输入管脚也接受连接,则连接尝试成功,管脚已

当我尝试连接graphstudio中两个不匹配的过滤器时,通常会得到一个错误代码。 但是,在我的情况下,如果我尝试将我的筛选器连接到另一个筛选器,则不会出现错误消息,也不会出现错误 是否已连接,例如过滤器之间没有箭头

根据文档,这就是过滤器的连接方式

连接过程的总体概述如下:

  • 过滤器图形管理器在输出管脚上调用IPin::Connect,并将指针传递到输入管脚

  • 如果输出管脚接受连接,则在输入管脚上调用IPin::ReceiveConnection

  • 如果输入管脚也接受连接,则连接尝试成功,管脚已连接

  • 使用Visual Studio,我可以确保ReceiveConnection返回S_OK


    因此,必须有比这3个步骤更重要的东西,否则它应该可以工作,Pin连接基本上是一个
    IGraphBuilder::Connect
    调用,内部调用是对相关过滤器的
    IPin::Connect
    IPin::ReceiveConnection
    。如果内部调用成功,则调用成功

    稍后,GraphStudio将枚举管脚并检查这些管脚上的管脚连接。如果管脚未报告任何连接,则GraphStudio显示断开连接


    考虑到您之前关于覆盖
    Connect
    方法的问题,我认为您覆盖了错误的方法:您没有在过滤器/pin上进行连接,仍然返回成功代码作为操作状态。

    使用SDK中提供的基类可以节省数周的时间(如CBaseFilter、CBaseOutputPin等),但即使您拒绝使用它们,也只需查看SDK DirectShow samples中的源代码(请参阅BaseClasses文件夹),以了解连接过程中真正应该发生的事情。例如,您的筛选器是否为其示例选择/创建了正确的分配器?