Partager via


Fonctionnement du mini-pilote USBCAMD2

Un minidriver USBCAMD2 fonctionne généralement comme suit :

Par exemple, pour spécifier les autres fonctions de rappel du minidriver de caméra avec USBCAMD2, le minidriver de caméra indique leurs points d’entrée dans une structure USBCAMD_DEVICE_DATA2. Le minidriver appelle ensuite USBCAMD_InitializeNewInterface pour passer la structure de USBCAMD_DEVICE_DATA2 initialisée à USBCAMD2. USBCAMD2 appelle les fonctions de rappel du minidriver lorsque cela est nécessaire.

Remarque

La structure USBCAMD_DEVICE_DATA est prise en charge dans USBCAMD2 uniquement à des fins de compatibilité descendante.

Le minidriver doit appeler USBCAMD_AdapterReceivePacket pour envoyer les SRBs qu’il ne gère pas à USBCAMD2 pour traitement.

Les fonctions de rappel de bibliothèque USBCAMD décrivent les fonctions de rappel que le minidriver implémente et qu’elles soient facultatives ou requises.

La liste suivante de procédures illustre le flux général de traitement pour les SRBs envoyés au minidriver de caméra :

Gestionnaire du minidriver SRB_INITIALIZE_DEVICE

Composant Action
Minidriver de caméra Initialisez USBCAMD2 en appelant USBCAMD_InitializeNewInterface, indiquant des exigences de traitement vidéo ou de traitement brut d'image fixe dans le mode noyau, telles que l'activation des événements du périphérique.
Minidriver de caméra Appelez USBCAMD_AdapterReceivePacket.
USBCAMD2 Acquérir des descripteurs d’appareil et de configuration USB.
USBCAMD2 Appelez la fonction de rappel CamConfigureEx du minidriver.
Minidriver de caméra Terminez la configuration. Choisissez un autre paramètre et une taille de transfert maximale. Remplissez le tableau de structures USBCAMD_Pipe_Config_Descriptor.
USBCAMD2 Analysez le tableau de structures USBCAMD_Pipe_Config_Descriptor .
USBCAMD2 Appelez la fonction de rappel CamInitialize du minidriver.
Minidriver de caméra Terminez l’initialisation. Définissez l’alimentation de l’appareil et activez le paramètre par défaut sur l’appareil photo.
USBCAMD2 Fournissez le nombre de flux et la taille du descripteur de flux au pilote de classestream.sys.

Gestionnaire SRB_GET_STREAM_INFO du minidriver

Composant Action
Minidriver de caméra Fournissez la structure d’informations de flux HW_STREAM_INFORMATION au pilote de classestream.sys.
Minidriver de caméra Remplissez le pointeur vers le tableau des ensembles de propriétés d’appareil dans la structure HW_STREAM_HEADER du pilote de classe stream.sys.
Minidriver de caméra Appelez USBCAMD_AdapterReceivePacket.
USBCAMD2 Renseignez le nombre de broches dans l’en-tête de flux.
USBCAMD2 Exposez la table d’événements de l’appareil, le cas échéant.
USBCAMD2 Corrigez les valeurs d’entrée dans la table d’informations de flux. Définir le nom de catégorie (capture ou image fixe).
USBCAMD2 Renseignez le pointeur vers le tableau de propriétés de flux.

Gestionnaire SRB_INITIALIZATION_COMPLETE du minidriver

Composant Action
Minidriver de caméra Acquérir GUID_USBCAMD_INTERFACE pour USBCAMD2 à l’aide de IRP_MJ_PNP et de IRP_MN_QUERY_INTERFACE.

Le gestionnaire de SRB_GET_DEVICE_PROPERTY du minidriver

Composant Action
Minidriver de caméra Obtenez les propriétés que gère le minidriver de la caméra, telles que PROPSETID_VIDCAP_VIDEOPROCAMP, PROPSETID_VIDCAP_CAMERACONTROL et PROPSETID_VIDCAP_VIDEOCONTROL, ainsi que les autres jeux de propriétés personnalisés.

Gestionnaire de SRB_SET_DEVICE_PROPERTY minidriver

Composant Action
Minidriver de caméra Définissez les propriétés que le minidriver de la caméra gère en acquérant les paramètres de PROPSETID_VIDCAP_VIDEOPROCAMP, de PROPSETID_VIDCAP_CAMERACONTROL et de PROPSETID_VIDCAP_VIDEOCONTROL, ainsi que tous les autres jeux de propriétés personnalisés.

Gestionnaire SRB_GET_DATA_INTERSECTION du minidriver

Composant Action
Minidriver de caméra Retourne une structure KSDATAFORMAT à partir d’une structure KSDATARANGE .
Minidriver de caméra Vérifiez que la fréquence d’images demandée (VideoInfoHeader.AvgTimePerFrame) se trouve dans les limites supérieures et inférieures pour le format vidéo demandé. S'il dépasse les limites, le minidriver doit corriger les valeurs suivantes dans pSrb->CommandData.IntersectInfo->Datarange : VideoInfoHeader.AvgTimePerFrame, VideoInfoHeader.dwBitRate.

