HD 音频 DDI 版本之间的差异

HD 音频 DDI 提供三个略有不同的版本,它们的定义如下所示:

  • HD 音频 DDI 的基准版本,由 HDAUDIO_BUS_INTERFACE 结构定义。 音频和调制解调器编解码器的大多数函数驱动程序只需要此 DDI 版本提供的功能。 此版本通过 Windows XP 和 Windows Vista 附带的 HD 音频总线驱动程序提供。

  • HDAUDIO_BUS_INTERFACE_V2 结构定义的 HD 音频 DDI 的增强版本。 此版本的 DDI 提供了灵活地支持 DMA 驱动的事件通知所需的附加功能。 它在 Windows Vista 及更高版本的 Windows 中可用。

  • HDAUDIO_BUS_INTERFACE_BDL 结构定义的 HD 音频 DDI 的经过修改的版本。 此版本满足相对较少的音频和调制解调器驱动程序的要求,这些驱动程序必须对 DMA 操作的缓冲区描述符列表 (BDL) 的设置进行额外的控制。 此版本的 DDI 适用于 Windows XP 和更高版本的 Windows。 但是,请改用 HDAUDIO_BUS_INTERFACE 或 HDAUDIO_BUS_INTERFACE_V2 DDI 版本。 。

在所有三个结构中,前五个成员的名称和类型与 INTERFACE 结构的五个成员的名称和类型匹配。 有关这些成员的值的信息,请参阅获取 HDAUDIO_BUS_INTERFACE DDI 对象获取 HDAUDIO_BUS_INTERFACE_V2 DDI 对象获取 HDAUDIO_BUS_INTERFACE_BDL DDI 对象

HD 音频 DDI 的三个版本中的例程会执行以下任务:

  • 将命令传输到编解码器并检索对这些命令的响应。

  • 分配并设置 DMA 引擎以在呈现和捕获流中传输数据。

  • 将一个或多个 DMA 引擎的流状态更改为正在运行、已暂停、已停止或重置。

  • 保留用于呈现和捕获流的链接带宽。

  • 提供对挂钟寄存器和链接位置寄存器的直接访问。

  • 通知客户端来自编解码器的未经请求的响应。

  • 注册内核事件,以便它们可以接收 DMA 进度通知。

DDI 的 HDAUDIO_BUS_INTERFACE 和 HDAUDIO_BUS_INTERFACE_BDL 版本具有以下差异:

当客户端在第一个 DDI 版本中调用 AllocateDmaBuffer 例程时,HD 音频总线驱动程序:

  • 分配 DMA 缓冲区和 BDL 供 DMA 引擎使用。

  • 初始化 BDL。

  • 设置 DMA 引擎以使用缓冲区和 BDL。

相比之下,第二个 DDI 版本中的 AllocateContiguousDmaBuffer 例程为 DMA 缓冲区和 BDL 分配存储,但依赖于调用方来初始化 BDL。 SetupDmaEngineWithBdl 例程会设置 DMA 引擎以使用缓冲区和调用方初始化的 BDL。

BDL 包含 DMA 引擎的分散/集中队列中物理内存块的列表。 通过调用 SetupDmaEngineWithBdl 以设置 BDL,客户端可以指定数据流中 DMA 引擎生成中断的点。 客户端通过在所选 BDL 条目中设置完成后中断 (IOC) 位来执行此操作。 借助此功能,客户端可以精确控制在处理音频流期间发生的 IOC 中断的计时。 音频调制解调器驱动程序还使用第二个 DDI 版本来获取准确的系统时钟信息。

有关详细信息,请参阅 Intel 高清音频规范

但是,几乎所有客户端都将使用 DDI 的 HDAUDIO_BUS_INTERFACE 版本。 只有少数需要精确控制中断计时的客户端才会使用 HDAUDIO_BUS_INTERFACE_BDL 版本。