Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Фабрики разъемов аудиофильтра описывают все разъемы, которые может создать фильтр. Как упоминалось ранее, драйвер аудиопорта хранит информацию о выводе в массиве структур PCPIN_DESCRIPTOR. Каждая структура указывает фабрику контактов, а фабрика контактов определяется его индексом в массиве. Этот индекс часто называется идентификатором пин-кода.
Структура PCPIN_DESCRIPTOR содержит таблицу автоматизации и структуру KSPIN_DESCRIPTOR .
Структура KSPIN_DESCRIPTOR содержит следующие сведения о штырях в фабрике штырей:
Направление потока данных относительно фильтра
Направление потока обмена данными относительно фильтра (во всех текущих версиях Windows фильтры KS используют irPs для обмена данными).)
Категория закреплений
Дружественное имя
Возможности экземпляра
Возможности форматирования данных
Члены структуры Категория и Имя указывают категорию штырей фабрики и удобочитаемое имя. Для каждой фабрики пинов в фильтре минипорт-драйвер задает комбинацию GUID Категории и Имени, которые вместе однозначно идентифицируют фабрику пинов. Если две или несколько фабрик пинов используют одно и то же значение категории, каждая фабрика пинов имеет значение имя, которое отличает её от других. Если только одна фабрика штифтов имеет определенное значение категории, это значение достаточно для идентификации фабрики, и значение NULL может быть установлено для имени этой фабрики. Пример кода см. в разделе "Экспонирование топологии фильтра". Для получения информации о категориях пинов см. Свойство категории пина.
Фабрика штифтов определяет поддерживаемый диапазон форматов данных как массив расширенных структур KSDATARANGE :
Фабрика аудиоконтактов, поддерживающая ряд форматов данных Wave или DirectSound для входного или выходного потока, задает массив структур KSDATARANGE_AUDIO.
Фабрика контактов, поддерживающая диапазон форматов данных MIDI или DirectMusic для входного или выходного потока, задает массив структур KSDATARANGE_MUSIC .
KSDATARANGE_AUDIO и KSDATARANGE_MUSIC являются расширенными версиями KSDATARANGE. Примеры обоих типов диапазонов данных см. в разделе "Форматы звуковых данных" и "Диапазоны данных".
Перед подключением входного пина одного фильтра к выходному пину другого фильтра, построитель графов (например, системный драйвер SysAudio) может искать диапазоны данных для совместимого формата. Построитель графов обычно вызывает обработчик пересечения данных фильтра, который позволяет самому фильтру выбрать совместимый формат.
Фильтр может иметь несколько фабрик узлов, а фабрика узлов может поддерживать несколько экземпляров векторов.
Наличие нескольких групп закреплений в фильтре полезно для различения отдельных каналов передачи для разных типов данных, которые проходят через фильтр. Например, одна фабрика контактов может поддерживать потоки данных PCM, а другая фабрика контактов может поддерживать потоки AC-3.
Один фильтр может одновременно поддерживать отрисовку и запись потоков. Пути отрисовки и записи имеют отдельные наборы модулей для фильтров.
Наличие нескольких экземпляров пинов на фабрике пинов приемника часто подразумевает микширование, в этом случае фильтр содержит узел SUM (KSNODETYPE_SUM).
Как и фильтры, пин-коды являются объектами ядра и определяются дескрипторами ядра. Дескриптор для экземпляра пин-кода создается путем вызова KsCreatePin. В качестве объекта ядра пин-код можно указать в качестве целевого объекта IRP. Клиент драйвера указывает дескриптор пина при отправке запроса IOCTL на пин.
При создании графа аудиофильтра SysAudio связывает один фильтр с другим, подключая их выводы. Выходной вывод одного фильтра может быть подключен к входному выводу другого фильтра. Данные и IRPs от исходного пина поступают на приемный пин через это соединение. Чтобы сделать подключение, построитель графов (обычно SysAudio) создает исходный пин сначала путем вызова KsCreatePin а затем создает пин назначения, вызвав KsCreatePin еще раз. Однако во втором вызове клиент указывает, что новый пин приемника должен быть подключен к исходному пину, созданному в первом вызове.