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


Анализ топологии WDMAud

Системный драйвер WDMAud сначала анализирует строки целевого микшера перед анализом исходных линий микшера. Порядок, в котором WDMAud анализирует строки назначения, является обратным порядком, в котором SysAudio обнаруживает строки. Например, сначала анализируются более высокие нумерованные контакты. Синтаксический анализ начинается с непосредственного родительского элемента контакта и перемещается в вышестоящий направлении. Каждый узел преобразуется в соответствии с этими правилами до тех пор, пока средство синтаксического анализа не обнаружит одно из следующих условий завершения:

  • Текущий анализируемый узел является узлом SUM.

  • Текущий узел является узлом MUX.

  • Текущий узел имеет несколько родительских элементов.

Узлы SUM и MUX являются классическими признаками конца конечной строки. Узел SUM не создает никаких элементов управления. Узел MUX создает элемент управления MUX в строке назначения, который содержит ссылки на каждую из исходных строк, управляемых MUX.

При обнаружении нескольких родительских элементов синтаксический анализ немедленно завершается. Драйвер линии микшера интерпретирует это условие как "виртуальную сумму", которая формируется путем связывания нескольких входных данных.

Имя конечной строки происходит от имени, возвращенного свойством KSPROPERTY_PIN_NAME этого контакта.

После перевода всех элементов управления конечной строкой WDMAud начинает перевод исходных строк. Опять же, порядок, в котором WDMAud анализирует эти строки, является обратным порядком, в котором SysAudio запрашивает их. Кроме того, направление анализа исходных линий отличается от направления, в котором выполняется анализ конечных линий. WDMAud анализирует каждую строку, начинающуюся с закрепления и продолжающуюся в нисходящем направлении, пока не обнаружит одно из следующих условий завершения:

  • Средство синтаксического анализа находит целевую строку.

  • Текущий переводимый узел принадлежит строке назначения.

  • Текущий узел является узлом SUM.

  • Текущий узел является узлом MUX.

При обнаружении мультиплексного выражения во время анализа исходной строки, которая принадлежит целевой строке, он преобразуется в элемент управления . Однако он используется только в качестве заполнителя для обновления номеров строк в мультиплексе, хранящихся в конечной строке позже. Окончательные номера строк пока недоступны, поэтому требуется заполнитель.

Как узел MUX, так и узел SUM завершают исходную строку; Поэтому все узлы между SUM или MUX и другим SUM или MUX не претворяются.

Заметки

  1. Имена строк в MUX являются производными от имени контакта для строки, за исключением случаев, когда строка, подаемая в MUX, является из узла SUM или MUX. В этом случае имя строки — это имя узла MUX или SUM. Когда драйвер микшера обнаруживает это, он создает линию виртуального микшера с именем узла SUM или MUX, а затем преобразует все элементы управления между SUM или MUX и MUX.

  2. Разделение в топологии — это случай, когда узел имеет более одного дочернего элемента. Это полезно, если один контакт направляется в два отдельных назначения, но использует некоторые общие элементы управления, такие как том или отключение звука. При возникновении разделения драйвер WDMAud создает новую строку и дублирует все элементы управления, проанализированные до разделения. Это происходит безоговорочно при обнаружении разбиения, даже после обнаружения узла SUM, который завершает исходную строку.