共用方式為


指定 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 中,埠驅動程式只會針對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 位。