我编写了一个DirectShow视频变换滤镜,它插在视频解码器和视频渲染滤镜之间。它会在输入图片周围添加一个相框。因此输出picutre的大小和宽高比与输入的不同。
不幸的是,我发现视频渲染会保持原始的宽高比,因此带有相框的显示图片会被拉伸。在GraphEdit中,我发现视频渲染过滤器带有一个名为“维持纵横比”的复选框。取消选中它,外面的图片不会被拉伸。这就是我想要的。但我不知道如何在我的代码中做到这一点。我查询了界面IVideoWindow,但发现它无法设置宽高比。所以我在这里寻求帮助。
感谢。
谢谢你,Jeremiah Morrill。是的,IVMRAspectRatioControl7 / 9就是我想要的。但似乎,为了获得界面,我必须首先获得过滤器Video Mixing Renderer Filter 7/9。我想在“视频渲染器”过滤器而不是“视频混合渲染器过滤器9”上设置宽高比。
我不需要动态地进行格式化。我的过滤器图是
Source -> Demux -> Decoder -> MyFilter -> VideoRenderer
无论解码器输出的分辨率如何,MyFilter的输出分辨率始终与桌面屏幕相同。我发现,如果我使用智能连接,我会遇到我所描述的问题。但是,如果我手动将MyFilter连接到VideoRenderer,则视频分辨率是正确的,即与屏幕相同。
答案 0 :(得分:2)
也许您正在寻找IVMRAspectRatioControl7 / 9接口(从VMR渲染器中查询)?
另外,你所描述的听起来很奇怪。在设置输入引脚介质类型后,输出引脚是否在介质类型中提供正确的视频大小?此外,如果您在连接引脚后更改分辨率,则可能需要阅读dynamic format changes。