Share via


ピン ファクトリ

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

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

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

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

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

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

  • フレンドリ名

  • インスタンス機能

  • データ形式の機能

構造体の Category メンバーと Name メンバーは、ピン ファクトリのピン カテゴリとフレンドリ名を指定します。 フィルター内の各ピンファクトリに対して、ミニポートドライバは、ピンファクトリを一意に識別する CategoryName GUID の組み合わせを指定します。 2つ以上のピンファクトリが同じ Category値を共有する場合、各ピンファクトリは他と区別するためのName値を持ちます。 1つのピンファクトリのみが特定のCategory値を持つ場合、ピンファクトリを識別するにはその値で十分であり、そのピンファクトリのName値は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はあるフィルター同士をピンで繋ぎます。 あるフィルターのソース ピンは、別のフィルターのシンク ピンに接続できます。 ソース ピンからのデータと IRP は、この接続を介してシンク ピンに流れ込みます。 接続を行うために、グラフ・ビルダー(通常はSysAudio)は、まずKsCreatePinを呼び出してソース・ピンを作成し、次にKsCreatePinを再度呼び出してシンクピンを作成します。 ただし、2 番目の呼び出しでは、クライアントは、新しいシンク ピンが最初の呼び出しで作成されたソース ピンに接続されるように指定します。