Compartilhar via


Operação do minidriver USBCAMD2

Um minidriver de câmera USBCAMD2 geralmente funciona da seguinte maneira:

Por exemplo, para especificar outras funções de callback do minidriver de câmera com USBCAMD2, o minidriver de 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. USBCAMD2 então chama os callbacks do minidriver quando necessário.

Observação

A estrutura de USBCAMD_DEVICE_DATA tem suporte em USBCAMD2 apenas para fins de compatibilidade com versões anteriores.

O minidriver deve chamar USBCAMD_AdapterReceivePacket para enviar quaisquer SRBs que ele não manipula para USBCAMD2 para processar.

A biblioteca USBCAMD descreve as funções de retorno de chamada que o minidriver implementa, indicando se elas são opcionais ou obrigatórias.

A lista de procedimentos a seguir 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 os requisitos de processamento de vídeo ou imagens estáticas em formato bruto no modo núcleo do sistema operacional, como a ativação de eventos do dispositivo.
Minidriver de câmera Chame USBCAMD_AdapterReceivePacket.
USBCAMD2 Adquira descritores de dispositivo USB e configuração.
USBCAMD2 Chame a função de retorno de chamada CamConfigureEx do minidriver.
Minidriver de câmera Conclua a configuração. Escolha uma configuração alternativa e o tamanho máximo da transferência. Preencha a matriz de estruturas do tipo USBCAMD_Pipe_Config_Descriptor.
USBCAMD2 Analise a matriz de estruturas de USBCAMD_Pipe_Config_Descriptor .
USBCAMD2 Chame a função de callback CamInitialize do minidriver.
Minidriver de câmera Conclua a inicialização. Defina a energia do dispositivo e ative a configuração padrão na câmera.
USBCAMD2 Forneça o número de fluxos e o tamanho do descritor de fluxo para o driver de classe stream.sys .

Manipulador de SRB_GET_STREAM_INFO do Minidriver

Componente Ação
Minidriver de câmera Forneça a estrutura de informações de fluxo HW_STREAM_INFORMATION para o driver de classe stream.sys.
Minidriver de câmera Preencha o ponteiro para a matriz de conjuntos de propriedades do dispositivo na estrutura HW_STREAM_HEADER do driver de classe stream.sys .
Minidriver de câmera Chame USBCAMD_AdapterReceivePacket.
USBCAMD2 Preencha o número de pinos no cabeçalho do fluxo.
USBCAMD2 Exponha a tabela de eventos do dispositivo, se houver.
USBCAMD2 Corrija os valores de entrada na tabela de informações do fluxo. Configurar o nome da categoria (captura ou foto).
USBCAMD2 Preencha o ponteiro para a matriz de propriedades de fluxo.

Manipulador de SRB_INITIALIZATION_COMPLETE do Minidriver

Componente Ação
Minidriver de câmera Adquira GUID_USBCAMD_INTERFACE para USBCAMD2 usando IRP_MJ_PNP e IRP_MN_QUERY_INTERFACE.

Manipulador de SRB_GET_DEVICE_PROPERTY do Minidriver

Componente Ação
Minidriver de câmera Obtenha as propriedades que o minidriver da câmera manipula, como PROPSETID_VIDCAP_VIDEOPROCAMP, PROPSETID_VIDCAP_CAMERACONTROL e PROPSETID_VIDCAP_VIDEOCONTROL, bem como quaisquer conjuntos de propriedades personalizados.

Manipulador do SRB_SET_DEVICE_PROPERTY do Minidriver

Componente Ação
Minidriver de câmera Defina as propriedades que o minidriver da câmera manipula adquirindo os parâmetros de PROPSETID_VIDCAP_VIDEOPROCAMP, PROPSETID_VIDCAP_CAMERACONTROL e PROPSETID_VIDCAP_VIDEOCONTROL e quaisquer outros conjuntos de propriedades personalizados.

Manipulador de SRB_GET_DATA_INTERSECTION do Minidriver

Componente Ação
Minidriver de câmera Retornar uma estrutura KSDATAFORMAT de uma estrutura KSDATARANGE .
Minidriver de câmera 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.