Gestionnaire du minidriver pour SRB_OPEN_STREAM

Composant Action
Minidriver de caméra Vérifiez le format vidéo.
Minidriver de caméra Appelez USBCAMD_AdapterReceivePacket.
USBCAMD2 Enregistrez le format vidéo accepté par le minidriver de la caméra.
USBCAMD2 Appelez la fonction de rappel CamAllocateBandwidthEx du minidriver pour allouer de la bande passante en fonction des données de format vidéo et obtenir la taille de mémoire tampon maximale pour le format vidéo.
Minidriver de caméra Calculez la taille maximale de paquets du canal isochronous qui satisfait la fréquence d’images demandée et la taille des fenêtres de sortie.
Minidriver de caméra Choisissez le paramètre de remplacement le plus proche en appelant USBCAMD_SelectAlternateInterface. Le minidriver doit fournir à USBCAMD2 la taille de trame maximale possible pouvant être produite par l’appareil photo.
Minipilote de caméra Réglez la mise à l’échelle matérielle de la caméra. Définissez les contrôles de caméra sur les valeurs stockées dans le Registre ou sur le paramètre par défaut s'il s'agit de la première fois.
Minidriver de caméra Vérifiez que la fréquence d’images (VideoInfoHeader.AvgTimePerFrame) se situe dans les limites du format vidéo et corrigez-la si ce n’est pas le cas.
USBCAMD2 Appelez la fonction de rappel CamStartCaptureEx du minidriver.
Minidriver de caméra Mettez le matériel en mode capture.
USBCAMD2 Initialiser un transfert isochronique ou en bloc.

Gestionnaire de SRB_CLOSE_STREAM du minidriver

Composant Action
Minidriver de caméra Appelez USBCAMD_AdapterReceivePacket.
USBCAMD2 Annulez les IRPs en attente soumis à USBCAMD2. Retourner les SRB de données en attente au pilote de classe stream.sys.
USBCAMD2 Appelez la fonction de rappel CamStopCaptureEx du minidriver.
Minidriver de caméra Envoyez une commande stop-capture à la caméra.
USBCAMD2 Appelez la fonction de rappel CamFreeBandwidthEx du minidriver pour libérer la bande passante du bus isochronous, le cas échéant.
Minidriver de caméra Sélectionnez un paramètre alternatif inactif.
USBCAMD2 Ressources gratuites associées à des canaux USB.

Gestionnaire SRB_UNINITIALIZE_DEVICE du minipilote

Composant Action
Minidriver de caméra Appelez USBCAMD_AdapterReceivePacket.
USBCAMD2 Si des flux sont toujours ouverts, fermez-les en appelant les fonctions de rappel CamStopCaptureEx et CamFreeBandwidthEx pour chaque flux.
USBCAMD2 Appelez la fonction de rappel CamUnInitialize du minidriver.
Minidriver de caméra Nettoyer et libérer des ressources.

Gestionnaire de minidriver SRB_SURPRISE_REMOVAL

Composant Action
Minidriver de caméra Appelez USBCAMD_AdapterReceivePacket.
USBCAMD2 Annulez les bases de données en attente et renvoyez les bases de données avec STATUS_CANCELLED.
USBCAMD2 Appelez les fonctions de rappel CamStopCaptureEx et CamFreeBandwidthEx du minidriver sur tous les flux ouverts.
USBCAMD2 Retournez STATUS_CANCELLED sur toutes les bases de données SRB en lecture/écriture qui tombent après SRB_SURPRISE_REMOVAL.

Gestionnaire du minidriver pour SRB_SET_DATA_FORMAT

Composant Action
Minidriver de caméra Vérifiez le nouveau format vidéo.
Minidriver de caméra Appelez USBCAMD_SetVideoFormat.
USBCAMD2 Enregistrez le nouveau format avec l’extension de flux associée.

Le gestionnaire SRB_CHANGE_POWER_STATE du Minidriver, passant de l'état Power ON à Power OFF

Composant Action
Minidriver de caméra Appelez USBCAMD_AdapterReceivePacket.
USBCAMD2 Arrêtez la diffusion en continu sur le canal isochrone le cas échéant, ou annulez les transferts en bloc ou d’interruption en attente.
USBCAMD2 Appelez la fonction de rappel CamStopCaptureEx du minidriver.
Minidriver de caméra Envoyer la commande d’arrêt de capture au matériel.

Le SRB_CHANGE_POWER_STATE de Minidriver de Power OFF au gestionnaire Power ON

Composant Action
Minidriver de caméra Appelez USBCAMD_AdapterReceivePacket.
USBCAMD2 Redémarrez la diffusion en continu sur le canal isochronique le cas échéant, ou soumettez à nouveau le transfert en bloc ou interrompez le transfert vers la classe USB.
Minidriver de caméra Restaurez les paramètres de l’appareil photo et la consommation d’alimentation de l’appareil photo à des niveaux normaux.
USBCAMD2 Appelez la fonction de rappel CamStopCaptureEx du minidriver.
USBCAMD2 Appelez la fonction de rappel CamStartCaptureEx du minidriver.