Реализация аппаратного отключенного звукового драйвера

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

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

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

Вспомогательные интерфейсы Portcls для разгруженной обработки аудио

Отчеты о глитчах для отключенных звуковых

Разгрузка оборудования — топология фильтров KS

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

Схема, на которой показана система, оснащенная DSP, реализующая эффекты в оборудовании.

GUID KSNODETYPE_AUDIO_ENGINE для дескрипторов узлов

Если звуковой адаптер может обрабатывать отключенные звуковые потоки, звуковой драйвер адаптера предоставляет эту возможность с помощью узла в фильтре KS для адаптера.

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

Каждый узел в пути аудиопотока имеет дескриптор узла; для аппаратной разгрузки драйвер должен задать GUID типа на KSNODETYPE_AUDIO_ENGINE.

Ниже приведен пример того, как драйвер может настроить дескриптор узла для этого узла:

typedef struct _KSNODE_DESCRIPTOR {
  const KSAUTOMATION_TABLE *AutomationTable;    // drv specific
  const GUID               *Type;       // must be set to KSNODETYPE_AUDIO_ENGINE
  const GUID               *Name;       // drv specific (KSNODETYPE_AUDIO_ENGINE?)  
} KSNODE_DESCRIPTOR, *PKSNODE_DESCRIPTOR;

Если для GUID имени задано значение KSNODETYPE_AUDIO_ENGINE, необходимо создать строку имени по умолчанию для этого узла. Затем вы добавите эту строку в ks.inf, чтобы во время установки драйвера можно использовать строку для заполнения раздела реестра MediaCategories .

Определение GUID для типа узла KSNODETYPE_AUDIO_ENGINE выглядит следующим образом:

Code style
#define STATIC_KSNODETYPE_AUDIO_ENGINE\
    0x35caf6e4, 0xf3b3, 0x4168, 0xbb, 0x4b, 0x55, 0xe7, 0x7a, 0x46, 0x1c, 0x7e
DEFINE_GUIDSTRUCT("35CAF6E4-F3B3-4168-BB4B-55E77A461C7E", KSNODETYPE_AUDIO_ENGINE);
#define KSNODETYPE_AUDIO_ENGINE DEFINE_GUIDNAMED(KSNODETYPE_AUDIO_ENGINE)

Дополнительные сведения см. в файле заголовка ksmedia.h .

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

PCNODE_DESCRIPTOR MiniportNodes[] =
{
    // KSNODE_WAVE_AUDIO_ENGINE
    {
        0,                          // Flags
        NULL,                       // AutomationTable
        &KSNODETYPE_AUDIO_ENGINE,   // Type  KSNODETYPE_AUDIO_ENGINE
        NULL                        // Name
    }
};

Набор свойств KSPROPSETID_AudioEngine KS для аудиодвижков.

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

Набор свойств, KSPROPSETID_AudioEngine, определяется следующим образом:

#define STATIC_KSPROPSETID_AudioEngine\
    0x3A2F82DCL, 0x886F, 0x4BAA, 0x9E, 0xB4, 0x8, 0x2B, 0x90, 0x25, 0xC5, 0x36
DEFINE_GUIDSTRUCT("3A2F82DC-886F-4BAA-9EB4-082B9025C536", KSPROPSETID_AudioEngine);
#define KSPROPSETID_AudioEngine DEFINE_GUIDNAMED(KSPROPSETID_AudioEngine)

Имена свойств в этом наборе свойств определяются в перечислении KSPROPERTY_AUDIOENGINE , и драйвер должен поддерживать эти имена.

Ниже приведены свойства в наборе свойств KSPROPSETID_AudioEngine :

KSPROPERTY_AUDIOENGINE_BUFFER_SIZE_RANGE

KSPROPERTY_AUDIOENGINE_DESCRIPTOR

KSPROPERTY_AUDIOENGINE_DEVICEFORMAT

KSPROPERTY_AUDIOENGINE_GFXENABLE

KSPROPERTY_AUDIOENGINE_LFXENABLE

KSPROPERTY_AUDIOENGINE_LOOPBACK_PROTECTION

KSPROPERTY_AUDIOENGINE_MIXFORMAT

KSPROPERTY_AUDIOENGINE_SUPPORTEDDEVICEFORMATS

KSPROPERTY_AUDIOENGINE_VOLUMELEVEL

Обязательные свойства в наборе свойств KSPROPSETID_ Audio

Помимо поддержки свойств в наборе свойств KSPROPSETID_AudioEngine драйвер также должен поддерживать следующие существующие свойства в наборе свойств KSPROPSETID_Audio :

KSPROPERTY_AUDIO_MUTE

KSPROPERTY_AUDIO_PEAKMETER2

KSPROPERTY_AUDIO_VOLUMELEVEL

Чтобы завершить реализацию поддержки драйверов для аппаратной разгрузки звуковой обработки, в наборе свойств KSPROPSETID_Audio доступны необходимые свойства.

KSPROPERTY_AUDIO_LINEAR_BUFFER_POSITION

KSPROPERTY_AUDIO_PRESENTATION_POSITION

KSPROPERTY_AUDIO_WAVERT_CURRENT_WRITE_POSITION

Обновления драйверов класса портов и отчеты о сбоях

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

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

Объекты обработки звука Windows