ピン データ範囲の指定
デバイス内のデータ パスと制御ノードを表すトポロジを定義したら、次のステップは、構成可能な各ピンのデータ範囲を定義することです。 構成可能なピンは、ソフトウェア制御の下で作成、構成し、Wave または MIDI ストリームに接続できます。 対照的に、物理接続またはブリッジ ピンは暗黙的に存在し、ソフトウェア制御下で作成または構成することはできません。
Wave または MIDI ストリームのシンクまたはソースとして機能する構成可能なピンを接続する前に、ストリームのデータ形式を処理するようにピンを構成する必要があります。 通常、ピンはいくつかのストリーム形式の 1 つを受け入れるように構成できます。 たとえば、PCM ウェーブ出力ピンは、次の範囲の PCM ストリーム パラメーターを受け入れることができます。
サンプルレート 11.025 kHz、22.05 kHz、44.1 kHz、および 48 kHz
8、16、24、32 ビットのサンプル サイズ
1 ~ 8 の任意の数のチャンネル
ミニポート ドライバーは、構成可能なピンの種類ごとに、ピンが処理できるさまざまなストリーム データ形式を記述します。 これらのパラメーター範囲は、次のコード例に示すように、データ範囲記述子の配列として指定できます。
static KSDATARANGE_AUDIO PinDataRangesPcm[] =
{
{
{
sizeof(KSDATARANGE_AUDIO),
0,
0,
0,
STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO),
STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM),
STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX)
},
8, // Maximum number of channels
8, // Minimum number of bits-per-sample
32, // Maximum number of bits-per-channel
11025, // Minimum rate
48000 // Maximum rate
}
};
前の例の配列には、KSDATARANGE_AUDIO 型の単一のデータ範囲記述子が含まれていることに注意してくださいPinDataRangesPcm
。 より一般的には、データ範囲配列には任意の数の記述子を含めることができます。 たとえば、非 PCM 波形出力ピンは、AC-3-over-S/PDIF フォーマットと WMA Pro-over-S/PDIF フォーマットの両方をサポートする場合があります。 これら 2 つの形式はそれぞれ、個別のデータ範囲記述子によって指定されます。 したがって、ピンのデータ範囲配列には少なくとも 2 つの KSDATARANGE_AUDIO 構造体が含まれます。
DirectMusic または Windows マルチメディアの midiInXxx および midiOutXxx 関数を使用するアプリケーションからの音楽ストリーム形式をサポートする構成可能なピンは、KSDATARANGE_MUSIC タイプのデータ範囲記述子を使用します。
ポート ドライバーはミニポート ドライバーからデータ範囲情報を取得し、可能な限りこの情報を使用して、各ピンがサポートできるデータ形式に関する情報の要求を処理します。 単純な PCM データ範囲を持つピンの場合、ポート ドライバーはそのピンの交差リクエストを処理できます。 交差リクエストでは、クライアントはストリームの可能なデータ形式を表すデータ範囲のセットを提供します。 可能であれば、ポート ドライバーの交差ハンドラーは、ピンのデータ範囲内にも収まる、リクエスト内のデータ範囲から特定のデータ形式を選択します。 この形式は、2 セットのデータ範囲の共通部分を表します。 したがって、クライアントとピンの両方がこの形式のストリームを処理できます。 より複雑なデータ範囲の場合、ミニポート ドライバーは独自の交差ハンドラーを提供でき、ポート ドライバーはそれを独自の既定のハンドラーの代わりに使用します。 ミニポート ドライバーの交差ハンドラーでは、データ範囲の配列としてポート ドライバーに表現するのが難しい可能性があるあらゆる形式要件を考慮できます。 詳細情報は、データ交差ハンドラーと複数のチャネルのオーディオ データと WAVE ファイルを参照してください。