次の方法で共有


ピン中心の処理

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 を使用して ストリーム データを操作します。

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

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

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