c++ - 在 Directshow 中将格式从更高分辨率更改为更低分辨率的问题,动态格式更改不会发生

标签 c++ winapi audio video directshow

我有 4 个过滤器视频输入过滤器从 获得枚举名称 ,智能三通,采样采集器和空渲染器,当我开始使用更高分辨率时,我首先创建所有过滤器并运行媒体控件。IAMStreamConfig:: GetStreamCaps - 查看所有可用模式ISampleGrabber::SetCallback , 与 ISampleGrabberCB::SampleCB选项,我可以调用getCurrentBuffer()获取帧,

when I want to change the format, I do all the steps but on request for the frame using the callback method I don't get any frames()

What are the usual steps for changing the format dynamically, I did try the same by stopping the media control, changing the format using SetFormat()


再次运行,仍然没有运气

最佳答案

要更改格式,您需要的最少步骤是停止图表,断开所有引脚,更改视频捕获过滤器的格式(使用 IAMStreamConfig::SetFormat 或使用明确定义的媒体类型将其连接到下游),然后重新连接下游的所有其他引脚。
也就是说,步骤顺序与只是删除所有内容并从头开始重建整个管道并没有太大区别。
有一些动态格式更改支持可以在 DirectShow 中随时更改分辨率,但它不完整,特别是在您的情况下不可用。

关于c++ - 在 Directshow 中将格式从更高分辨率更改为更低分辨率的问题,动态格式更改不会发生,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64218518/

相关文章:

python - Python,pygame.mixer:声音不起作用

audio - 如何使用 mkvmerge 和外部时间码强制 A/V 同步?

c++ - 哪些贪婪的初始化列表示例潜伏在标准库中?

c - 确定窗口消息的优先级

c++ - 运行 regsvr32.exe 时,带有线程句柄的 WaitForSingleObject 卡住

c# - 使用连接到 LDAP 服务器的生物识别系统验证窗口用户

c++ - 如何在 MSVC 2005 中手动修饰链接器名称?

c++ - 我应该用 'if' 语句统一两个相似的内核,冒着性能损失的风险吗?

c++ - 在遍历 vector 时从 vector 中删除对象

python - 使用 pyDub 生成静音