支持混合使用 2D 和 3D 引脚

如果 WDM 音频驱动程序支持混合使用 2D 和 3D 引脚,则 3D 引脚可以加倍用作 2D 引脚,但反之亦然。 当 DirectSound 需要 2D 引脚时,如果驱动程序提供 3D 引脚,则可以将未使用的 3D 引脚替换为该目的。 但是,如果 DirectSound 需要 3D 引脚,它会继续搜索驱动程序的固定实例列表,直到找到 3D 引脚,忽略搜索期间遇到的任何 2D 引脚。 DirectSound 检查驱动程序的引脚工厂列表,其顺序列出,直到找到满足其要求的引脚实例。

报告 2D 引脚计数时,驱动程序应指定 2D 引脚实例数加上 3D 引脚实例数。 报告 3D 引脚计数时,驱动程序应忽略 2D 引脚,并仅指定 3D 引脚实例数。

使用 Microsoft Windows 2000 和 Windows 98 分发的 DirectSound 版本在处理混合 2D 和 3D 引脚的引脚工厂时存在已知问题:DirectSound 错误地将 3D 引脚计数报告为 2D 引脚实例数加上 3D 引脚实例数。 解决此问题的解决方法是编写驱动程序,以便将 2D 和 3D 引脚隔离到两个单独的引脚工厂中。 一个工厂仅公开 2D 引脚,另一个工厂仅公开 3D 引脚。

使用 WDM 驱动程序时,DirectSound 正确地将 2D 引脚计数报告为两个工厂中 2D 和 3D 引脚的计数之和,并且它正确地将 3D 引脚计数报告为一个 3D 引脚工厂中的 3D 引脚数。 当为 2D 和 3D 引脚公开单独的工厂时,驱动程序应在 3D 引脚工厂之前列出 2D 引脚工厂。 这是必要的,因为当 DirectSound 查找 2D 引脚时,它使用找到的第一个 2D 或 3D 引脚,并且 DirectSound 检查驱动程序按驱动程序列出它们的顺序来检查引脚工厂。 如果驱动程序首先列出 3D 工厂,则它有可能通过不必要的使用 3D 引脚来耗尽 3D 引脚的供应,从而代替 2D 引脚。

总之,如果驱动程序公开了 2D 和 3D 引脚的混合体,则应遵循以下规则在早期版本的 DirectSound 上运行:

  • 分别为 2D 和 3D 引脚提供两个单独的引脚工厂。

  • 列出 3D 引脚工厂前的 2D 引脚工厂。

在更高版本的 DirectSound 中,不需要这些解决方法。 上述问题已在 Windows Me 和 Windows XP 及更高版本中得到修复。 DirectSound 8 中也修复了它,该版本已重新分发,以便与早期 Windows 版本一起使用。 通过此修补程序,驱动程序可以在单个引脚工厂中安全地组合 2D 和 3D 引脚,DirectSound 可以正确报告 2D 和 3D 引脚计数。 此外,当 DirectSound 需要 2D 引脚时,它仅当它耗尽了所有引脚工厂提供的 2D 引脚时,才使用 3D 引脚代替 2D 引脚。