等時性パイプを使用したデータ フロー

USBCAMD2は、32 パケットの 2 つの転送を要求することで、等時性パイプでのストリーミングを開始します。 各パケットには、選択した代替設定の最大サイズに対応する最大サイズがあります。

手記 等時性パイプでのストリーミングは、Microsoft DirectShow ストリーミングとは無関係です。

二重バッファー等時性転送要求は、USBCAMD2に継続的に送信され、次の 2 つの条件のいずれかが発生した場合にのみ停止します。

  1. DirectShow ストリームの停止状態が発行されます (KSSTATE_STOP)。

  2. カメラ ミニドライバーは、USBCAMD_SetIsoPipeStateの呼び出しで PipeStateFlags パラメーターにUSBCAMD_STOP_STREAMING フラグを渡すことによって、等時性ストリーミングを停止する USBCAMD2を要求します。

ストリーミングの進行中、USBCAMD2とカメラ ミニドライバーは、ストリーミングが停止するまで次のプロセスを繰り返します。

  1. USBCAMD2は、USBバスドライバーから受信した各パケットごとに、カメラミニドライバーのCamProcessUSBPacketExコールバック関数 (IRQL = DISPATCH_LEVEL) を呼び出します。 カメラ ミニドライバーは、エラー状態の場合に適切なエラー フラグを設定する必要があります。 また、CamProcessUSBPacketExFrameComplete パラメーターを使用して新しいビデオ フレームの先頭が検出された場合、ミニドライバーは新しいビデオ フレーム フラグを設定する必要があります。

  2. カメラ ミニドライバーがビデオ フレームが完了したと判断した後、USBCAMD2はカメラ ミニドライバーの CamProcessRawVideoFrameEx コールバック関数を (ワーカー スレッドのコンテキストから) 呼び出して、色空間変換または展開を実行する必要がある場合にビデオ フレームを処理します。 USBCAMD2は、IRQL = PASSIVE_LEVEL でカメラ ミニドライバーによって処理される stream.sys クラス ドライバーに完成した未加工フレームを返します。 フレーム データが不十分であったり、不適切なデータが原因で圧縮解除中にエラーが発生した場合など、CamProcessRawVideoFrameEx対する BytesReturned パラメーターを 0 に設定する必要があります。