Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Normalmente, un minidriver de cámara USBCAMD2 funciona de la siguiente manera:
El minidriver de cámara llama a USBCAMD_DriverEntry desde su rutina DriverEntry. Cuando el minidriver llama a USBCAMD_DriverEntry, le pasa a USBCAMD2 la función de devolución de llamada AdapterReceivePacket del minidriver. USBCAMD2 registra el minidriver con el controlador de clase stream.sys .
A continuación, el minidriver de cámara puede recibir varios bloques de solicitud de secuencia (SRB) en su función de devolución de llamada AdapterReceivePacket para gestionar, incluyendo:
El minidriver de cámara determina cómo debe procesar cada SRB. El minidriver puede llamar a rutinas en la biblioteca de minidriver de USBCAMD2 para ayudar con el procesamiento de SRB. Estas rutinas suelen comenzar con el prefijo USBCAMD_ .
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. |