在初始图形开始时,在10个视频样本之后,我继续从GraphManager接收EC_DISPLAY_CHANGE事件,即使我没有将图形从一个监视器物理移动到另一个监视器,我只是在二级监视器。
我试图搜索有关CGraphManager发送原因的原因的其他信息,但无法找到。
我还使用以下代码段自行处理特定事件。
if (FAILED(hr = m_spMediaEventEx->CancelDefaultHandling(EC_DISPLAY_CHANGED)))
return hr;
感谢您的帮助
答案 0 :(得分:0)
如果显示模式发生变化,视频渲染器可能需要选择其他格式。通过发送此消息,渲染器向过滤器图形管理器发出信号,表明它需要重新连接。在重新连接期间,渲染器可以选择新格式。
典型情况是视频渲染器希望显示在主监视器上,然后定位到辅助监视器上。渲染器生成事件以通过过滤器图形转换更新自身。在一些样本已经流式传输之后,您会看到该事件,因为该事件是异步处理的。要解决此问题,请使用IVMRMonitorConfig::SetMonitor
和朋友提前正确定位渲染器。
请注意,在正常情况下,事件和重新连接只是一个小延迟,应该透明处理。
通过取消默认行为,您将完全取消以下内容。并且您应该注意自己正在尝试修复的默认操作。
默认操作
过滤器图形管理器暂时停止图形,然后断开连接并重新连接视频渲染器。它不会将事件传递给应用程序。