Compartir a través de


Funcionamiento del minidriver USBCAMD2

Normalmente, un minidriver de cámara USBCAMD2 funciona de la siguiente manera:

Por ejemplo, para especificar las demás funciones de devolución de llamada del minicontrolador de cámara con USBCAMD2, el minicontrolador de cámara especifica sus puntos de entrada en una estructura USBCAMD_DEVICE_DATA2. A continuación, el minidriver llama a USBCAMD_InitializeNewInterface para pasar la estructura inicializada de USBCAMD_DEVICE_DATA2 a USBCAMD2. USBCAMD2 llama a continuación a las funciones de devolución de llamada del minidriver cuando es necesario.

Nota:

La estructura USBCAMD_DEVICE_DATA solo se admite en USBCAMD2 con fines de compatibilidad con versiones anteriores.

El minidriver debe llamar a USBCAMD_AdapterReceivePacket para enviar todos los SRB que no gestione para que USBCAMD2 los procese.

Las funciones de devolución de llamada de la biblioteca USBCAMD describen las funciones de devolución de llamada que implementa el minidriver y si son opcionales o necesarias.

En la siguiente lista de procedimientos se muestra el flujo general de procesamiento de los SRB enviados al minidriver de cámara:

Controlador de SRB_INITIALIZE_DEVICE de minidriver

Componente Acción
Minidriver de cámara Inicialice USBCAMD2 llamando a USBCAMD_InitializeNewInterface, lo que indica los requisitos de procesamiento de vídeo o todavía sin procesar en modo kernel, como habilitar eventos de dispositivo.
Minidriver de cámara Llame a USBCAMD_AdapterReceivePacket.
USBCAMD2 Adquiera descriptores de dispositivo USB y de configuración.
USBCAMD2 Llame a la función de devolución de llamada CamConfigureEx del minidriver.
Minidriver de cámara Complete la configuración. Elija una configuración alternativa y el tamaño máximo de transferencia. Rellene la matriz de estructuras de USBCAMD_Pipe_Config_Descriptor .
USBCAMD2 Analice la matriz de estructuras de USBCAMD_Pipe_Config_Descriptor .
USBCAMD2 Llame a la función de callback CamInitialize del minidriver.
Minidriver de cámara Complete la inicialización. Establezca la alimentación del dispositivo y active la configuración predeterminada en la cámara.
USBCAMD2 Proporcione el número de secuencias y el tamaño del descriptor de flujo al controlador de clase stream.sys .

Controlador de SRB_GET_STREAM_INFO de Minidriver

Componente Acción
Minidriver de cámara Proporcione la estructura de información de flujo HW_STREAM_INFORMATION al controlador de clase stream.sys .
Minidriver de cámara Rellene el puntero a la matriz de conjuntos de propiedades de dispositivo en la estructura stream.sysHW_STREAM_HEADERdel controlador de clase.
Minidriver de cámara Llame a USBCAMD_AdapterReceivePacket.
USBCAMD2 Indique la cantidad de pines en el encabezado de la transmisión.
USBCAMD2 Exponga la tabla de eventos del dispositivo, si existe.
USBCAMD2 Corrija los valores de entrada en la tabla de información del flujo. Asigne un nombre a la categoría (captura o fija).
USBCAMD2 Rellene el puntero a la matriz de propiedades de secuencia.

Controlador de SRB_INITIALIZATION_COMPLETE de minidriver

Componente Acción
Minidriver de cámara Adquiera GUID_USBCAMD_INTERFACE para USBCAMD2 mediante IRP_MJ_PNP e IRP_MN_QUERY_INTERFACE.

Controlador de SRB_GET_DEVICE_PROPERTY de Minidriver

Componente Acción
Minidriver de cámara Obtenga las propiedades que controla el minidriver de cámara, como PROPSETID_VIDCAP_VIDEOPROCAMP, PROPSETID_VIDCAP_CAMERACONTROL y PROPSETID_VIDCAP_VIDEOCONTROL, así como cualquier otro conjunto de propiedades personalizados.

Controlador de SRB_SET_DEVICE_PROPERTY de Minidriver

Componente Acción
Minidriver de cámara Establezca las propiedades que controla el minidriver de cámara mediante la adquisición de los parámetros de PROPSETID_VIDCAP_VIDEOPROCAMP, PROPSETID_VIDCAP_CAMERACONTROL y PROPSETID_VIDCAP_VIDEOCONTROL, y cualquier otro conjunto de propiedades personalizado.

Controlador de SRB_GET_DATA_INTERSECTION de minidriver

Componente Acción
Minidriver de cámara Devuelve una estructura KSDATAFORMAT de una estructura KSDATARANGE .
Minidriver de cámara Compruebe que la velocidad de fotogramas solicitada (VideoInfoHeader.AvgTimePerFrame) está dentro de los límites superior e inferior para el formato de vídeo solicitado. Si supera los límites, el minidriver debe corregir los siguientes valores en pSrb-CommandData.IntersectInfo-Datarange>>: VideoInfoHeader.AvgTimePerFrame, VideoInfoHeader.dwBitRate.

