Compartilhar via


Operação de minidriver USBCAMD2

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

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.
Minidriver de câmera Chame USBCAMD_AdapterReceivePacket.
USBCAMD2 Adquirir descritores de configuração e dispositivo USB.
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 USBCAMD_Pipe_Config_Descriptor .
USBCAMD2 Analise a matriz de estruturas USBCAMD_Pipe_Config_Descriptor .
USBCAMD2 Chame a função de retorno de chamada 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 em stream.sys estrutura de HW_STREAM_HEADER do driver de classe.
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 de fluxo. Defina o nome da categoria (capturar ou ainda).
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 outros conjuntos de propriedades personalizados.

Manipulador de 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 do 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 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.
Minidriver de câmera Defina 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 para o driver de classe stream.sys .
USBCAMD2 Chame a função de retorno de chamada CamStopCaptureEx do minidriver.
Minidriver de câmera Envie um comando 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 pipes 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-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.
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 as SRBs com 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 desçam 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.

O SRB_CHANGE_POWER_STATE do Minidriver do power on para o manipulador do Power OFF

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

O SRB_CHANGE_POWER_STATE do Minidriver do power off para o manipulador do Power ON

Componente Ação
Minidriver de câmera Chame USBCAMD_AdapterReceivePacket.
USBCAMD2 Reinicie o streaming no pipe isócrono, 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 retorno de chamada CamStopCaptureEx do minidriver.
USBCAMD2 Chame a função de retorno de chamada CamStartCaptureEx do minidriver.