Штифты топологии

Драйвер системы WDMAud преобразует топологические контакты на фильтрах KS в входные и выходные линии микшера, которые API микшера предоставляет приложениям. Входные (приемник) контакты становятся линиями смешивания источников, а выходные (исходные) закрепления становятся конечными линиями миксера.

Как описано в pin-фабриках, минипорт-драйвер предоставляет массив дескрипторов контактов, каждый из которых является структурой типа PCPIN_DESCRIPTOR, описывающей фабрику контактов фильтра. Каждый дескриптор пин-кода содержит следующие сведения:

  • Описатель направления потока данных

    Указывает, входит ли поток данных (KSPIN_DATAFLOW_IN) или выходит (KSPIN_DATAFLOW_OUT) фильтр через контакт.

  • GUID категории пинов KS

    Указывает категорию контактов, к которой принадлежит данный контакт. Например, на устройстве воспроизведения звука один пин может принимать цифровой аудиопоток в формате WAV, а другой пин может создать аналоговый звуковой сигнал для управления динамиком. Минипорт-драйвер идентифицирует эти два типа пин-кодов как принадлежащие отдельным категориям пин-кода.

  • Описатель типа связи

    Указывает тип коммуникаций IRP, поддерживаемых пином. Штырь, который поддерживает IRP-коммуникации, может быть приемником IRP (KSPIN_COMMUNICATION_SINK), источником IRP (KSPIN_COMMUNICATION_SOURCE) или обоими (KSPIN_COMMUNICATION_BOTH). Пин, который не поддерживает обмен данными IRP, может находиться внутри графа фильтров KS (KSPIN_COMMUNICATION_NONE) или быть мостовым контактом в конечной точке графа (KSPIN_COMMUNICATION_BRIDGE).

Дополнительные сведения о штифтах для бриджа см. в разделе «Аудиофильтровые графы».

WDMAud преобразует сведения из дескриптора пин-кода драйвера miniport в дескриптор линии миксера, который является структурой типа MIXERLINE, которая содержит следующие сведения:

  • Тип компонента mixer-line

    Указывает, является ли линия миксера источником или конечной линией, а также указывает общую функцию линии миксера. Например, тип компонента для линии микшера, которая передает аналоговый сигнал, полученный из потока вывода звуковой волны (рендеринга), для работы с набором наушников, - это MIXERLINE_COMPONENTTYPE_DST_HEADPHONES.

  • Тип целевого объекта mixer-line

    Указывает тип потока данных, который транспортирует линия миксера. Например, целевой тип для потока визуализации звука (rendering) - MIXERLINE_TARGETTYPE_WAVEOUT, а целевой тип для потока ввода звука (capture) - MIXERLINE_TARGETTYPE_WAVEIN.

Дополнительные сведения см. в структуре MIXERLINE в документации по пакету SDK.

В следующих двух таблицах показано, как WDMAud преобразует входные штыри (KSPIN_DATAFLOW_IN) на линии исходного миксера.

В первой таблице показано, как GUID категорий входного контакта KS (значения PCPIN_DESCRIPTOR) сопоставляются с соответствующими типами целевых объектов MIXERLINE.

GUID категории пинов KS Штифт моста? Тип целевого объекта MIXERLINE
KSNODETYPE_МИКРОФОН - 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 (Тип узла аналогового соединителя) Да MIXERLINE_TARGETTYPE_WAVEIN
KSNODETYPE_ANALOG_CONNECTOR нет MIXERLINE_TARGETTYPE_WAVEOUT
KSNODETYPE_SPDIF_INTERFACE Да MIXERLINE_TARGETTYPE_WAVEIN
KSNODETYPE_SPDIF_INTERFACE нет MIXERLINE_TARGETTYPE_WAVEOUT

В следующей таблице показано, как GUID категории входных контактов KS соответствуют типам компонентов MIXERLINE.

Значения PCPIN_DESCRIPTOR Значения MIXERLINE
GUID категории контакта KS Тип компонента

KSNODETYPE_МИКРОФОН

KSNODETYPE_DESKTOP_MICROPHONE (микрофон для настольного использования)

MIXERLINE_COMPONENTTYPE_SRC_МИКРОФОН

KSNODETYPE_LEGACY_AUDIO_CONNECTOR

Категория звука KSCATEGORY_AUDIO

KSNODETYPE_SPEAKER

MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT

KSNODETYPE_CD_PLAYER

MIXERLINE_COMPONENTTYPE_SRC_КОМПАКТ-ДИСК

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_АНАЛОГОВЫЙ_КОННЕКТОР

MIXERLINE_COMPONENTTYPE_SRC_ANALOG

KSNODETYPE_SPDIF_INTERFACE

MIXERLINE_COMPONENTTYPE_SRC_DIGITAL

KSNODETYPE_SPDIF_INTERFACE

MIXERLINE_COMPONENTTYPE_SRC_DIGITAL

В предыдущих таблицах левый столбец указывает GUID категории выводов из структуры PCPIN_DESCRIPTOR вывода, а правые столбцы указывают соответствующий тип целевого объекта и тип компонента для структуры MIXERLINE.

