次の方法で共有


AC-3 データ範囲の指定

ヘッダー ファイル Mmreg.h は、値 0x0092 を AC-3-over-S/PDIF の波形フォーマットのタグとして定義します。

    #define WAVE_FORMAT_DOLBY_AC3_SPDIF  0x0092

波形フォーマットのタグ 0x0240 および 0x0241 は 0x0092 と同義であり、多くの DVD アプリケーションは 3 つのタグを同一のものとして扱います。 ただし、冗長性を排除するために、ドライバーとアプリケーションはタグ 0x0092 のみをサポートする必要があります (タグ 0x0240 および 0x0241 はサポートしない)。

対応するフォーマット サブタイプ GUID は、次のようにヘッダー ファイル Ksmedia.h の DEFINE_WAVEFORMATEX_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
  }
};

前の表の 2 番目のデータ範囲エントリは、DirectSound が Windows 2000 SP2 および Microsoft Windows 98 SE + hotfix で非 PCM AC-3-over-S/PDIF 形式を処理できるようにするために必要です。

ミニポート ドライバーが KSDATAFORMAT_SPECIFIER_WAVEFORMATEX で指定するデータ範囲ごとに、ポート ドライバーは KSDATAFORMAT_SPECIFIER_DSOUND で指定される 2 番目のデータ範囲を自動的に追加しますが、それ以外の点では最初のデータ範囲と同一です。 (これを確認するには、KsStudio ユーティリティを使用してデータ範囲のリストを表示します。)Windows 2000 および Windows 98 では、DirectSound 8 より前のバージョンの DirectSound は PCM のみをサポートしているため、ポート ドライバーは KSDATAFORMAT_SUBTYPE_PCM 形式に対してのみ KSDATAFORMAT_SPECIFIER_DSOUND バージョンのデータ範囲を作成します。 この制限は、Windows XP 以降および Windows Me では削除されます。 ただし、これは Windows 2000 SP2 または Windows 98 SE の修正プログラム パッケージでは削除されておらず、これらの Windows バージョンで DirectSound で非 PCM をサポートするには、ドライバーは非 PCM データ形式ごとに 2 つのデータ範囲を明示的にリストする必要があります。1 つは KSDATAFORMAT_SPECIFIER_WAVEFORMATEX を使用し、もう 1 つは KSDATAFORMAT_SPECIFIER_DSOUND を使用します。

非 PCM ストリームの S/PDIF パススルー送信で説明したように、2 つの AC-3-over-S/PDIF データ範囲は両方とも、2 つのチャネルとチャネルあたり 16 ビットの PCM パラメータを使用します。