流式处理线程和筛选器关系图管理器

[与此页面关联的功能 DirectShow 是一项旧功能。 它已被 MediaPlayerIMFMediaEngine媒体基金会中的音频/视频捕获取代。 这些功能已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能使用 MediaPlayerIMFMediaEngineMedia Foundation 中的音频/视频捕获 ,而不是 DirectShow。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]

当筛选器关系图管理器停止图形时,它会等待所有流式处理线程关闭。 这对筛选器具有以下影响:

  • 筛选器不得从流式处理线程调用 Filter Graph 管理器上的方法。

    筛选器关系图管理器使用关键部分来同步其自己的操作。 如果流式处理线程尝试保留此关键部分,可能会导致死锁。 例如:假设另一个线程停止了图形。 该线程采用筛选器图锁,并等待筛选器停止传递数据。 如果筛选器正在等待锁,则它永远不会停止,从而导致死锁。

  • 筛选器绝不能从流式处理线程 添加RefQueryInterface Filter Graph Manager。

    如果筛选器通过 AddRefQueryInterface) 在 Filter Graph 管理器 (保存引用计数,则它可能成为保存引用计数的最后一个对象。 当筛选器调用 Release 时,筛选器关系图管理器将自行销毁。 在其清理例程中,筛选器关系图管理器尝试停止图形,导致它等待流式处理线程退出。 但是,它正在流式处理线程内等待,因此流式处理线程无法退出。 结果是死锁。