2014-04-29 46 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消息,我的图形将不会重新启动。但这是理论部分。我不知道如何处理图形的消息。 –

相关问题