指定 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 位。