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.
Ein AVStream-Minidriver kann die AvStream-Klassentreiberfunktionalität verwenden, um einen Datenstrom in mehrere Kopien aufzuteilen, während der Datenstrom über einen bestimmten Pin durchläuft. Dieser Aufteilungsprozess kann nützlich sein, wenn Ihr Treiber einen Eingabedatenstrom kopieren muss, um zwei identische Ausgabedatenströme zu erzeugen.
Legen Sie dazu KSPIN_FLAG_SPLITTER im Flags-Element der KSPIN_DESCRIPTOR_EX-Struktur des Pins fest. Wenn dieses Kennzeichen auf einem Pin festgelegt ist, fungiert der Pin als automatischer Splitter. AVStream kopiert automatisch alle Daten, die zum Teilen des Datenstroms erforderlich sind.
In Versionen nach DirectX8.0 funktioniert das KSPIN_FLAG_SPLITTER-Flag sowohl für filterorientierte als auch für pinorientierte Filter. In früheren Versionen wird dieses Kennzeichen nur für Pins für filterorientierte Filter unterstützt.
Das folgende Diagramm zeigt die Konfiguration eines Filters, in dem ein Eingangspin einen Datenstrom auf zwei Ausgangspins aufteilt. Die nachgeschalteten Filter dieses Ausgabepins ändern die Daten in-place.
Frames kommen am Eingabepin an und werden in die Eingabewarteschlange eingefügt. Der Minidriver interagiert nur mit der Eingabewarteschlange und der Ausgabewarteschlange für den ursprünglichen Pin. AVStream kopiert automatisch Daten aus der Warteschlange des ersten Pins in die Warteschlange des zweiten Pins.
Aus Gründen der Einfachheit zeigt dieses Diagramm nicht, wie Frames an den Ausgabepin geliefert werden. Um Frames an den Ausgabe-Pin zu liefern, könnte beispielsweise ein Anforderer und ein Allocator vorhanden sein, die jeder Warteschlange zugeordnet sind und zu diesem Pipeline-Segment gehören. Alternativ können die Frames aus einem nachgeschalteten Filter stammen.
In der KSFILTER_DISPATCH-Struktur gibt der Minidriver einen Zeiger auf eine vom Anbieter bereitgestellte AVStrMiniFilterProcess-Rückrufroutine an. In dieser Rückrufroutine empfängt der Minidriver einen Zeiger auf eine KSPROCESSPIN_INDEXENTRY Struktur, die das Array der unten dargestellten KSPROCESSPIN-Strukturen enthält.
Dieses Diagramm zeigt, wie der Minidriver zwischen den beiden Ausgabe-Pins in der Prozess-Pins-Liste unterscheidet:
In diesem Diagramm bezieht sich DB auf das DelegateBranch-Mitglied der KSPROCESSPIN-Struktur und CS bezieht sich auf das CopySource-Element . Sowohl die DelegateBranch als auch die CopySource Mitglieder des Eingabepins und des ersten Ausgabepins sind NULL. Dies weist darauf hin, dass der Minidriver für die Verarbeitung von Frames auf diesen Pins verantwortlich ist.
Der zweite Ausgabepin weist jedoch eine CopySource auf, die auf den ersten Ausgabepin verweist. Dies gibt an, dass sich der zweite Ausgabepin in einem separaten Datenkanal vom ersten Ausgabepin befindet und dass AVStream automatisch alle Daten, die in die Queue des ersten Ausgabepins platziert werden, in die Queue des zweiten Ausgabepins kopiert.
Komplexere Splitterfälle können auftreten, wenn zwei Ausgabestifte in dasselbe Rohr integriert sind. Ein Minidriver könnte beispielsweise zwei splitterbasierte Ausgabepins in derselben Pipeline enthalten, solange nachgeschaltete Filter die von diesen Pins gesendeten Daten nicht ändern. Da Daten nicht geändert werden, gelten die Ausgangs-Pins als nur lesbar. Beide nachgeschalteten Filter erhalten dieselben Puffer.
Es ist auch möglich, dass einige der nachgeschalteten Filter, die automatisch an den Splitter-Pin angefügt werden, die Daten ändern, während andere nicht.
Das Filterlayout könnte in diesem Fall dem folgenden Diagramm entsprechen, das einen Filter darstellt, der drei Instanzen des geteilten Ausgabepins enthält.
Pins A und B werden demselben Rohr zugewiesen, da die nachgeschalteten Filter die Daten nicht ändern; die Nachgeschalteten Filter von A und B erhalten dieselben Pufferzeiger.
Der Minidriver interagiert nur mit der Eingabewarteschlange und einer einzelnen Ausgabewarteschlange. AVStream kopiert automatisch aus der A/B-Warteschlange und der C-Warteschlange. Außerdem wird ein Splitterobjekt erstellt, das dieselben Datenrahmen über pin A und Pin B sendet (beachten Sie, dass sich die Datenstromheader unterscheiden).
Das Array von KSPROCESSPIN-Strukturen lautet wie folgt:
Die einzige Pin, mit der der Minidriver unter normalen Umständen interagieren muss, ist pin A.
Um die obigen Diagramme zu vereinfachen, wurden Anforderer und Allocators aus den Diagrammen weggelassen. Die Diagramme sollen nur den Rahmenteilungsprozess veranschaulichen.