为什么即使没有发生监视器更改/切换,也会发送EC_DISPLAY_CHANGED?

时间:2014-05-13 06:54:03

标签: directshow video-capture video-processing

在初始图形开始时,在10个视频样本之后,我继续从GraphManager接收EC_DISPLAY_CHANGE事件,即使我没有将图形从一个监视器物理移动到另一个监视器,我只是在二级监视器。

我试图搜索有关CGraphManager发送原因的原因的其他信息,但无法找到。

我还使用以下代码段自行处理特定事件。

if (FAILED(hr = m_spMediaEventEx->CancelDefaultHandling(EC_DISPLAY_CHANGED)))
    return hr; 

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

MSDN上的

EC_DISPLAY_CHANGE

  

如果显示模式发生变化,视频渲染器可能需要选择其他格式。通过发送此消息,渲染器向过滤器图形管理器发出信号,表明它需要重新连接。在重新连接期间,渲染器可以选择新格式。

典型情况是视频渲染器希望显示在主监视器上,然后定位到辅助监视器上。渲染器生成事件以通过过滤器图形转换更新自身。在一些样本已经流式传输之后,您会看到该事件,因为该事件是异步处理的。要解决此问题,请使用IVMRMonitorConfig::SetMonitor和朋友提前正确定位渲染器。

请注意,在正常情况下,事件和重新连接只是一个小延迟,应该透明处理。

通过取消默认行为,您将完全取消以下内容。并且您应该注意自己正在尝试修复的默认操作。

  

默认操作

     

过滤器图形管理器暂时停止图形,然后断开连接并重新连接视频渲染器。它不会将事件传递给应用程序。