次の方法で共有


ピン中心の処理

AVStream ミニドライバーを記述するときには、ピン中心の処理または フィルター中心の処理という 2 つの処理パラダイムのいずれかを使用するフィルターが提供されます。

ピン中心の処理とは、新しいフレームがピン キューに到着したときに、AVStream によってミニドライバーのピン プロセス ディスパッチ ルーチンが呼び出されることを意味します。

フィルター中心の処理とは、インスタンス化された各ピンで使用可能なデータ フレームがある場合に、AVStream がミニドライバーのフィルター プロセス ディスパッチ ルーチンを呼び出すということです。 これらの定義では既定の動作が指定されていることに注意してください。ミニドライバーは、KSPIN_DESCRIPTOR_EX 構造体にフラグを設定することで、既定の動作を変更できます。

一般に、ソフトウェア フィルターではフィルター中心の処理が使用され、ハードウェア フィルターではピン中心の処理が使用されます。 たとえば、データを変換またはレンダリングするハードウェアは、ピン中心のフィルターでデータをルーティングできます。 これらのロールが元に戻される場合はまれです。

ピン中心のフィルタを供給するために、ミニドライバーは各 KSPIN_DISPATCH 構造体の AVStrMiniPinProcess コールバック ルーチンへのポインタを提供します。KSFILTER_DISPATCH 構造体では処理ディスパッチを供給しません。

ミニドライバーが KSPIN_DESCRIPTOR_EX 構造体のフラグ設定を変更しない場合、AVStream は、次の 3 つの状況でベンダーが提供する AVStrMiniPinProcess コールバック ルーチンを呼び出します。

  • ピンは最小処理状態に移行します。 フレームはすでにキューに存在している必要があり、ピンは最小処理状態未満から少なくとも最小処理状態に移行している必要があります。

  • 新しいフレームが到着します。 ピンは、少なくとも最小の処理状態である必要があり、先頭のエッジまたは前にフレームが存在しない必要があります。

  • ミニドライバーは、KsPinAttemptProcessing を明示的に呼び出します。

既定では、一時停止は最小処理状態です。

さらに、AVStream は、ピンの AND ゲートが閉じている場合、ピン プロセス ディスパッチを呼び出しません。 たとえば、KSGATEXxx ルーチンを使用してピンの AND ゲートにオフ入力を追加する場合、プロセス ディスパッチは呼び出されません。

AVStream が AVStrMiniPinProcess を呼び出すと、使用可能なデータを持つ pin オブジェクトへのポインターが提供されます。 ミニドライバーの処理ディスパッチは、KsPinGetLeadingEdgeStreamPointer を呼び出すことで、先頭のエッジ ポインターを取得できます。 ミニドライバーは、ストリーム ポインター API を使用してストリーム データを操作します。

ピン中心の処理を使用するミニドライバーは、関連する KSPIN_DESCRIPTOR_EX 構造体にフラグを設定することで、AVStream が AVStrMiniPinProcess ディスパッチを呼び出すタイミングを変更できます。 KSPIN_DESCRIPTOR_EX リファレンス ページにあるフラグの説明は、特にピン中心のフィルターを実装しているベンダーに関連します。

ミニドライバーが処理ミューテックスを介して KsPinAcquireProcessingMutexを保持している場合、処理の試行が失敗する可能性があります。 ミニドライバーが KSGATE* 呼び出しを使用してゲートを直接操作する場合にも問題が発生する可能性があります。

Windows Driver Kit サンプルの AVStream Simulated Hardware Sample Driver (AVSHwS) は、シミュレートされたハードウェアのピン中心のキャプチャ ドライバーです。 Avshws サンプルは、AVStream を介して DMA を実装する方法を示しています。