Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
[Das dieser Seite zugeordnete Feature DirectShow-ist ein Legacyfeature. Es wurde von MediaPlayer, IMFMediaEngineund Audio/Video Capture in Media Foundationersetzt. Diese Features wurden für Windows 10 und Windows 11 optimiert. Microsoft empfiehlt dringend, dass neuer Code MediaPlayer-, IMFMediaEngine und Audio-/Videoaufnahme in Media Foundation anstelle von DirectShow-verwendet, wenn möglich. Microsoft schlägt vor, dass vorhandener Code, der die Legacy-APIs verwendet, um die neuen APIs zu verwenden, falls möglich umgeschrieben werden.]
Wenn ein Quellfilter das Senden von Daten abgeschlossen hat, ruft er die IPin::EndOfStream--Methode für den nachgeschalteten Eingabenadel auf. Der nachgeschaltete Filter verteilt den Aufruf an den nächsten Filter usw. Wenn der EndOfStream Aufruf den Renderer erreicht, sendet der Renderer ein EC_COMPLETE Ereignis an den Filter Graph-Manager. Wenn der Renderer über mehrere Eingabenadeln verfügt, wird das EC_COMPLETE-Ereignis übermittelt, nachdem jede Eingabenadel die Benachrichtigung über das Ende des Datenstroms erhalten hat.
Ein Filter muss EndOfStream- Anrufe mit anderen Streamingaufrufen serialisieren, z. B. IMemInputPin::Receive. (Mit anderen Worten, der Downstreamfilter muss immer die Anrufe in der richtigen Reihenfolge empfangen.)
In einigen Fällen erkennt ein nachgeschalteter Filter möglicherweise das Ende des Datenstroms, bevor der Quellfilter erfolgt. (Der nachgeschaltete Filter kann z. B. den Datenstrom analysieren.) In diesem Fall kann der Downstreamfilter die End-of-Stream-Benachrichtigung senden, in diesem Fall sollte es S_FALSE von IMemInputPin::Receive zurückgeben, bis das Diagramm beendet oder gelebt wird. Der S_FALSE Rückgabewert informiert den Quellfilter, das Senden von Daten zu beenden.
Standardbehandlung von EC_COMPLETE
Standardmäßig leitet der Filter Graph-Manager nicht jedes EC_COMPLETE Ereignis an die Anwendung weiter. Stattdessen wartet sie, bis alle Datenströme EC_COMPLETE signalisiert haben, und sendet dann ein einzelnes EC_COMPLETE Ereignis. Daher empfängt die Anwendung das Ereignis, nachdem jeder Datenstrom abgeschlossen wurde.
Um die Anzahl der Datenströme zu ermitteln, zählt der Filterdiagramm-Manager die Anzahl der Filter, die die Suche unterstützen (über IMediaSeeking oder IMediaPosition) und einen gerendert Eingabenadel aufweisen, der als Eingabenadel ohne entsprechende Ausgaben definiert ist. Der Filter Graph-Manager bestimmt, ob ein Pin auf eine von zwei Arten gerendert wird:
- Die IPin::QueryInternalConnections--Methode des Pins gibt null im nPin--Parameter zurück.
- Der Filter macht die IAMFilterMiscFlags Schnittstelle verfügbar und gibt das AM_FILTER_MISC_FLAGS_IS_RENDERER Flag zurück.
Ende-of-Stream-Benachrichtigungen im Pullmodus
In einer IAsyncReader Verbindung sendet der Quellfilter keine End-of-Stream-Benachrichtigung. Stattdessen erfolgt dies durch den nachgeschalteten Filter, der in der Regel ein Parserfilter ist. Der Parser sendet den EndOfStream Aufruf nach unten. Es sendet keinen Upstream an den Quellfilter.
Verwandte Themen