Compartilhar via


Fluxo de Dados usando pipes isócronos

O USBCAMD2 começa a transmitir no pipe isócrono solicitando duas transferências de 32 pacotes. Cada pacote tem um tamanho máximo que corresponde ao tamanho máximo na configuração alternativa selecionada.

Nota O streaming no pipe isócrono é independente do streaming do Microsoft DirectShow.

As solicitações de transferência isócronas de buffer duplo são enviadas continuamente para USBCAMD2 e são interrompidas somente quando ocorre uma das duas seguintes condições:

  1. Um estado de transmissão stop DirectShow é emitido (KSSTATE_STOP).

  2. O minidriver da câmera solicita que o USBCAMD2 pare o streaming isócrono passando o sinalizador USBCAMD_STOP_STREAMING no parâmetro PipeStateFlags em uma chamada para USBCAMD_SetIsoPipeState.

Enquanto o streaming está em andamento, o USBCAMD2 e o minidriver da câmera repetem o seguinte processo até que o streaming pare:

  1. O USBCAMD2 chama a função de retorno de chamada CamProcessUSBPacketEx do minidriver da câmera (em IRQL = DISPATCH_LEVEL) para cada pacote que o USBCAMD2 recebe do driver de barramento USB. O minidriver de câmera deve definir os sinalizadores de erro apropriados no caso de condições de erro. O minidriver também deverá definir um novo sinalizador de quadro de vídeo se o início de um novo quadro de vídeo for detectado usando o parâmetro FrameComplete de CamProcessUSBPacketEx.

  2. Depois que o minidriver da câmera determinar que um quadro de vídeo foi concluído, o USBCAMD2 chamará a função de retorno de chamada CamProcessRawVideoFrameEx do minidriver da câmera (do contexto de um thread de trabalho) para processar o quadro de vídeo se houver a necessidade de executar uma conversão ou descompactação de espaço de cor. USBCAMD2 retorna um quadro bruto concluído para o driver de classe stream.sys a ser processado pelo minidriver da câmera em IRQL = PASSIVE_LEVEL. Se não houver dados de quadro insuficientes ou ocorrer um erro durante a descompactação devido a dados inválidos, por exemplo, o parâmetro BytesReturned para CamProcessRawVideoFrameEx deverá ser definido como 0.