gpt4 book ai didi

c++ - 视频混合渲染器 9 (VMR9) : get FPS from the input pin's AM_MEDIA_TYPE

转载 作者:行者123 更新时间:2023-11-28 06:33:41 25 4
gpt4 key购买 nike

我正在使用由 VMR9 实例组成的 FilterGraph 渲染视频文件。 FilterGraph 是使用 GraphBuilder->RenderFile() 自动创建的。基本上我的设置在这里描述:http://www.codeproject.com/Articles/9206/Using-the-DirectShow-Video-Mixing-Renderer-filte

问题是:我想检测一些视频内部参数,如 FPS、持续时间等。调用 RenderFile() 后,视频使用 MediaControl->StopWhenReady() 正确显示并使用 Run() 和 Pause() 播放.为了检测帧速率,我尝试从 VMR9 的输入引脚获取 AM_MEDIA_TYPE 结构:

VRM->FindPin("VMR Input0", pin); // S_OK
pin->ConnectionMediaType(&mt); // VFW_E_NOT_CONNECTED

在我看来,过滤器图应该通过调用 RenderFile() 正确创建,因此这个 pin 应该连接到我的输入流。为什么不是这样,这件事的处理方式是什么?

Microsoft 提供了一些函数 (http://msdn.microsoft.com/en-us/library/windows/desktop/dd375791%28v=vs.85%29.aspx) 来遍历图形并查找允许访问 AM_MEDIA_TYPE 的特定接口(interface),例如 IID_IAMStreamConfig。但是这些选项在我的实现中失败了。我唯一可以访问的引脚是上面提到的。

提前致谢!

最佳答案

您假设 filter 和 pin,您持有的接口(interface),是连接的,并且它们正是您感兴趣的对象。这不一定是真的,过去有很多问题表明人们错误地理解了他们创建的拓扑。您需要查看过滤器图表并确保您拥有您期望的东西。看这个:How can I reverse engineer a DirectShow graph?

如果你有正确的 pin 连接,确实你需要使用 ConnectionMediaType 然后通过 AM_MEDIA_TYPEVIDEOINFOHEADERVIDEOINFOHEADER2 然后是 AvgTimePerFrame成员(member)。

关于c++ - 视频混合渲染器 9 (VMR9) : get FPS from the input pin's AM_MEDIA_TYPE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27126935/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com