在Directshow中将格式从高分辨率更改为较低分辨率时,没有发生动态格式更改

问题描述

我有4个滤镜视频输入滤镜,它们是从枚举对象,智能三通,样品采集器和null渲染器获得的,当我以更高的分辨率开始时,我首先创建了所有滤镜并运行了媒体控件

IAMStreamConfig:: GetStreamCaps-查看所有可用模式

ISampleGrabber::SetCallback,使用ISampleGrabberCB::SampleCB选项,我可以调用getCurrentBuffer()来获取帧,

当我想更改格式时,我会按照要求进行所有步骤 对于使用回调方法的框架,我没有任何frames()

动态更改格式的通常步骤是什么,我做了 通过停止媒体控件,使用以下命令更改格式来尝试相同的操作 SetFormat()

再次运行,仍然没有运气

解决方法

要更改格式,最少需要的步骤是停止图形,断开所有引脚,更改视频捕获过滤器上的格式(使用IAMStreamConfig::SetFormat或将其与显式定义的媒体类型连接到下游),然后重新连接所有其他下游引脚。

也就是说,步骤的顺序与只是删除所有内容并从头开始重建整个管道并没有太大区别。

有些动态格式更改支持,可以在DirectShow中随时更改分辨率,但是它不完整,特别是在您的情况下不可用。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...