Data Flow usar canalizaciones isócrónicas

USBCAMD2 comienza el streaming en la canalización isócrónica solicitando dos transferencias de 32 paquetes. Cada paquete tiene un tamaño máximo que corresponde al tamaño máximo en la configuración alternativa seleccionada.

Nota El streaming en la canalización isócrónica es independiente del streaming de Microsoft DirectShow.

Las solicitudes de transferencia isócrónicas de doble búfer se envían continuamente a USBCAMD2 y se detienen solo cuando se produce una de las dos condiciones siguientes:

  1. Se emite un estado de secuencia stop DirectShow (KSSTATE_STOP).

  2. El minidriver de cámara solicita a USBCAMD2 que detenga el streaming isócrono pasando la marca USBCAMD_STOP_STREAMING en el parámetro PipeStateFlags en una llamada a USBCAMD_SetIsoPipeState.

Mientras el streaming está en curso, USBCAMD2 y el minidriver de cámara repiten el siguiente proceso hasta que se detiene el streaming:

  1. USBCAMD2 llama a la función de devolución de llamada CamProcessUSBPacketEx del minidriver de la cámara (en IRQL = DISPATCH_LEVEL) para cada paquete que USBCAMD2 recibe del controlador de bus USB. El minidriver de cámara debe establecer las marcas de error adecuadas en caso de condiciones de error. El minidriver también debe establecer una nueva marca de fotograma de vídeo si se detecta el principio de un nuevo fotograma de vídeo mediante el parámetro FrameComplete de CamProcessUSBPacketEx.

  2. Una vez que el minidriver de la cámara ha determinado que un fotograma de vídeo está completo, USBCAMD2 llama a la función de devolución de llamada CamProcessRawVideoFrameEx de la cámara (desde el contexto de un subproceso de trabajo) para procesar el fotograma de vídeo si es necesario realizar una conversión o descompresión de espacio de color. USBCAMD2 devuelve un marco sin procesar completado al controlador de clase stream.sys que el minidriver de cámara en IRQL = PASSIVE_LEVEL. Si no hay datos de fotogramas insuficientes o se produjo un error durante la descompresión debido a datos incorrectos, por ejemplo, el parámetro BytesReturned a CamProcessRawVideoFrameEx debe establecerse en 0.