2014-05-13 35 views
0

在初始圖形開始時,在10個視頻樣本之後,我繼續從GraphManager接收EC_DISPLAY_CHANGE事件,儘管我沒有將圖形從一臺顯示器物理地移動到另一臺顯示器,而是僅在輔助顯示器上啓動它。即使未發生顯示器更改/切換,爲什麼會發送EC_DISPLAY_CHANGED?

我試圖尋找關於導致CGraphManager發送它但是找不到任何東西的原因的附加信息。

我已經另外使用下面的代碼片段來自己處理特定的事件。

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

感謝您的幫助

回答

0

EC_DISPLAY_CHANGE MSDN上:

如果顯示模式發生變化時,視頻渲染可能需要選擇另一種格式。通過發送此消息,渲染器向過濾器圖形管理器發信號通知它需要重新連接。在重新連接期間,渲染器可以選擇一種新格式。

典型的場景是一個視頻渲染器,希望顯示在主監視器上,然後定位到輔助監視器上。渲染器生成事件以便通過濾鏡圖形轉換來更新自身。由於事件是異步處理的,因此在發送幾個樣本之後您會看到該事件。爲了解決這個問題,請使用IVMRMonitorConfig::SetMonitor和朋友提前正確定位渲染器。

請注意,在正常情況下,事件和重新連接只是一個小延遲,應該透明處理。

通過取消默認行爲,您完全取消了以下內容。而且您需要注意自己正在嘗試解決的默認操作。

默認操作

的filter圖表管理暫時停止圖形,然後斷開並重新連接視頻渲染器。它不會將事件傳遞給應用程序。

相關問題