我编写了一个 DirectShow 视频转换过滤器,它插入在视频解码器和视频渲染过滤器之间。它将在输入图片周围添加一个相框。因此输出图片的大小和纵横比与输入图片不同。
不幸的是,我发现视频渲染会保持原来的纵横比,所以显示的带有相框的图片被拉伸了。在 GraphEdit 中,我找到了带有名为“保持纵横比”复选框的视频渲染过滤器。取消选中它,输出的图片将不会被拉伸。这就是我想要的。但我不知道如何在我的代码中做到这一点。我查询了接口 IVideoWindow 但发现它无法设置纵横比。所以我在这里寻求帮助。
谢谢。
谢谢你,耶利米莫里尔。是的,IVMRAspectRatioControl7/9 就是我想要的。但似乎,要获得接口,我必须首先获得过滤器 Video Mixing Renderer Filter 7/9。我想在“Video Renderer”过滤器而不是“Video Mixing Renderer Filter 9”上设置纵横比。
我不需要动态地改变格式。我的过滤器图是
Source -> Demux -> Decoder -> MyFilter -> VideoRenderer
无论解码器输出的分辨率如何,MyFilter 的输出分辨率始终与桌面屏幕相同。我发现,如果我使用智能连接,我会遇到我描述的问题。但是如果我手动将 MyFilter 连接到 VideoRenderer,则视频分辨率是正确的,即与屏幕相同。