Реализация аппаратного драйвера звука с разгрузкой
При реализации драйвера для разгрузки звука вы разрабатываете драйвер, который может обрабатывать разгруженные аудиопотоки и предоставлять эту возможность звуковой системе Windows.
В этом разделе представлены сведения о реализации аудиодрайва, разработанного для аудиоадаптера, способного обрабатывать аппаратно-разгруженные аудиопотоки.
В этих дополнительных разделах этого раздела рассматриваются проблемы, которые следует учитывать при разработке звукового драйвера для аудиоадаптера, который реализует аппаратное звуковое ядро для обработки разгруженных аудиопотоков.
Вспомогательные интерфейсы portcls для разгрузки обработки звука
Отчеты о сбоях для разгруженного звука
Разгрузка оборудования — топология фильтра KS
Windows поддерживает использование аудиоадаптера, который может использовать встроенный аппаратный звуковой модуль для обработки аудиопотоков. При разработке такого звукового адаптера связанный звуковой драйвер должен предоставлять этот факт звуковой системе пользовательского режима определенным образом, чтобы аудиосистема пользовала, пользовала и правильно предоставляла функции этого адаптера и его драйвера.
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 .
На основе приведенных выше сведений дескриптор для узла miniport может выглядеть следующим образом:
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 :
Чтобы завершить реализацию поддержки драйвера для аппаратной разгрузки звука, свойства доступны для набора свойств KSPROPSETID_ Audio .
KSPROPERTY_AUDIO_LINEAR_BUFFER_POSITION
KSPROPERTY_AUDIO_PRESENTATION_POSITION
KSPROPERTY_AUDIO_WAVERT_CURRENT_WRITE_POSITION
Обновления драйверов класса порта и отчеты о сбоях
В дополнение к поддержке, описанной в предыдущих разделах для аппаратной разгрузки звука, драйвер класса портов Windows предоставляет вспомогательные интерфейсы, упрощающие разработку драйвера, который может работать с разгруженными аудиопотоками. И когда такой драйвер обнаруживает сбои, существует механизм, позволяющий водителю сообщать об ошибках. В следующих разделах содержатся дополнительные сведения о вспомогательных интерфейсах и отчетах о сбоях.
Вспомогательные интерфейсы portcls для разгрузки обработки звука В дополнение к поддержке, описанной в предыдущих разделах для аппаратной разгрузки звука, драйвер класса портов Windows также включает вспомогательные интерфейсы, упрощающие разработку драйвера, который может работать с разгруженными аудиопотоками. И когда такой драйвер обнаруживает сбои, существует механизм, позволяющий водителю сообщать об ошибках. В следующих разделах содержатся дополнительные сведения о вспомогательных интерфейсах и отчетах о сбоях.