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 パラメータを使用します。