Behandeln von Neupaintereignissen in Video Capture
Wenn Sie ein Videoaufnahmediagramm erstellen, ohne die ICaptureGraphBuilder2-Schnittstelle zu verwenden, und Sie eine Vorschau des Videos mit dem alten Videorendererfilter anzeigen, sollten Sie die Standardbehandlung für EC _ REPAINT-Ereignisse außer Kraft setzen. Fragen Sie den Filter Graph Manager für die IMediaEvent-Schnittstelle ab, und rufen Sie die IMediaEvent::CancelDefaultHandling-Methode mit dem Wert EC _ REPAINT auf:
IMediaEvent *pEvent = 0;
hr = pGraph->QueryInterface(IID_IMediaEvent, (void**)&pEvent);
if (SUCCEEDED(hr))
{
pEvent->CancelDefaultHandling (EC_REPAINT);
pEvent->Release();
}
Dadurch wird ein möglicher Fehler verhindert, der die Erfassungsdatei beschädigt. Wenn der Benutzer das Vorschaufenster abdeckt und aufdeckt, empfängt der Videorendererfilter eine WM _ PAINT-Meldung. Standardmäßig fordert der Videorenderer einen neuen Frame an, und der Filter-Graph-Manager hält das Diagramm an, um einen anderen Videoframe zu erstellen. Wenn dies geschieht, während der Graph eine Datei schreibt, wird die Datei beschädigt. Das Überschreiben des EC _ REPAINT-Standardverhaltens verhindert, dass der Renderer einen neuen Frame an fordert.
Sie müssen diesen Schritt nicht ausführen, wenn Sie die ICaptureGraphBuilder2-Schnittstelle verwenden, da capture Graph Builder dies automatisch für Sie übernimmt. Außerdem ist dies nicht erforderlich, wenn Sie den Video Mixing Renderer (VMR) für die Vorschau verwenden. Der VMR verfügt immer über den neuesten verfügbaren Frame, sodass keine EC _ REPAINT-Ereignisse gesendet werden.