Pullmodell

In der IMemInputPin-Schnittstelle bestimmt der Upstreamfilter, welche Daten gesendet werden, und pusht die Daten an den Downstreamfilter. Für einige Filter ist ein Pullmodell besser geeignet. Hier fordert der Downstreamfilter Daten vom Upstreamfilter an. Die Stichproben werden weiterhin nachgeschaltet, vom Ausgabepin zum Eingabepin, aber der Downstreamfilter initiiert den Datenfluss. Dieser Verbindungstyp verwendet die IAsyncReader-Schnittstelle.

Die typische Verwendung für das Pullmodell ist die Dateiwiedergabe. Beispielsweise führt der Filter Async File Source in einem AVI-Wiedergabediagramm generische Dateilesevorgänge aus und stellt die Daten als Bytestream ohne Formatinformationen zur Verfügung. Der AVI-Splitterfilter liest die AVI-Header und analysiert den Stream in Video- und Audiobeispiele. Der AVI-Splitter kann bestimmen, welche Daten er besser benötigt als der Filter Async File Source und verwendet daher IAsyncReader anstelle von IMemInputPin.

Zum Anfordern von Daten vom Ausgabepin ruft der Eingabepin eine der folgenden Methoden auf:

Die erste Methode ist asynchron, um mehrere überlappende Leses zu unterstützen. Die anderen sind synchron.

Theoretisch kann jeder Filter IAsyncReader unterstützen, aber in der Praxis ist er für Quellfilter konzipiert, die eine Verbindung mit Parserfiltern herstellen. Der Parser verhält sich sehr ähnlich wie ein Quellfilter im Pushmodell. Wenn er angehalten wird, wird ein Streamingthread erstellt, der Daten aus der IAsyncReader-Verbindung pullt und nachgeschaltet pusht. Die Ausgabepins verwenden IMemInputPin, und der Rest des Diagramms verwendet das Standardmäßige Pushmodell.

Daten Flow im Filter-Graph