Manipulador de SRB_OPEN_STREAM do Minidriver

Componente Ação
Minidriver de câmera Verifique o formato de vídeo.
Minidriver de câmera Chame USBCAMD_AdapterReceivePacket.
USBCAMD2 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 informar o USBCAMD2 sobre o tamanho máximo de quadro que a câmera pode produzir.
Minidriver de câmera Defina o dimensionamento de hardware na câmera. Defina os controles da 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 o fizer.
USBCAMD2 Chame a função de retorno de chamada do minidriver CamStartCaptureEx.
Minidriver de câmera Configure o hardware para o modo de captura.
USBCAMD2 Inicializar a transferência isocrona ou em massa.

Manipulador de SRB_CLOSE_STREAM do Minidriver

Componente Ação
Minidriver de câmera Chame USBCAMD_AdapterReceivePacket.
USBCAMD2 Cancelar IRPs pendentes enviados para USBCAMD2. Retornar quaisquer SRBs de dados pendentes ao driver da classe stream.sys.
USBCAMD2 Chame a função de retorno de chamada CamStopCaptureEx do minidriver.
Minidriver de câmera Envie um comando de stop-capture para a câmera.
USBCAMD2 Chame a função de retorno de chamada CamFreeBandwidthEx do minidriver para liberar largura de banda de barramento isocrono, se aplicável.
Minidriver de câmera Selecione uma configuração alternativa ociosa.
USBCAMD2 Recursos gratuitos associados a canais USB.

Manipulador de SRB_UNINITIALIZE_DEVICE do Minidriver

Componente Ação
Minidriver de câmera Chame USBCAMD_AdapterReceivePacket.
USBCAMD2 Se algum fluxo ainda estiver aberto, feche cada um deles chamando as funções de retorno de chamada CamStopCaptureEx e CamFreeBandwidthEx do minidriver para cada fluxo.
USBCAMD2 Execute a função de retorno de chamada CamUnInitialize do minidriver.
Minidriver de câmera Limpar e liberar recursos.

Manipulador de SRB_SURPRISE_REMOVAL do Minidriver

Componente Ação
Minidriver de câmera Chame USBCAMD_AdapterReceivePacket.
USBCAMD2 Cancele os SRBs de dados pendentes e retorne os SRBs com o status STATUS_CANCELLED.
USBCAMD2 Chame as funções de retorno de chamada CamStopCaptureEx e CamFreeBandwidthEx do minidriver em todos os fluxos abertos.
USBCAMD2 Retorne STATUS_CANCELLED em quaisquer SRBs de leitura/gravação que sejam processados após SRB_SURPRISE_REMOVAL.

Manipulador de SRB_SET_DATA_FORMAT do Minidriver

Componente Ação
Minidriver de câmera Verifique o novo formato de vídeo.
Minidriver de câmera Chame USBCAMD_SetVideoFormat.
USBCAMD2 Salve o novo formato com a extensão de fluxo associada.

Manipulador do SRB_CHANGE_POWER_STATE do Minidriver de Power ON para Power OFF

Componente Ação
Minidriver de câmera Chame USBCAMD_AdapterReceivePacket.
USBCAMD2 Pare o streaming no canal isócrono, se aplicável, ou cancele transferências pendentes em massa ou de interrupção.
USBCAMD2 Chame a função de retorno de chamada CamStopCaptureEx do minidriver.
Mini driver de câmera Enviar o comando para parar a captura ao hardware.

O manipulador SRB_CHANGE_POWER_STATE do Minidriver de Power OFF para Power ON

Componente Ação
Minidriver de câmera Chame USBCAMD_AdapterReceivePacket.
USBCAMD2 Reinicie o streaming no pipe isocrono, se aplicável, ou reenvie a transferência em massa ou interrompa a transferência para a classe USB.
Minidriver de câmera Restaure as configurações da câmera e o consumo de energia da câmera para níveis normais.
USBCAMD2 Chame a função de callback CamStopCaptureEx do minidriver.
USBCAMD2 Chame a função de retorno de chamada CamStartCaptureEx do minidriver.