Закрепление топологии
Системный драйвер WDMAud преобразует контакты топологии на фильтрах KS в исходные и целевые линии микшера, которые API микшера предоставляет приложениям. Входные (приемники) контакты становятся линиями исходного микшера, а выходные (исходные) — линиями целевого микшера.
Как описано в разделе Фабрики контактов, драйвер минипорта предоставляет массив дескрипторов контактов, каждый из которых представляет собой структуру типа PCPIN_DESCRIPTOR , описывающую фабрику контактов, принадлежающую фильтру. Каждый дескриптор закрепления содержит следующие сведения:
Описатель направления потока данных
Указывает, входит ли поток данных (KSPIN_DATAFLOW_IN) или выходит (KSPIN_DATAFLOW_OUT) через закрепление.
ИДЕНТИФИКАТОР GUID категории контактов KS
Указывает категорию контактов, к которой относится закрепление. Например, на устройстве воспроизведения звука один пин-код может принимать цифровой звуковой поток в формате волн, а другой — создавать аналоговый звуковой сигнал для управления динамиком. Драйвер мини-порта определяет эти два типа контактов как относящиеся к различным категориям контактов.
Описатель типа связи
Указывает тип обмена данными IRP, поддерживаемых закреплением. Контакт, поддерживающий обмен данными IRP, может быть приемником IRP (KSPIN_COMMUNICATION_SINK), источником IRP (KSPIN_COMMUNICATION_SOURCE) или обоими (KSPIN_COMMUNICATION_BOTH). Контакт, не поддерживающий обмен данными IRP, может находиться внутри графа фильтра KS (KSPIN_COMMUNICATION_NONE) или быть связующим контактом в конечной точке графа (KSPIN_COMMUNICATION_BRIDGE).
Дополнительные сведения о контактах моста см. в разделе Графы фильтра аудио.
WDMAud преобразует сведения из дескриптора pin-драйвера минипорта в дескриптор линии микшера, который представляет собой структуру типа MIXERLINE, которая включает в себя следующие сведения:
Тип компонента mixer-line
Указывает, является ли линия смесителя исходной или конечной, а также указывает общую функцию линии смесителя. Например, тип компонента для линии микшера, которая передает аналоговый сигнал, создаваемый из потока вывода волн (отрисовки) для передачи набора наушников, MIXERLINE_COMPONENTTYPE_DST_HEADPHONES.
Тип целевого объекта Mixer-line
Указывает тип потока данных, который транспортирует линия микшера. Например, целевой тип для потока вывода волн (отрисовки) — MIXERLINE_TARGETTYPE_WAVEOUT, а целевой тип для потока ввода (захвата) волн — MIXERLINE_TARGETTYPE_WAVEIN.
Дополнительные сведения см. в разделе Структура MIXERLINE в документации по пакету SDK.
В следующих двух таблицах показано, как WDMAud преобразует линии исходного микшера ввода (KSPIN_DATAFLOW_IN).
В первой таблице показано, как GUID категории контактов KS (PCPIN_DESCRIPTOR) сопоставляются с соответствующими целевыми типами MIXERLINE.
ИДЕНТИФИКАТОР GUID категории контактов KS | Мостик? | Тип целевого объекта MIXERLINE |
---|---|---|
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 | Да | 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_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 |
В предыдущих таблицах в левом столбце указывается GUID категории контактов из структуры PCPIN_DESCRIPTOR контакта, а в правых — соответствующий тип целевого объекта и тип компонента для структуры MIXERLINE.
Записи в столбце с меткой "Bridge Pin?" указывают, является ли контакт мостовой. Значение "Да" означает, что тип связи контактов KSPIN_COMMUNICATION_BRIDGE. Значение "Нет" означает, что тип связи контактов является значением KSPIN_COMMUNICATION_Xxx, отличным от KSPIN_COMMUNICATION_BRIDGE. Если WDMAud игнорирует тип связи контактов при преобразовании параметров контакта в параметры линии микшера, запись "Bridge Pin?" будет тире (-).
Для всех категорий контактов, которые не отображаются в предыдущих таблицах, 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.) Как описано в разделе Топология узлов, идентификаторы GUID KSNODETYPE_Xxx также можно использовать для назначения типов узлов KS. Большинство идентификаторов GUID KSNODETYPE_Xxx указывают категории контактов или типы узлов, но не оба. Исключением является KSNODETYPE_SYNTHESIZER, который может указать категорию контактов или тип узла в зависимости от контекста, в котором используется. Список идентификаторов GUID KSNODETYPE_Xxx, представляющих категории контактов, см. в разделе Свойство категории закрепления. Список идентификаторов GUID KSNODETYPE_Xxx, представляющих типы узлов, см. в разделе Узлы топологии аудио.
KSCATEGORY_AUDIO — это еще один GUID двойного использования. Его можно использовать в качестве GUID категории контактов KS или GUID категории фильтра KS в зависимости от контекста. Во время установки устройства звуковой драйвер регистрирует свой интерфейс устройства в категории фильтра KSCATEGORY_AUDIO. Дополнительные сведения см. в разделе Установка интерфейсов устройств для аудиоадаптера.
Для категории контактов KSNODETYPE_ANALOG_CONNECTOR или KSNODETYPE_SPDIF_INTERFACE WDMAud необходимо знать, является ли контакт мостикой, чтобы правильно преобразовать контакт в эквивалентную линию микшера. Например, контакт S/PDIF (с категорией контактов KSNODETYPE_SPDIF_INTERFACE) преобразуется в один из четырех типов линий микшера, показанных на следующем рисунке. Преобразование зависит от направления данных контакта (вход или выход), а также от того, является ли он связующей линией (да или нет), которая вместе дает четыре возможных типа линии микшера (in+yes, in+no, out+yes и out+no). Четыре типа линий микшера, показанные на рисунке, представляют собой нижние пары записей из предыдущих таблиц.
Обратите внимание, что два потока в правой части звукового устройства на рисунке имеют формат S/PDIF, а два потока слева — в формате волн. Звуковое устройство выполняет преобразование между двумя цифровыми форматами.
Приложение SndVol32 является клиентом API микшера. API микшера преобразует каждый контакт, найденный в топологии, в исходную или целевую линию микшера, но линия может не отображаться в SndVol32, который распознает только подмножество типов компонентов линии микшера, которые файл заголовка Mmsystem.h определяет для API микшера. Дополнительные сведения о SndVol32 см. в разделе SysTray и SndVol32.