Um minidriver de câmera USBCAMD2 geralmente opera da seguinte maneira:
O minidriver da câmera chama USBCAMD_DriverEntry de sua rotina DriverEntry . Quando o minidriver chama USBCAMD_DriverEntry, ele passa para USBCAMD2 a função de retorno de chamada AdapterReceivePacket do minidriver. EM seguida, o USBCAMD2 registra o minidriver com o driver de classe stream.sys .
O minidriver de câmera pode receber vários SRBs (blocos de solicitação de fluxo) em sua função de retorno de chamada AdapterReceivePacket para manipular, incluindo:
O minidriver da câmera determina como ele deve processar cada SRB. O minidriver pode chamar rotinas na biblioteca de minidriver USBCAMD2 para ajudar no processamento de SRBs. Normalmente, essas rotinas começam com o prefixo USBCAMD_ .
Por exemplo, para especificar outras funções de retorno de chamada do minidriver da câmera com USBCAMD2, o minidriver da câmera especifica seus pontos de entrada em uma estrutura USBCAMD_DEVICE_DATA2 . Em seguida, o minidriver chama USBCAMD_InitializeNewInterface para passar a estrutura de USBCAMD_DEVICE_DATA2 inicializada para USBCAMD2. O USBCAMD2 chama as funções de retorno de chamada do minidriver quando necessário.
Observação
A estrutura USBCAMD_DEVICE_DATA tem suporte no USBCAMD2 apenas para fins de compatibilidade com versões anteriores.
O minidriver deve chamar USBCAMD_AdapterReceivePacket para enviar quaisquer SRBs que não manipula para o USBCAMD2 para processar.
As funções de retorno de chamada da biblioteca USBCAMD descrevem as funções de retorno de chamada que o minidriver implementa e se elas são opcionais ou necessárias.
A seguinte lista de procedimentos ilustra o fluxo geral de processamento para SRBs enviados ao minidriver da câmera:
Manipulador de SRB_INITIALIZE_DEVICE do Minidriver
Componente
Ação
Minidriver de câmera
Inicialize o USBCAMD2 chamando USBCAMD_InitializeNewInterface, indicando requisitos de processamento de vídeo ou ainda brutos no modo kernel, como habilitar eventos de dispositivo.
Verifique se a taxa de quadros solicitada (VideoInfoHeader.AvgTimePerFrame) está dentro dos limites superior e inferior para o formato de vídeo solicitado. Se exceder os limites, o minidriver deverá corrigir os seguintes valores em pSrb-CommandData.IntersectInfo-Datarange>>: VideoInfoHeader.AvgTimePerFrame, VideoInfoHeader.dwBitRate.
Salve o formato de vídeo aceito pelo minidriver da câmera.
USBCAMD2
Chame a função de retorno de chamada CamAllocateBandwidthEx do minidriver para alocar largura de banda com base em dados de formato de vídeo e obter o tamanho máximo do buffer para o formato de vídeo.
Minidriver de câmera
Calcule o tamanho máximo do pacote do canal isócrono que satisfaça a taxa de quadros solicitada e o tamanho das janelas de saída.
Minidriver de câmera
Escolha a configuração alternativa mais próxima chamando USBCAMD_SelectAlternateInterface. O minidriver deve fornecer USBCAMD2 com o tamanho máximo de quadro possível que pode ser produzido pela câmera.
Minidriver de câmera
Defina o dimensionamento de hardware na câmera. Defina os controles de câmera para os valores armazenados no registro ou para a configuração padrão, se for a primeira vez.
Minidriver de câmera
Verifique se a taxa de quadros (VideoInfoHeader.AvgTimePerFrame) está dentro dos limites do formato de vídeo e corrija-a se não estiver.
USBCAMD2
Chame a função de retorno de chamada CamStartCaptureEx do minidriver.
Se algum fluxo ainda estiver aberto, feche-os chamando as funções de retorno de chamada CamStopCaptureEx e CamFreeBandwidthEx do minidriver para cada fluxo.
USBCAMD2
Chame a função de retorno de chamada CamUnInitialize do minidriver.