等時性パイプを使用したデータ フロー
USBCAMD2 は、32 パケットを 2 回転送するよう要求することで、アイソクロナス パイプでのストリーミングを開始します。 各パケットの最大サイズは、選択した代替設定の最大サイズに対応します。
注: アイソクロナス パイプでのストリーミングは、Microsoft DirectShow ストリーミングとは独立しています。
二重バッファー アイソクロナス転送要求は、USBCAMD2 に継続的に送信され、次の 2 つの条件のいずれかが発生したときのみ停止します。
DirectShow ストリームの停止状態が発行されます (KSSTATE_STOP)。
カメラ ミニドライバーは、USBCAMD_SetIsoPipeStateへの呼び出しで PipeStateFlags パラメーターに USBCAMD_STOP_STREAMING フラッグを渡すことで、USBCAMD2 にアイソクロナス ストリーミングを停止するよう要求します
ストリーミングの進行中、USBCAMD2 とカメラ ミニドライバーは、ストリーミングが停止するまで次のプロセスを繰り返します。
USBCAMD2 は、USB バス ドライバーから USBCAMD2 が受信するすべてのパケットに対して、カメラ ミニドライバーの CamProcessUSBPacketEx コールバック関数 (IRQL = DISPATCH_LEVEL) を呼び出します。 カメラ ミニドライバーは、エラー状態の場合に適切なエラー フラッグを設定する必要があります。 また、ミニドライバーは、CamProcessUSBPacketExのFrameCompleteパラメーターを使用して新しいビデオ フレームの先頭が検出された場合、新しいビデオ フレーム フラッグを設定する必要があります。
カメラ ミニドライバーがビデオ フレームが完了したと判断した後、USBCAMD2 はカメラ ミニドライバーの CamProcessRawVideoFrameEx コールバック関数を (ワーカー スレッドのコンテキストから) 呼び出して、色空間変換または展開を実行する必要がある場合にビデオ フレームを処理します。 USBCAMD2 は、IRQL = PASSIVE_LEVEL でカメラミニドライバによって処理されるために、stream.sysクラス ドライバーに完成した未加工フレームを返します。 フレーム データが不十分であったり、不正データが原因で展開中にエラーが発生した場合など、CamProcessRawVideoFrameExのBytesReturnedパラメーターを 0 に設定する必要があります。