如何解决在Directshow中将格式从高分辨率更改为较低分辨率时,没有发生动态格式更改
我有4个滤镜视频输入滤镜,它们是从枚举对象,智能三通,样品采集器和null渲染器获得的,当我以更高的分辨率开始时,我首先创建了所有滤镜并运行了媒体控件
IAMStreamConfig:: GetStreamCaps
-查看所有可用模式
ISampleGrabber::SetCallback
,使用ISampleGrabberCB::SampleCB
选项,我可以调用getCurrentBuffer()
来获取帧,
当我想更改格式时,我会按照要求进行所有步骤 对于使用回调方法的框架,我没有任何frames()
动态更改格式的通常步骤是什么,我做了 通过停止媒体控件,使用以下命令更改格式来尝试相同的操作 SetFormat()
再次运行,仍然没有运气
解决方法
要更改格式,最少需要的步骤是停止图形,断开所有引脚,更改视频捕获过滤器上的格式(使用IAMStreamConfig::SetFormat
或将其与显式定义的媒体类型连接到下游),然后重新连接所有其他下游引脚。
也就是说,步骤的顺序与只是删除所有内容并从头开始重建整个管道并没有太大区别。
有些动态格式更改支持,可以在DirectShow中随时更改分辨率,但是它不完整,特别是在您的情况下不可用。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。