为什么我的 directshow 图(动态格式)会挂起?

why would my directshow graph (with dynamic format) just hang?

我有一个自定义 "sink" 过滤器。我创建了一个 BDA 图,并通过调用 IGraphBuilder2::RenderStream 将 MPEG2VIDEO 流发送给它,这也添加了一个中间 "decode" 过滤器。此时,它通知我的过滤器它将传递 704x480 YUY2 数据。

当我在图表上调用 运行 时,会发生调整(我推测)并且数据格式明显发生变化,因为上游解码器在我的过滤器引脚上调用大小为 1280x720 的 ReceiveConnection。我接受它 return S_OK.

然而,如果我 return S_OK,图表基本上从那个点开始挂起。如果我 return VFW_E_ALREADY_CONNECTED 那么它会成功地为我提供 704x480 数据。奇怪的是,如果我 运行 在 GraphEdit 中使用相同类型的图形,但使用普通的视频渲染器,它会成功地重新协商格式并使用它。需要注意的一件事是我的过滤器没有自定义分配器。有什么想法吗?

本例中的解码过滤器是 PowerDVD 8 的 "mpeg2 video decoder" FWIW。

最后我认为这与内容重新协商有关...没有得到正确处理...我的工作是使用不同的过滤器(lav 过滤器与 ffdshow)(这可能会避免一个错误,但后来引入了更多)所以我最终只是通过了原始 MPEG 流(这并不容易...)