Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Un minidriver USBCAMD2 fonctionne généralement comme suit :
Le minidriver de caméra appelle USBCAMD_DriverEntry depuis sa routine DriverEntry. Lorsque le minidriver appelle USBCAMD_DriverEntry, il passe à USBCAMD2 la fonction de rappel AdapterReceivePacket du minidriver. USBCAMD2 puis inscrit le minidriver auprès du pilote de classestream.sys .
Le minidriver de caméra peut ensuite recevoir différents blocs de demandes de flux (SRBs) dans sa fonction de rappel AdapterReceivePacket pour gérer, notamment :
Le minidriver de caméra détermine comment il doit traiter chaque SRB. Le minidriver peut appeler des routines dans la bibliothèque de minidriver USBCAMD2 pour faciliter le traitement des SRBs. Ces routines commencent généralement par le préfixe USBCAMD_ .
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. |