指定 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 SE + Hotfix 中的非 PCM AC-3-over-S/PDIF 格式。
對於迷你埠驅動程式使用 KSDATAFORMAT_SPECIFIER_WAVEFORMATEX 指定的每個資料範圍,埠驅動程式會自動新增第二個數據範圍,該範圍是使用 KSDATAFORMAT_SPECIFIER_DSOUND 指定,但與其他第一個資料範圍相同。 (您可以使用 KsStudio 公用程式 來確認此問題,以檢視 Windows 2000 和 Windows 98 中的資料範圍清單。) 在 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 位。