標頭檔案 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 SE + Hotfix 中的非 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 SE 的熱修正套件中移除,而且為了在這些 Windows 版本上支援 DirectSound 上的非 PCM,驅動程式應該明確列出每個非 PCM 數據格式的兩個數據範圍,一個具有KSDATAFORMAT_SPECIFIER_WAVEFORMATEX,另一個則具有KSDATAFORMAT_SPECIFIER_DSOUND。
如 S/PDIF Pass-Through 非 PCM 數據流傳輸中所述,兩個 AC-3-over-S/PDIF 數據範圍都使用下列 PCM 參數:每個通道兩個通道和 16 位。