次の方法で共有


ファクトリをピン留めする

オーディオ フィルターのピン ファクトリは、フィルターがインスタンス化できるすべてのピンを記述します。 前述のように、オーディオ ミニポート ドライバーは、 PCPIN_DESCRIPTOR 構造体の配列にピン情報を格納します。 各構造体はピン ファクトリを指定し、ピン ファクトリは配列内のインデックスによって識別されます。 このインデックスは、多くの場合、 ピン ID と呼ばれます。

PCPIN_DESCRIPTOR構造体には、オートメーション テーブルと KSPIN_DESCRIPTOR 構造体が含まれています。

KSPIN_DESCRIPTOR構造体には、ピン ファクトリ内のピンに関する次の情報が含まれています。

  • データ フローのフィルター相対方向

  • 通信フローのフィルター相対方向 (現在のすべての Windows バージョンでは、KS フィルターは通信に IRP を使用します)。

  • カテゴリをピン留めする

  • フレンドリーな名前

  • インスタンスの機能

  • データ形式の機能

構造体の Category メンバーと Name メンバーは、ピン ファクトリのピン カテゴリとフレンドリ名を指定します。 フィルター内のピン ファクトリごとに、ミニポート ドライバーは、ピン ファクトリを一意に識別する カテゴリ GUID と 名前 GUID の組み合わせを指定します。 2 つ以上のピン ファクトリが同じ カテゴリ 値を共有している場合、各ピン ファクトリには、他のピン ファクトリと区別する 名前 の値があります。 特定の カテゴリ 値を持つピン ファクトリが 1 つだけの場合、その値はピン ファクトリを識別するのに十分であり、そのピン ファクトリの 名前 の値を NULL に設定できます。 コーディング例については、「 フィルター トポロジの公開」を参照してください。 カテゴリのピン留めについては、「 Pin Category プロパティ」を参照してください。

ピン ファクトリは、拡張 KSDATARANGE 構造体の配列としてサポートされるデータ形式の範囲を指定します。

  • 入力ストリームまたは出力ストリームのウェーブまたは DirectSound データ形式の範囲をサポートするピン ファクトリは、 KSDATARANGE_AUDIO 構造体の配列を指定します。

  • 入力ストリームまたは出力ストリームの MIDI または DirectMusic データ形式の範囲をサポートするピン ファクトリは、 KSDATARANGE_MUSIC 構造の配列を指定します。

KSDATARANGE_AUDIOとKSDATARANGE_MUSICは、KSDATARANGE の拡張バージョンです。 両方の種類のデータ範囲の例については、「 オーディオ データ形式とデータ範囲」を参照してください。

あるフィルターのシンク ピンを別のフィルターのソース ピンに接続する前に、グラフ ビルダー ( SysAudio システム ドライバーなど) で互換性のある形式のデータ範囲を検索できます。 通常、グラフ ビルダーはフィルターの データ交差ハンドラーを呼び出します。これにより、フィルター自体は互換性のある形式を選択できます。

フィルターは複数のピン ファクトリを持つ場合があり、ピン ファクトリは複数のピン インスタンスをサポートできます。

  • フィルターに複数のピン ファクトリを配置すると、フィルターを通過するさまざまな種類のデータに対して個別のデータ パスを区別するのに役立ちます。 たとえば、1 つのピン ファクトリが PCM データ ストリームをサポートし、別のピン ファクトリが AC-3 ストリームをサポートしている場合があります。

  • 1 つのフィルターで、ストリームのレンダリングとキャプチャを同時にサポートできます。 レンダリング パスとキャプチャ パスには、フィルター ファクトリの個別のセットがあります。

  • シンク ピン ファクトリに複数のピン インスタンスを配置することは、多くの場合、混合を意味します。その場合、フィルターには SUM ノード (KSNODETYPE_SUM) が含まれます

フィルターと同様に、ピンはカーネル オブジェクトであり、カーネル ハンドルによって識別されます。 ピン インスタンスのハンドルは、 KsCreatePin を呼び出すことによって作成されます。 カーネル オブジェクトとして、IRP のターゲットとしてピンを指定できます。 ドライバーのクライアントは、ピンに IOCTL 要求を送信するときに、ピン ハンドルを指定します。

オーディオ フィルター グラフを構築する場合、SysAudio はピンを接続して 1 つのフィルターを別のフィルターにリンクします。 あるフィルターのソース ピンは、別のフィルターのシンク ピンに接続できます。 ソース ピンからのデータと IRP は、この接続を介してシンク ピンに流れ込みます。 接続を確立するために、グラフ ビルダー (通常は SysAudio) は、最初に KsCreatePin を呼び出してソース ピンを作成し、次に KsCreatePin をもう一度呼び出してシンク ピンを作成します。 ただし、2 番目の呼び出しでは、クライアントは、新しいシンク ピンが最初の呼び出しで作成されたソース ピンに接続されるように指定します。