Topologienadeln
Der WDMAud-Systemtreiber übersetzt Topologiepins für KS-Filter in die Quell- und Zielmixerlinien, die die Mixer-API für Anwendungen verfügbar macht. Eingabepins (Senke) werden zu Quellmixerlinien, und Ausgabepins (Quell)Pins werden zu Zielmixerlinien.
Wie in Pin Factorys beschrieben, stellt ein Miniporttreiber ein Array von Stiftdeskriptoren bereit, von denen jede eine Struktur vom Typ PCPIN_DESCRIPTOR ist, die eine Pinfactory beschreibt, die zu einem Filter gehört. Jeder Pindeskriptor enthält die folgenden Informationen:
Datenflussrichtungsspezifizierer
Gibt an, ob der Datenstrom den Filter über den Pin eingibt (KSPIN_DATAFLOW_IN) oder den Filter beendet (KSPIN_DATAFLOW_OUT).
GUID der KS-Pinkategorie
Gibt die Pinkategorie an, zu der die Pin gehört. Auf einem Audiowiedergabegerät kann beispielsweise ein Pin einen wellenformatierten digitalen Audiostream akzeptieren, und ein anderer Pin generiert möglicherweise ein analoges Audiosignal zum Antreiben eines Lautsprechers. Der Miniporttreiber identifiziert diese beiden Pintypen als unterschiedliche Pinkategorien.
Kommunikationstypspezifizierer
Gibt den Typ der IRP-Kommunikation an, den der Pin unterstützt. Ein Pin, der die IRP-Kommunikation unterstützt, kann eine IRP-Senke (KSPIN_COMMUNICATION_SINK), eine IRP-Quelle (KSPIN_COMMUNICATION_SOURCE) oder beides (KSPIN_COMMUNICATION_BOTH) sein. Ein Pin, der keine IRP-Kommunikation unterstützt, kann sich entweder in einem KS-Filtergraphen (KSPIN_COMMUNICATION_NONE) befinden oder ein Bridge-Pin am Endpunkt eines Graphen sein (KSPIN_COMMUNICATION_BRIDGE).
Weitere Informationen zu Bridge-Pins finden Sie unter Audiofiltergraphen.
WDMAud konvertiert die Informationen aus dem Pin-Deskriptor des Miniporttreibers in einen Mixer-Liniendeskriptor, bei dem es sich um eine Struktur vom Typ MIXERLINE handelt, die die folgenden Informationen enthält:
Mixer-Line-Komponententyp
Gibt an, ob die Mischerlinie eine Quell- oder Eine Zielzeile ist, und gibt auch die allgemeine Funktion der Mischerlinie an. Beispielsweise ist der Komponententyp für eine Mixerleitung, die ein analoges Signal transportiert, das von einem Wellenausgabedatenstrom (Renderingdatenstrom) generiert wird, um einen Kopfhörersatz zu steuern, MIXERLINE_COMPONENTTYPE_DST_HEADPHONES.
Mixer-Line-Zieltyp
Gibt den Typ des Datenstroms an, den die Mischerlinie transportiert. Beispielsweise ist der Zieltyp für einen Wellenausgabedatenstrom (Renderingdatenstrom) MIXERLINE_TARGETTYPE_WAVEOUT, und der Zieltyp für einen Welleneingabedatenstrom (Capture) ist MIXERLINE_TARGETTYPE_WAVEIN.
Weitere Informationen finden Sie in der SDK-Dokumentation in der MIXERLINE-Struktur .
Die folgenden beiden Tabellen zeigen, wie WDMAud Eingaben (KSPIN_DATAFLOW_IN) Quellmischerlinien übersetzt.
In der ersten Tabelle wird gezeigt, wie die GUIDs der KS-Pinkategorie (PCPIN_DESCRIPTOR) den zugeordneten MIXERLINE-Zieltypen zugeordnet werden.
GUID der KS-Pinkategorie | Bridge-Pin? | MIXERLINE-Zieltyp |
---|---|---|
KSNODETYPE_MICROPHONE | - | MIXERLINE_TARGETTYPE_WAVEIN |
KSNODETYPE_DESKTOP_MICROPHONE | - | MIXERLINE_TARGETTYPE_WAVEIN |
KSNODETYPE_LEGACY_AUDIO_CONNECTOR | - | MIXERLINE_TARGETTYPE_WAVEOUT |
KSCATEGORY_AUDIO | - | MIXERLINE_TARGETTYPE_WAVEOUT |
KSNODETYPE_SPEAKER | - | MIXERLINE_TARGETTYPE_WAVEOUT |
KSNODETYPE_CD_PLAYER | - | MIXERLINE_TARGETTYPE_UNDEFINED |
KSNODETYPE_SYNTHESIZER | - | MIXERLINE_TARGETTYPE_MIDIOUT |
KSNODETYPE_LINE_CONNECTOR | - | MIXERLINE_TARGETTYPE_UNDEFINED |
KSNODETYPE_TELEPHONE | - | MIXERLINE_TARGETTYPE_UNDEFINED |
KSNODETYPE_PHONE_LINE | - | MIXERLINE_TARGETTYPE_UNDEFINED |
KSNODETYPE_DOWN_LINE_PHONE | - | MIXERLINE_TARGETTYPE_UNDEFINED |
KSNODETYPE_ANALOG_CONNECTOR | Yes | MIXERLINE_TARGETTYPE_WAVEIN |
KSNODETYPE_ANALOG_CONNECTOR | No | MIXERLINE_TARGETTYPE_WAVEOUT |
KSNODETYPE_SPDIF_INTERFACE | Yes | MIXERLINE_TARGETTYPE_WAVEIN |
KSNODETYPE_SPDIF_INTERFACE | No | MIXERLINE_TARGETTYPE_WAVEOUT |
In der folgenden Tabelle wird gezeigt, wie die GUIDs der KS-Pinkategorie den zugehörigen MIXERLINE-Komponententypen zugeordnet werden.
PCPIN_DESCRIPTOR Werte | MIXERLINE-Werte |
---|---|
GUID der KS-Pinkategorie | Komponententyp |
KSNODETYPE_MICROPHONE KSNODETYPE_DESKTOP_MICROPHONE |
MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE |
KSNODETYPE_LEGACY_AUDIO_CONNECTOR KSCATEGORY_AUDIO KSNODETYPE_SPEAKER |
MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT |
KSNODETYPE_CD_PLAYER |
MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC |
KSNODETYPE_SYNTHESIZER |
MIXERLINE_COMPONENTTYPE_SRC_SYNTHESIZER |
KSNODETYPE_LINE_CONNECTOR |
MIXERLINE_COMPONENTTYPE_SRC_LINE |
KSNODETYPE_TELEPHONE KSNODETYPE_PHONE_LINE KSNODETYPE_DOWN_LINE_PHONE |
MIXERLINE_COMPONENTTYPE_SRC_TELEPHONE |
KSNODETYPE_ANALOG_CONNECTOR |
MIXERLINE_COMPONENTTYPE_SRC_ANALOG |
KSNODETYPE_ANALOG_CONNECTOR |
MIXERLINE_COMPONENTTYPE_SRC_ANALOG |
KSNODETYPE_SPDIF_INTERFACE |
MIXERLINE_COMPONENTTYPE_SRC_DIGITAL |
KSNODETYPE_SPDIF_INTERFACE |
MIXERLINE_COMPONENTTYPE_SRC_DIGITAL |
In den obigen Tabellen gibt die linke Spalte die PIN-Kategorie-GUID aus der PCPIN_DESCRIPTOR Struktur des Pins an, und die rechten Spalten geben den entsprechenden Zieltyp und Komponententyp für die MIXERLINE-Struktur an.
Die Einträge in der Spalte mit der Bezeichnung "Bridge Pin?" geben an, ob es sich bei der Pin um einen Bridge-Pin handelt. Ein "Ja" bedeutet, dass der Pinkommunikationstyp KSPIN_COMMUNICATION_BRIDGE ist. Ein "Nein" bedeutet, dass der Pinkommunikationstyp ein anderer KSPIN_COMMUNICATION_Xxx-Wert als KSPIN_COMMUNICATION_BRIDGE ist. Wenn WDMAud den Pinkommunikationstyp beim Übersetzen der Pinparameter in mixer-line-Parameter ignoriert, ist der Eintrag "Bridge Pin?" ein Bindestrich (-).
Für alle Pinkategorien, die in den vorherigen Tabellen nicht angezeigt werden, übersetzt WDMAud die Eingabestifte in Quellmixerlinien mit Zieltypen von MIXERLINE_TARGETTYPE_UNDEFINED und Komponententypen von MIXERLINE_COMPONENTTYPE_SRC_UNDEFINED.
Die folgenden Tabellen zeigen, wie WDMAud Ausgabepins (KSPIN_DATAFLOW_OUT) in Zielmixerzeilen übersetzt. Die Spaltenüberschriften haben die gleiche Bedeutung wie in der vorherigen Tabelle. Die erste Tabelle zeigt, wie die GUIDs der KS-Pinkategorie für ausgabepin den zugeordneten MIXERLINE-Zieltypen zugeordnet werden.
GUID der KS-Pinkategorie | Bridge-Pin? | MIXERLINE-Zieltyp |
---|---|---|
KSNODETYPE_SPEAKER | - | MIXERLINE_TARGETTYPE_WAVEOUT |
KSNODETYPE_DESKTOP_SPEAKER | - | MIXERLINE_TARGETTYPE_WAVEOUT |
KSNODETYPE_ROOM_SPEAKER | - | MIXERLINE_TARGETTYPE_WAVEOUT |
KSNODETYPE_COMMUNICATION_SPEAKER | - | MIXERLINE_TARGETTYPE_WAVEOUT |
KSCATEGORY_AUDIO | - | MIXERLINE_TARGETTYPE_WAVEIN |
PINNAME_CAPTURE | - | MIXERLINE_TARGETTYPE_WAVEIN |
KSNODETYPE_HEADPHONES | - | MIXERLINE_TARGETTYPE_WAVEOUT |
KSNODETYPE_HEAD_MOUNTED_DISPLAY_AUDIO | - | MIXERLINE_TARGETTYPE_WAVEOUT |
KSNODETYPE_TELEPHONE | - | MIXERLINE_TARGETTYPE_UNDEFINED |
KSNODETYPE_PHONE_LINE | - | MIXERLINE_TARGETTYPE_UNDEFINED |
KSNODETYPE_DOWN_LINE_PHONE | - | MIXERLINE_TARGETTYPE_UNDEFINED |
KSNODETYPE_ANALOG_CONNECTOR | Yes | MIXERLINE_TARGETTYPE_WAVEOUT |
KSNODETYPE_ANALOG_CONNECTOR | No | MIXERLINE_TARGETTYPE_WAVEIN |
KSNODETYPE_SPDIF_INTERFACE | Yes | MIXERLINE_TARGETTYPE_WAVEOUT |
KSNODETYPE_SPDIF_INTERFACE | No | MIXERLINE_TARGETTYPE_WAVEIN |
Die folgende Tabelle zeigt, wie die GUIDs der KS-Pinkategorie für ausgabepin den zugeordneten MIXERLINE-Komponententypen zugeordnet werden.
PCPIN_DESCRIPTOR Werte | MIXERLINE-Werte |
---|---|
GUID der KS-Pinkategorie | Komponententyp |
KSNODETYPE_SPEAKER KSNODETYPE_DESKTOP_SPEAKER KSNODETYPE_ROOM_SPEAKER KSNODETYPE_COMMUNICATION_SPEAKER |
MIXERLINE_COMPONENTTYPE_DST_SPEAKERS |
KSCATEGORY_AUDIO PINNAME_CAPTURE |
MIXERLINE_COMPONENTTYPE_DST_WAVEIN |
KSNODETYPE_HEADPHONES KSNODETYPE_HEAD_MOUNTED_DISPLAY_AUDIO |
MIXERLINE_COMPONENTTYPE_DST_HEADPHONES |
KSNODETYPE_TELEPHONE KSNODETYPE_PHONE_LINE KSNODETYPE_DOWN_LINE_PHONE |
MIXERLINE_COMPONENTTYPE_DST_TELEPHONE |
KSNODETYPE_ANALOG_CONNECTOR |
MIXERLINE_COMPONENTTYPE_DST_SPEAKERS |
KSNODETYPE_ANALOG_CONNECTOR |
MIXERLINE_COMPONENTTYPE_DST_WAVEIN |
KSNODETYPE_SPDIF_INTERFACE |
MIXERLINE_COMPONENTTYPE_DST_SPEAKERS |
KSNODETYPE_SPDIF_INTERFACE |
MIXERLINE_COMPONENTTYPE_DST_WAVEIN |
Für alle Pinkategorien, die in den vorherigen Tabellen nicht angezeigt werden, übersetzt WDMAud die Ausgabepins in Zielmixerlinien mit Zieltypen von MIXERLINE_TARGETTYPE_UNDEFINED und Komponententypen von MIXERLINE_COMPONENTTYPE_DST_UNDEFINED.
In den vorherigen Tabellen weisen die meisten KS-Pinkategorie-GUIDs KSNODETYPE_Xxx-Namen auf. Diese Namen werden in den Headerdateien Ksmedia.h und Dmusprop.h definiert. (Zwei Abweichungen von dieser Benennungskonvention sind GUIDs KSCATEGORY_AUDIO und PINNAME_CAPTURE, die ebenfalls in Ksmedia.h definiert sind.) Wie unter Topologieknoten beschrieben, können KSNODETYPE_Xxx-GUIDs auch zum Festlegen von KS-Knotentypen verwendet werden. Die meisten KSNODETYPE_Xxx-GUIDs geben entweder Pinkategorien oder Knotentypen an, aber nicht beide. Die Ausnahme ist KSNODETYPE_SYNTHESIZER, die abhängig vom Kontext, in dem verwendet wird, entweder eine Pinkategorie oder einen Knotentyp angeben kann. Eine Liste der KSNODETYPE_Xxx-GUIDs , die Pinkategorien darstellen, finden Sie unter Pin Category Property. Eine Liste der KSNODETYPE_Xxx-GUIDs , die Knotentypen darstellen, finden Sie unter Audiotopologieknoten.
KSCATEGORY_AUDIO ist eine weitere GUID mit doppeltem Einsatz. Sie kann je nach Kontext entweder als GUID der KS-Pinkategorie oder als KS-Filterkategorie-GUID verwendet werden. Während der Geräteinstallation registriert ein Audiotreiber seine Geräteschnittstelle unter der Filterkategorie KSCATEGORY_AUDIO. Weitere Informationen finden Sie unter Installieren von Geräteschnittstellen für einen Audioadapter.
Für eine Pinkategorie mit KSNODETYPE_ANALOG_CONNECTOR oder KSNODETYPE_SPDIF_INTERFACE muss WDMAud wissen, ob es sich bei dem Stift um einen Brückenstift handelt, um den Stift korrekt in die Äquivalente der Mixerlinie zu übersetzen. Beispielsweise wird ein S/PDIF-Pin (mit pin category KSNODETYPE_SPDIF_INTERFACE) in einen der vier Mischlinientypen übersetzt, die in der folgenden Abbildung dargestellt sind. Die Übersetzung hängt sowohl von der Datenrichtung des Pins (ein- oder ausgehend) als auch davon ab, ob es sich um einen Brückenstift (ja oder nein) handelt, der zusammen vier mögliche Arten von Mischerlinie ergibt (in+ja, in+nein, out+ja und out+nein). Die in der Abbildung dargestellten vier Mischerlinientypen stellen die unteren Paare von Einträgen aus den vorherigen Tabellen dar.
Beachten Sie, dass zwei Streams auf der rechten Seite des Audiogeräts in der Abbildung im S/PDIF-Format und die beiden Streams auf der linken Seite im Wellenformat vorliegen. Das Audiogerät führt die Konvertierung zwischen den beiden digitalen Formaten durch.
Die SndVol32-Anwendung ist ein Client der Mixer-API. Die Mixer-API konvertiert jeden in der Topologie gefundenen Pin in eine Quell- oder Zielmixerzeile, aber die Zeile wird möglicherweise nicht in SndVol32 angezeigt, das nur eine Teilmenge der Mixer-Line-Komponententypen erkennt, die die Headerdatei Mmsystem.h für die Mixer-API definiert. Weitere Informationen zu SndVol32 finden Sie unter SysTray und SndVol32.