2011-06-01 53 views
2

我的应用程序使用VMR9 Renderless模式播放WMV文件。我用IGraphBuilder :: RenderFileIMediaControl控制回放构建过滤器图形。一切都好起来,但我不知道如何确定源视频大小。有任何想法吗?如何使用VMR9无渲染模式查找源视频大小

注意:在How can I adjust the video to a specified size in VMR9 renderless mode?之前询问过此问题。但解决方案是使用Windowless模式,而不是Renderless模式,这将需要重写我的代码。

回答

1

首先你需要视频渲染器。你可以通过在IGraphBuilder接口上使用EnumFilters来完成。然后在该滤波器上调用EnumPins来查找输入引脚。然后,您可以调用ConnectionMediaType以获取被馈送到该过滤器的媒体类型。现在,取决于设置的格式类型,您可以将pbFormat指针转换为相关结构,然后从中找出视频大小。如果您在此之前需要大小(以查看是否发生了一些缩放),则可以使用“ConnectedTo”穿过引脚回到下一个过滤器。然后您可以找到其输入引脚并重复ConnectionMediaType调用。重复,直到你到达你想要的过滤器的针脚。

+0

谢谢你指点我正确的方向。它花了一段时间,但我能够弄清楚如何通过浏览过滤器图来找到我的源视频。我希望能有一个更简单的方法来完成这个任务,但它似乎是唯一的方法 - 至少在Renderless模式下。 – 2011-06-02 21:40:13

+0

@Knute:在DirectShow方面,没有什么是容易的。它的灵活性如同地狱般,但在我看来它越早越好。 – Goz 2011-06-02 22:06:22

+0

悲哀的媒体基金会更糟。 – Alan 2011-06-03 02:49:33

1

您可以使用MediaInfo项目http://mediainfo.sourceforge.net/hr/Download/Windows并通过VCS2010或VCS2008文件夹中包含的CS包装获取所需的所有视频信息。

编辑:对不起,我以为你在管理。但是在任何情况下MediaInfo都可以使用,所以也许会有所帮助。

+0

感谢您的建议。使用这样的库当然有可能比浏览过滤图更容易。 – 2011-06-02 21:36:35