我正在使用IGraphBuilder将视频捕获设备渲染到屏幕上。该过程包括将捕获过滤器添加到图形中,然后将VideoMixingRenderer添加到图形(使用自定义分配器),最后调用graph.Render()以使用Intelligent Connect连接引脚。在某些情况下这很好用,我的自定义分配器已正确加载(并调用InitializeDevice),但在其他情况下不使用自定义分配器,我得到一个ActiveMovie窗口显示捕获设备而不是我添加到图形中的VMR 。看起来智能连接不希望将捕获设备过滤器连接到VMR,而是创建自己的渲染器。是否有任何工具或技术来调试这个?对graph.Render()的调用成功,HR为0,所以我没有从DirectShow获得有关连接失败的任何信息。希望存在一种诊断工具,可以让我更好地了解DirectShow中正在发生的事情。
答案 0 :(得分:7)
智能连接逻辑将创建一个日志文件,您可以使用该文件来追踪错误。使用IGraphBuilder :: SetLogFile(或graphedt菜单项)。这会在图形构建期间记录所有活动。
无法连接到vmr的最常见原因是上游过滤器坚持使用自己的分配器,vmr也是如此。在某些情况下,您可能会在两者之间获得转换(例如颜色空间转换),并且这会复制缓冲区,因此将使用vmr的分配器。无论如何,这样的事情是可能的解释。