Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Um minidriver de câmera USBCAMD2 geralmente funciona 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. 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 processar os seguintes itens:
O minidriver da câmera determina como 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 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. |