Menentukan Rentang Data AC-3

File header Mmreg.h mendefinisikan nilai 0x0092 menjadi tag format gelombang untuk AC-3-over-S/PDIF:

    #define WAVE_FORMAT_DOLBY_AC3_SPDIF  0x0092

Tag format gelombang 0x0240 dan 0x0241 identik dengan 0x0092 dan banyak aplikasi DVD memperlakukan tiga tag sebagai identik. Namun, untuk menghilangkan redundansi, driver dan aplikasi harus hanya mendukung tag 0x0092 (dan tidak mendukung tag 0x0240 dan 0x0241).

GUID format-subtipe yang sesuai dapat ditentukan dalam hal tag format gelombang dengan menggunakan makro DEFINE_WAVEFORMATEX_GUID dari file header Ksmedia.h sebagai berikut:

  #define KSDATAFORMAT_SUBTYPE_AC3_SPDIF    \
                      DEFINE_WAVEFORMATEX_GUID(WAVE_FORMAT_DOLBY_AC3_SPDIF)

Contoh kode berikut menunjukkan bagaimana driver miniport WaveCyclic atau WavePci dapat menentukan entri tabel KSDATARANGE_AUDIO untuk pin yang mendukung format AC-3-over-S/PDIF:

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
  }
};

Entri rentang data kedua dalam tabel sebelumnya diperlukan untuk mengaktifkan DirectSound untuk menangani format AC-3-over-S/PDIF non-PCM di Windows 2000 SP2 dan di Microsoft Windows 98 SE + hotfix.

Untuk setiap rentang data yang ditentukan driver miniport dengan KSDATAFORMAT_SPECIFIER_WAVEFORMATEX, driver port secara otomatis menambahkan rentang data kedua yang ditentukan dengan KSDATAFORMAT_SPECIFIER_DSOUND tetapi sebaliknya identik dengan yang pertama. (Anda dapat memverifikasi ini dengan menggunakan utilitas KsStudio untuk melihat daftar rentang data.) Di Windows 2000 dan Windows 98, driver port membuat versi KSDATAFORMAT_SPECIFIER_DSOUND rentang data hanya untuk format KSDATAFORMAT_SUBTYPE_PCM karena versi DirectSound sebelum DirectSound 8 hanya mendukung PCM. Batasan ini dihapus di Windows XP dan yang lebih baru dan di Windows Me. Namun, tidak dihapus di Windows 2000 SP2 atau dalam paket perbaikan panas untuk Windows 98 SE, dan untuk mendukung non-PCM pada DirectSound pada versi Windows ini, driver harus secara eksplisit mencantumkan dua rentang data untuk setiap format data non-PCM--satu dengan KSDATAFORMAT_SPECIFIER_WAVEFORMATEX, dan satu lagi dengan KSDATAFORMAT_SPECIFIER_DSOUND.

Seperti yang dijelaskan dalam Transmisi S/PDIF Pass-Through Aliran Non-PCM, dua rentang data AC-3-over-S/PDIF keduanya menggunakan parameter PCM berikut: dua saluran dan 16 bit per saluran.