Записи в столбце с меткой "Штифт моста?" указывают, является ли штифт мостовым. Значение "Да" означает, что тип связи контакта — KSPIN_COMMUNICATION_BRIDGE. Значение "Нет" означает, что тип связи пина — это значение KSPIN_COMMUNICATION_Xxx, отличающееся от KSPIN_COMMUNICATION_BRIDGE. Если WDMAud игнорирует тип коммуникации пина при переводе параметров пина в параметры линии микшера, запись "бриджевый пин?" — это тире (-).

Для всех категорий пинов, которые не отображаются в предыдущих таблицах, WDMAud преобразует входные пины на каналы исходного миксера с целевыми типами MIXERLINE_TARGETTYPE_UNDEFINED и типами компонентов MIXERLINE_COMPONENTTYPE_SRC_UNDEFINED.

В следующих таблицах показано, как WDMAud преобразует выходные выводы (KSPIN_DATAFLOW_OUT) в линии назначения микшера. Заголовки столбцов имеют те же значения, что и в предыдущей таблице. В первой таблице показано, как GUID категорий выводного пина KS сопоставляются с целевыми типами MIXERLINE.

GUID категории пинов KS Штифт моста? Тип целевого объекта MIXERLINE
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 Да MIXERLINE_TARGETTYPE_WAVEOUT
KSNODETYPE_ANALOG_CONNECTOR нет MIXERLINE_TARGETTYPE_WAVEIN
KSNODETYPE_SPDIF_INTERFACE Да MIXERLINE_TARGETTYPE_WAVEOUT
KSNODETYPE_SPDIF_INTERFACE нет MIXERLINE_TARGETTYPE_WAVEIN

В следующей таблице показано, как категории GUID выходных штырей KS сопоставляются с соответствующими типами компонентов MIXERLINE.

значения PCPIN_DESCRIPTOR Значения MIXERLINE
GUID категории пинов KS Тип компонента

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

Для всех категорий контактов, которые не отображаются в предыдущих таблицах, WDMAud преобразует выходные контакты в линии целевого миксера с целевыми типами MIXERLINE_TARGETTYPE_UNDEFINED и типами компонентов MIXERLINE_COMPONENTTYPE_DST_UNDEFINED.

В предыдущих таблицах большинство GUID категории пинов KS имеют имена KSNODETYPE_Xxx. Эти имена определены в файлах заголовков Ksmedia.h и Dmusprop.h. (Два отклонения от этого соглашения об именовании — это идентификаторы GUID KSCATEGORY_AUDIO и PINNAME_CAPTURE, которые также определены в Ksmedia.h.) Как описано в разделе "Узлы топологии", KSNODETYPE_Xxx GUID также можно использовать для назначения типов узлов KS. Большинство KSNODETYPE_Xxxx GUID указывает либо категории выводов, либо типы узлов, но не то и другое одновременно. Исключением является KSNODETYPE_SYNTHESIZER, который может указывать категорию разъема или тип узла в зависимости от контекста использования. Список идентификаторов GUID KSNODETYPE_Xxxx, представляющих категории контактов, см. в разделе "Свойство категории контактов". Список KSNODETYPE_Xxx GUID, представляющих типы узлов, см. в разделе "Узлы аудио топологии".

KSCATEGORY_AUDIO — это еще один GUID двойного использования. Его можно использовать как GUID категории пинов KS или GUID категории фильтров KS в зависимости от контекста. Во время установки устройства звуковой драйвер регистрирует свой интерфейс устройства в категории фильтра KSCATEGORY_AUDIO. Дополнительные сведения см. в статье об установке интерфейсов устройств для аудиоадаптера.

Для категории контакта KSNODETYPE_ANALOG_CONNECTOR или KSNODETYPE_SPDIF_INTERFACE WDMAud необходимо знать, является ли контакт мостовым контактом, чтобы правильно перевести его в эквивалент линии микшера. Например, пин-код S/PDIF (с категорией контактов KSNODETYPE_SPDIF_INTERFACE) преобразуется в один из четырех типов линий миксера, показанных на следующем рисунке. Перевод зависит от направления данных пина (вход или выход), а также от того, является ли он мостовым пином (да или нет), что вместе дает четыре возможных типа линии микшера (вход+да, вход+нет, выход+да и выход+нет). Четыре типа смешивания, показанные на рисунке, представляют нижние пары записей из предыдущих таблиц.

Схема, иллюстрирующая преобразование контактов S/PDIF в линии миксера.

Обратите внимание, что два потока в правой части звукового устройства на рисунке находятся в формате S/PDIF, а два потока слева находятся в формате волны. Звуковое устройство выполняет преобразование между двумя цифровыми форматами.

Приложение SndVol32 является клиентом API микшера. API микшера преобразует каждый пин, найденный в топологии, в линию источника или приемника микшера, но линия может не отображаться в SndVol32, которая распознает только подмножество типов микшерных линий, определенных в заголовочном файле Mmsystem.h для API микшера. Дополнительные сведения о SndVol32 см. в статье SysTray и SndVol32.