C++ 在Directshow中将格式从较高分辨率更改为较低分辨率时出现问题,未发生动态格式更改
我有4个过滤器视频输入过滤器,从枚举名字中获得,一个智能T形三通、样本抓取器和空渲染器,当我以更高的分辨率开始时,我首先创建所有过滤器并运行媒体控件C++ 在Directshow中将格式从较高分辨率更改为较低分辨率时出现问题,未发生动态格式更改,c++,winapi,audio,video,directshow,C++,Winapi,Audio,Video,Directshow,我有4个过滤器视频输入过滤器,从枚举名字中获得,一个智能T形三通、样本抓取器和空渲染器,当我以更高的分辨率开始时,我首先创建所有过滤器并运行媒体控件 IAMStreamConfig::GetStreamCaps-查看所有可用模式 ISampleGrabber::SetCallback,使用ISampleGrabberCB::SampleCB选项,我可以调用getCurrentBuffer()来获取帧 当我想更改格式时,我会按要求执行所有步骤 对于使用回调方法的帧,我没有得到任何帧() 动态更改格
IAMStreamConfig::GetStreamCaps
-查看所有可用模式
ISampleGrabber::SetCallback
,使用ISampleGrabberCB::SampleCB
选项,我可以调用getCurrentBuffer()
来获取帧
当我想更改格式时,我会按要求执行所有步骤
对于使用回调方法的帧,我没有得到任何帧()
动态更改格式的通常步骤是什么
停止媒体控件,使用更改格式,尝试相同的方法
SetFormat()
然后再次运行,仍然没有运气要更改格式,您需要的最少步骤是停止图形,断开所有管脚,更改视频捕获过滤器的格式(使用
IAMStreamConfig::SetFormat
或使用显式定义的媒体类型将其连接到下游),然后重新连接下游的所有其他管脚
也就是说,步骤的顺序实际上与删除所有内容并从头开始重建整个管道没有太大区别
DirectShow中提供了一些动态格式更改支持,可以在运行中更改分辨率,但它不完整,特别是在您的情况下不可用