指定 AC-3 数据范围

头文件 Mmreg.h 定义值0x0092为 AC-3-over-S/PDIF 的波形格式标记:

    #define WAVE_FORMAT_DOLBY_AC3_SPDIF  0x0092

波形格式标记0x0240和0x0241是0x0092的同义词,许多 DVD 应用程序将这三个标记视为相同的标记。 但是,为了消除冗余,驱动程序和应用程序应仅支持标记0x0092(不支持标记0x0240和0x0241)。

通过使用头文件 Ksmedia.h 中的DEFINE_WAVEFORMATEX_GUID宏,可以使用波形格式标记来指定相应的格式子类型 GUID,如下所示:

  #define KSDATAFORMAT_SUBTYPE_AC3_SPDIF    \
                      DEFINE_WAVEFORMATEX_GUID(WAVE_FORMAT_DOLBY_AC3_SPDIF)

下面的代码示例演示 WaveCyclic 或 WavePci 微型端口驱动程序如何为支持 AC-3-over-S/PDIF 格式的引脚指定 KSDATARANGE_AUDIO 表项:

static KSDATARANGE_AUDIO PinDataRangesAC3Stream[] =
{
  // 48-kHz AC-3 over S/PDIF
  {
    {
      sizeof(KSDATARANGE_AUDIO),
      0,
      0,
      0,
      STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO),
      STATICGUIDOF(KSDATAFORMAT_SUBTYPE_DOLBY_AC3_SPDIF),
      STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX)
    },
    2,     // Max number of channels
    16,    // Minimum number of bits per sample
    16,    // Maximum number of bits per channel
    48000, // Minimum rate
    48000  // Maximum rate
  },

  // If you do not include this second data range (which is identical
  // to the first except for the value KSDATAFORMAT_SPECIFIER_DSOUND),
  // then your non-PCM pin is not seen by DirectSound on Windows 98 SE
  // or Windows 2000, regardless of the DirectX version or whether a
  // hotfix or service pack is installed.
  {
    {
      sizeof(KSDATARANGE_AUDIO),
      0,
      0,
      0,
      STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO),
      STATICGUIDOF(KSDATAFORMAT_SUBTYPE_DOLBY_AC3_SPDIF),
      STATICGUIDOF(KSDATAFORMAT_SPECIFIER_DSOUND)
    },
    2,     // Max number of channels
    16,    // Minimum number of bits per sample
    16,    // Maximum number of bits per channel
    48000, // Minimum rate
    48000  // Maximum rate
  }
};

上表中的第二个数据范围条目是使 DirectSound 能够处理 Windows 2000 SP2 和 Microsoft Windows 98 标准版 + 修补程序中的非 PCM AC-3-over-S/PDIF 格式所必需的。

对于微型端口驱动程序使用 KSDATAFORMAT_SPECIFIER_WAVEFORMATEX 指定的每个数据范围,端口驱动程序会自动添加使用 KSDATAFORMAT_SPECIFIER_DSOUND 指定的第二个数据范围,但与其他数据区域相同。 (可以使用 用于查看数据范围的 KsStudio 实用工具 。在 Windows 2000 和 Windows 98 中,端口驱动程序仅针对KSDATAFORMAT_SUBTYPE_PCM格式创建KSDATAFORMAT_SPECIFIER_DSOUND版本的数据范围,因为 DirectSound 8 之前的 DirectSound 版本仅支持 PCM。 此限制在 Windows XP 及更高版本和 Windows Me 中删除。 但是,它不会在 Windows 2000 SP2 或 Windows 98 标准版的热修复包中删除,为了在这些 Windows 版本上支持 DirectSound 上的非 PCM,驱动程序应显式列出每个非 PCM 数据格式的两个数据范围-一个具有KSDATAFORMAT_SPECIFIER_WAVEFORMATEX,另一个具有KSDATAFORMAT_SPECIFIER_DSOUND。

如非 PCM 流的 S/PDIF 直通传输中所述,两个 AC-3-over-S/PDIF 数据范围都使用以下 PCM 参数:每个通道两个通道和 16 位。