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.
Die Pin-Fabriken eines Audiofilters beschreiben alle Pins, die der Filter instanziieren kann. Wie bereits erwähnt, speichert ein Audio-Miniporttreiber Pininformationen in einem Array von PCPIN_DESCRIPTOR Strukturen. Jede Struktur gibt eine Pin-Fabrik an, und eine Pin-Fabrik wird durch ihren Index im Array identifiziert. Dieser Index wird häufig als Pin-ID bezeichnet.
Eine PCPIN_DESCRIPTOR-Struktur enthält eine Automatisierungstabelle und eine KSPIN_DESCRIPTOR Struktur.
Die KSPIN_DESCRIPTOR Struktur enthält die folgenden Informationen zu den Pins in der Pin-Factory:
Filterrelative Richtung des Datenflusses
Filterrelative Richtung des Kommunikationsflusses (In allen aktuellen Windows-Versionen verwenden KS-Filter IRPs für die Kommunikation.)
Pin-Kategorie
Freundlicher Name
Instanzfunktionen
Datenformatfunktionen
Die Elemente "Category " und "Name " der Struktur geben die Pin-Factory-Kategorie und den Anzeigenamen an. Für jede Pin-Fabrik im Filter gibt der Miniporttreiber eine Kombination aus Kategorie- und Namens-GUIDs an, die die Pin-Fabrik eindeutig identifizieren. Wenn zwei oder mehr Pin-Fabriken denselben Kategoriewert gemeinsam haben, weist jede Pinfactory einen Namenwert auf, der ihn von den anderen unterscheidet. Wenn nur eine einzelne Pinfactory einen bestimmten Kategoriewert aufweist, reicht dieser Wert aus, um die Pinfactory zu identifizieren, und der Name-Wert für diese Pinfactory kann auf NULL festgelegt werden. Ein Codierungsbeispiel finden Sie unter Verfügbarmachen der Filtertopologie. Informationen zu Pinkategorien finden Sie unter Pin Category Property.
Eine Pinfactory gibt den Datenbereich an, der als Array erweiterter KSDATARANGE-Strukturen unterstützt wird:
Eine Pinfactory, die eine Reihe von Wellen- oder DirectSound-Datenformaten für den Eingabe- oder Ausgabedatenstrom unterstützt, gibt ein Array von KSDATARANGE_AUDIO Strukturen an.
Eine Pin-Factory, die eine Reihe von MIDI- oder DirectMusic-Datenformaten für den Eingabe- oder Ausgabedatenstrom unterstützt, gibt ein Array von KSDATARANGE_MUSIC-Strukturen an.
KSDATARANGE_AUDIO und KSDATARANGE_MUSIC sind erweiterte Versionen von KSDATARANGE. Beispiele für beide Arten von Datenbereichen finden Sie unter Audiodatenformate und Datenbereiche.
Vor dem Verbinden eines Senken-Pins auf einem Filter mit einem Quell-Pin auf einem anderen Filter kann ein Graph-Generator (z. B. der SysAudio-Systemtreiber) die Datenbereiche nach einem kompatiblen Format durchsuchen. Der Diagramm-Generator ruft in der Regel den Daten-Schnittmengen-Handler des Filters auf, wodurch der Filter selbst ein kompatibles Format auswählen kann.
Ein Filter kann mehrere Pin-Fabriken aufweisen, und eine Pin-Fabrik kann mehrere Pininstanzen unterstützen.
Die Verwendung mehrerer Pin-Fabriken für einen Filter ist nützlich, um separate Datenpfade für die verschiedenen Datentypen zu unterscheiden, die durch den Filter fließen. Beispielsweise kann eine Pin-Factory PCM-Datenströme unterstützen, und eine andere Pin-Factory unterstützt AC-3-Streams.
Ein einzelner Filter kann Das Rendern und Erfassen von Datenströmen gleichzeitig unterstützen. Die Rendering- und Aufnahmepfade verfügen über separate Gruppen von Filterfabriken.
Die Verwendung mehrerer Pininstanzen in einer Sink-Pin-Factory impliziert häufig das Mischen. In diesem Fall enthält der Filter einen SUM-Knoten (KSNODETYPE_SUM).
Wie Filter, sind Pins Kernelobjekte und werden durch Kernelhandles identifiziert. Das Handle für eine Pininstanz wird durch Aufrufen von KsCreatePin erstellt. Als Kernelobjekt kann ein Pin als Ziel eines IRP angegeben werden. Ein Client des Treibers gibt den Pinhandle an, wenn eine IOCTL-Anforderung an einen Pin gesendet wird.
Beim Erstellen eines Audiofilterdiagramms verknüpft SysAudio einen Filter mit einem anderen, indem seine Pins verbunden werden. Ein Quellenanschluss eines Filters kann mit dem Senkenanschluss eines anderen Filters verbunden werden. Daten und IRPs aus dem Quell-Pin fließen über diese Verbindung in den Sink-Pin. Um die Verbindung herzustellen, erstellt ein Graph-Generator (in der Regel SysAudio) zuerst den Quellpin durch Aufrufen von KsCreatePin und erstellt dann den Senken-Pin, indem KsCreatePin erneut aufgerufen wird. Im zweiten Aufruf gibt der Client jedoch an, dass der neue Sink-Pin mit dem Quell-Pin verbunden werden soll, der im ersten Aufruf erstellt wurde.