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


Обработчики Data-Intersection по умолчанию

Собственный обработчик пересечения данных адаптера (метод IMiniport::D ataRangeIntersection объекта miniport driver) может отклонить выполнение проверка пересечения данных, возвращая код состояния STATUS_NOT_IMPLEMENTED. В этом случае обработчик пересечения данных драйвера порта по умолчанию выполняет проверка от имени адаптера.

Вы можете реализовать минимальный обработчик пересечения данных для драйвера адаптера в качестве метода DataRangeIntersection , который отклоняет все запросы пересечения данных, возвращая STATUS_NOT_IMPLEMENTED.

Текущая реализация обработчика по умолчанию драйвера порта ограничена типами диапазонов данных, которые он может обрабатывать:

  • Только форматы данных PCM

  • Только моно- и стереофонические аудиопотоки

Драйвер адаптера, поддерживающий форматы, отличные от PCM или multichannel, должен реализовывать собственный обработчик пересечения данных, а не полагаться на драйвер порта для обработки пересечений данных для этих форматов.

Кроме того, обработчик по умолчанию поддерживает только форматы звука, которые могут быть заданы структурой KSDATAFORMAT_DSOUND или KSDATAFORMAT_WAVEFORMATEX . Он не поддерживает формат, содержащий структуру WAVEFORMATEXTENSIBLE , которая необходима, например, для указания маски канала для формата с более чем двумя каналами.

При выборе общего формата из пересечения двух диапазонов данных обработчик по умолчанию драйвера порта всегда выбирает наибольшее значение в области пересечения каждого параметра:

  • Если пересечение охватывает более одной допустимой частоты выборки (например, 11, 22 и 44 кГц), обработчик по умолчанию выбирает самую высокую частоту.

  • Если пересечение охватывает несколько допустимых битов на выборку значения (например, 8, 16 и 32 бита), обработчик по умолчанию выбирает наибольшее значение.

  • Если пересечение охватывает моно- и стереоформаты, обработчик по умолчанию выбирает стерео.

Если обработчик по умолчанию выбирает формат, который является неудовлетворительным, драйвер адаптера может отклонить формат, не выполнив вызов NewStream (например, см. раздел IMiniportWavePci::NewStream), когда SysAudio пытается создать контакт приемника с форматом. В случае сбоя вызова SysAudio не будет искать пересечения данных. Вместо этого он попытается создать подключение путем итерации по списку форматов PCM, поддерживаемых системными фильтрами, такими как KMixer, пока не найдет тот, который может поддерживаться контактом приемника адаптера. Сначала список упорядочен с более высоким качеством форматов. Как и ранее, адаптер отклоняет неудовлетворительные форматы в списке, не выполнив вызовы NewStream для этих форматов.