Datenfluss mit isochronen Rohren

USBCAMD2 beginnt mit dem Streaming auf der isochronen Pipe, indem zwei Übertragungen von 32 Paketen angefordert werden. Jedes Paket hat eine maximale Größe, die der maximalen Größe in der ausgewählten alternativen Einstellung entspricht.

Hinweis Das Streaming auf der isochronen Pipe ist unabhängig vom Microsoft DirectShow-Streaming.

Isochrone Übertragungsanforderungen mit Doppeltem Puffer werden kontinuierlich an USBCAMD2 übermittelt und nur beendet, wenn eine der folgenden beiden Bedingungen auftritt:

  1. Ein DirectShow-Streamstatus beenden wird ausgegeben (KSSTATE_STOP).

  2. Der Kamera-Minidriver fordert USBCAMD2 an, das isochrone Streaming zu beenden, indem das flag USBCAMD_STOP_STREAMING im Parameter PipeStateFlags in einem Aufruf von USBCAMD_SetIsoPipeState übergeben wird.

Während das Streaming ausgeführt wird, wiederholen USBCAMD2 und der Kamera-Minidriver den folgenden Prozess, bis das Streaming beendet wird:

  1. USBCAMD2 ruft die CamProcessUSBPacketEx-Rückruffunktion des Kamera-Minitreibers (bei IRQL = DISPATCH_LEVEL) für jedes Paket auf, das USBCAMD2 vom USB-Bustreiber empfängt. Der Kamera-Minidriver muss bei Fehlerbedingungen die entsprechenden Fehlerflags festlegen. Der Minidriver muss auch ein neues Videoframeflag festlegen, wenn der Anfang eines neuen Videoframes mithilfe des FrameComplete-Parameters von CamProcessUSBPacketEx erkannt wird.

  2. Nachdem der Kamera-Minidriver festgestellt hat, dass ein Videoframe abgeschlossen ist, ruft USBCAMD2 die Rückruffunktion CamProcessRawVideoFrameEx des Kamera-Minitreibers (aus dem Kontext eines Arbeitsthreads) auf, um den Videoframe zu verarbeiten, wenn eine Farbraumkonvertierung oder Dekomprimierung erforderlich ist. USBCAMD2 gibt einen abgeschlossenen rohen Frame an den stream.sys Klassentreiber zurück, der vom Kamera-Minitreiber am IRQL = PASSIVE_LEVEL verarbeitet werden soll. Wenn bei der Dekomprimierung beispielsweise aufgrund fehlerhafter Daten unzureichende Framedaten vorhanden sind oder ein Fehler aufgetreten ist, muss der BytesReturned-Parameter auf CamProcessRawVideoFrameEx auf 0 festgelegt werden.