我有一个DirectShow图表,用于记录和显示视频源。当我将视频渲染器窗口移动到其他监视器时,我录制的内容会被删除并再次开始录制。我搜索并发现this link表示更改显示器停止并启动图表。如何阻止图表重新启动?我不想在显示器之间切换时丢失录音。
由于
答案 0 :(得分:3)
您描述的行为基本上是设计行为(即使副作用非常烦人且令人困惑)。在监视器之间移动视频渲染器使其重新分配用于呈现视频的硬件资源,这又需要状态转换。对于录制,状态转换意味着打开和关闭文件。
您的解决方案是分为演示和录制图形,或者使用自定义分配器/演示者以您自己的方式自己处理演示。据推测,图形分割(Wimmel在另一个答案中建议的)是特别增加其他自由度的优选方式。
答案 1 :(得分:2)
EC_DISPLAY_CHANGED消息的行为可能是有充分理由的,所以当您自己处理此消息并且不重新启动图表时,我不知道有哪些缺点。< / p>
相反,您可以使用GMFBridge将渲染图与录制分开。使用一个图表来捕获和记录。仅将第二个图形用于渲染,因此重新启动该图形不会停止录制。
编辑:在重新启动第二个图表之前,您可能需要断开连接。即使您使用GMFBridge,这也意味着您需要处理EC_DISPLAY_CHANGED消息。
m_pController->BridgeGraphs(NULL, NULL);