Поделиться через


Закрепление топологии

Системный драйвер 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 в линии микшера.

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

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