硬件卸载音频驱动程序实现

实现用于卸载音频的驱动程序时,请开发能够处理卸载的音频流的驱动程序,并向 Windows 音频系统公开该功能。

本主题介绍为能够处理硬件卸载音频流的音频适配器开发的音频驱动程序的实现详细信息。

本节中的这些附加主题讨论了为音频适配器开发音频驱动程序时应注意的问题,该适配器会实现硬件音频引擎来处理卸载的音频流。

用于卸载音频处理的 Portcls 帮助程序接口

已卸载音频的故障报告

硬件卸载 - KS 筛选器拓扑

Windows 支持使用可以使用板载硬件音频引擎处理音频流的音频适配器。 开发此类音频适配器时,关联的音频驱动程序必须以特定方式向用户模式音频系统公开此事实,以便音频系统能够发现、使用和正确公开此适配器及其驱动程序的功能。

Diagram showing a DSP-equipped system implementing effects in hardware.

节点描述符的 KSNODETYPE_AUDIO_ENGINE GUID

如果音频适配器能够处理卸载的音频流,该适配器的音频驱动程序将使用该适配器的 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 注册表项。

节点类型 KSNODETYPE_AUDIO_ENGINE 的 GUID 的定义如下所示:

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 音频处理对象