Controlador de SRB_OPEN_STREAM de minidriver

Componente Acción
Minidriver de cámara Compruebe el formato de vídeo.
Minidriver de cámara Llame a USBCAMD_AdapterReceivePacket.
USBCAMD2 Almacene el formato de vídeo aceptado por el minidriver de la cámara.
USBCAMD2 Llame a la función de devolución de llamada del minidriver CamAllocateBandwidthEx para asignar ancho de banda en función de los datos de formato de vídeo y obtener el tamaño máximo del búfer para el formato de vídeo.
Minidriver de cámara Calcule el tamaño máximo del paquete del canal isocrónico que satisface la velocidad de fotogramas solicitada y el tamaño de ventanas de salida.
Minidriver de cámara Elija la configuración alternativa más cercana llamando a la función USBCAMD_SelectAlternateInterface. El minidriver debe proporcionar a USBCAMD2 el tamaño máximo posible de fotogramas que puede producir la cámara.
Minidriver de cámara Establezca la escala de hardware en la cámara. Establezca los controles de la cámara en los valores almacenados en el Registro o en la configuración predeterminada si es la primera vez.
Minidriver de cámara Asegúrese de que la velocidad de fotogramas (VideoInfoHeader.AvgTimePerFrame) se encuentra dentro de los límites del formato de vídeo y corríjala si no lo hace.
USBCAMD2 Llame a la función de devolución de llamada CamStartCaptureEx del minidriver.
Minidriver de cámara Establezca el hardware en modo de captura.
USBCAMD2 Inicialice la transferencia isócrónica o masiva.

Controlador de SRB_CLOSE_STREAM de minidriver

Componente Acción
Minidriver de cámara Llame USBCAMD_AdapterReceivePacket.
USBCAMD2 Cancele los IRP pendientes enviados a USBCAMD2. Devuelve cualquier SRB de datos que estén pendientes al controlador de clase stream.sys.
USBCAMD2 Llame a la función de devolución de llamada CamStopCaptureEx del minidriver.
Minidriver de cámara Envíe un comando stop-capture a la cámara.
USBCAMD2 Llame a la función de devolución de llamada CamFreeBandwidthEx de la minidriver para liberar ancho de banda de bus isócrono, si procede.
Minidriver de cámara Seleccione una configuración alternativa inactiva.
USBCAMD2 Recursos gratuitos asociados a canalizaciones USB.

Controlador de SRB_UNINITIALIZE_DEVICE de minidriver

Componente Acción
Minidriver de cámara Llame a USBCAMD_AdapterReceivePacket.
USBCAMD2 Si todavía hay streams abiertos, ciérrelos llamando a las funciones de devolución de llamada CamStopCaptureEx y CamFreeBandwidthEx del controlador para cada stream.
USBCAMD2 Llame a la función de devolución de llamada CamUnInitialize del minidriver.
Minidriver de cámara Limpiar y liberar recursos.

Controlador de SRB_SURPRISE_REMOVAL de Minidriver

Componente Acción
Minidriver de cámara Llame a USBCAMD_AdapterReceivePacket.
USBCAMD2 Cancele los SRB de datos pendientes y devuelva los SRB con STATUS_CANCELLED.
USBCAMD2 Llame a las funciones de devolución de llamada CamStopCaptureEx y CamFreeBandwidthEx del minidriver en todas las secuencias abiertas.
USBCAMD2 Devuelve STATUS_CANCELLED en cualquier SRB de lectura y escritura que bajen después de SRB_SURPRISE_REMOVAL.

Controlador de SRB_SET_DATA_FORMAT de Minidriver

Componente Acción
Minidriver de cámara Compruebe el nuevo formato de vídeo.
Minidriver de cámara Llame a USBCAMD_SetVideoFormat.
USBCAMD2 Guarde el nuevo formato con la extensión de secuencia asociada.

El controlador del cambio de estado de energía SRB_CHANGE_POWER_STATE del minidriver de Encendido a Apagado

Componente Acción
Minidriver de cámara Llame a USBCAMD_AdapterReceivePacket.
USBCAMD2 Detenga el streaming en canalización isócrónica si procede, o cancele las transferencias masivas o de interrupción pendientes.
USBCAMD2 Llame a la función de devolución de llamada CamStopCaptureEx del minidriver.
Minidriver de cámara Envíe el comando stop capture al hardware.

El manejador del cambio de estado de energía del minidriver desde Apagado hasta Encendido

Componente Acción
Minidriver de cámara Llame a USBCAMD_AdapterReceivePacket.
USBCAMD2 Reinicie el streaming en canalización isócrónica si procede, o vuelva a enviar la transferencia masiva o de interrupción a la clase USB.
Minidriver de cámara Restaure la configuración de la cámara y el consumo de energía de la cámara a niveles normales.
USBCAMD2 Llame a la función de devolución de llamada CamStopCaptureEx del minidriver.
USBCAMD2 Llame a la función de devolución de llamada CamStartCaptureEx del minidriver.