2014-04-29 43 views
1

我有一個DirectShow圖表,它可以記錄並顯示視頻源。當我移動視頻渲染器窗口到其他監視器,我錄製的內容被刪除並重新開始錄製。我搜索並找到了this link,它說改變監視器停止並啓動圖形。如何停止重新啓動圖形?我不想在顯示器之間切換時丟失錄音。顯示器更改後圖形重新啓動

感謝

回答

2

有可能是一個很好的理由是,EC_DISPLAY_CHANGED信息的行爲這種方式,所以我不知道的缺點是什麼,當你自己處理此消息並沒有重新啓動圖。

相反,您可以使用GMFBridge將渲染圖與記錄分開。使用一張圖來捕捉和記錄。僅將第二個圖形用於渲染,因此重新啓動該圖形不會停止記錄。

編輯:可能需要在第二個圖形重新啓動之前斷開連接。這意味着即使您使用GMFBridge,您也需要處理EC_DISPLAY_CHANGED消息。

m_pController->BridgeGraphs(NULL, NULL); 
+0

如何處理EC_DISPLAY_CHANGED事件並中止重新啓動圖形?如果你對此幫助不大,我會很高興。謝謝 –

+1

我從來沒有使用過這個,但是在你鏈接的線程中,建議使用'IMediaEvent :: CancelDefaultHandling'來接收這個事件。請參閱[發生事件時學習](http://msdn.microsoft.com/zh-cn/library/windows/desktop/dd390640%28v=vs.85%29.aspx)。 – wimh

3

您所描述的行爲基本上是行爲設計​​(即使副作用非常討厭和困惑)。在監視器之間移動視頻渲染器使其重新分配用於呈現視頻的硬件資源,並且這又需要狀態轉換。對於錄製,狀態轉換意味着打開和關閉文件。

您的解決方案是分解爲演示文稿和記錄圖形,或者使用自定義分配器/演示者以您想要的方式照顧演示文稿。據推測,圖分裂(Wimmel在另一個答案中提出的)是增加其他自由度的更好方法。

+0

使用增強視頻渲染器會解決我的問題嗎?我不想分割圖表。謝謝 –

+1

試一下,我不確定。 EVR有可能是正常的:EVR一次在所有顯示器上分配資源,並隨時切換,因此可能不需要重新啓動圖形。 –

+0

EVR表現爲VR。我錄製的文件仍然停止並開始。如果我理解正確,視頻渲染器會將EC_DISPLAY_CHANGED消息發送到圖形和圖形,然後自行啓動以與新顯示器匹配(因爲可能存在分辨率差異)。那麼,如果我處理圖形的消息並刪除EC_DISPLAY_CHANGED消息,我的圖形將不會重新啓動。但這是理論部分。我不知道如何處理圖形的消息。 –

相關問題