共用方式為


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