ハードウェア用 AVStream ミニドライバーの作成

ベンダーが提供する AVStrMiniDeviceStart では、ハードウェアをサポートする AVStream ミニドライバーは、最初にリソース一覧を解析してから、IoConnectInterrupt を呼び出して割り込みサービス ルーチン (ISR) を登録する必要があります。

ドライバーがダイレクト メモリ アクセス (DMA) をサポートしている場合は、追加の手順が必要です。 ドライバーが DMA を実装している場合は、AVStream DMA サービスを参照してください。

デバイスを使用して複数のアプリケーションでフィルター グラフを同時に作成する場合は、グラフ間の干渉を防ぐために注意する必要があります。 具体的には、デバイスを使用してアプリケーションでグラフを構築する場合、デバイスを無停止状態で使用しているアプリケーションに干渉してはなりません。

グラフがKSSTATE_ACQUIREに移行した後にマイクロコードを読み込むことで、干渉を回避できます。 これにより、別のグラフが実行中に新しいグラフがKSSTATE_ACQUIREに移行することがないため、現在実行中のグラフが保護されます。 ピンの状態変更の通知を受け取るために、KSPIN_DISPATCH構造体に AVStrMiniPinSetDeviceState コールバック ルーチンを指定します。

ただし、グラフの起動時間を最小限に抑えるために、グラフがKSSTATE_ACQUIREに達する前にマイクロコードを読み込むことができます。 この場合は、起動時に低優先度のバックグラウンド スレッドでマイクロコードを読み込むことを検討してください。 このソリューションは、他のアプリケーションに干渉せず、グラフの起動時間を短縮します。非同期で実行しても起動時間を長くすることはありません。

ただし、起動後は、グラフがKSSTATE_ACQUIREに達するまで、マイクロコードを再読み込みしたり、ハードウェア レジスタを操作したりしないでください。

新しいグラフの接続が、実行中のグラフにどのように干渉するかを見るには、エンコードとデコードをサポートするビデオ キャプチャ デバイスを検討してください。ただし、これらのタスクは一度に1つしか実行できません。 ミニドライバーは、エンコード フィルターとデコード フィルターを公開します。

アプリケーションは、エンコード フィルターを含むフィルター グラフを作成します。 ミニドライバーは、ピン接続時にエンコード用のマイクロコードを読み込みます。 フィルター グラフが起動し、ハードウェアがエンコードを開始します。

ハードウェアがエンコードされている間、別のアプリケーションがフィルター グラフにデコード フィルターを配置します。 デコード ピンが接続されると、ピンの状態がKSSTATE_ACQUIREに変わる前に、ミニドライバーはデコードのためにハードウェアの構成を試みます。 この再構成は、現在アクティブなエンコード グラフに干渉し、ドライバーが不安定になる可能性があります。