Un mini-lecteur de caméra USBCAMD2 fonctionne généralement comme suit :
Le minidriver de la caméra appelle USBCAMD_DriverEntry à partir de sa routine DriverEntry . Lorsque le minidriver appelle USBCAMD_DriverEntry, il passe à USBCAMD2 la fonction de rappel AdapterReceivePacket du minidriver. USBCAMD2 inscrit ensuite le minidriver auprès du pilote de classestream.sys .
Le minidriver de l’appareil photo peut ensuite recevoir différents blocs de demande de flux (SB) dans sa fonction de rappel AdapterReceivePacket à gérer, notamment :
Le minidriver de la 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 SRB. Ces routines commencent généralement par le préfixe USBCAMD_ .
Par exemple, pour spécifier les autres fonctions de rappel du minidriver de l’appareil photo avec USBCAMD2, le minidriver de l’appareil photo spécifie leurs points d’entrée dans une structure de USBCAMD_DEVICE_DATA2 . Le minidriver appelle ensuite USBCAMD_InitializeNewInterface pour passer la structure USBCAMD_DEVICE_DATA2 initialisée à USBCAMD2. USBCAMD2 appelle ensuite les fonctions de rappel du minidriver si nécessaire.
Notes
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 tous les SSB qu’il ne gère pas à USBCAMD2 à traiter.
La liste de procédures suivante illustre le flux général de traitement des SRB envoyés au minidriver de l’appareil photo :
Gestionnaire de SRB_INITIALIZE_DEVICE minidriver
Composant
Action
Minidriver de l’appareil photo
Initialisez USBCAMD2 en appelant USBCAMD_InitializeNewInterface, en indiquant des exigences de traitement vidéo ou encore brutes en mode noyau, comme l’activation des événements d’appareil.
Vérifiez que la fréquence d’images demandée (VideoInfoHeader.AvgTimePerFrame) se situe dans les limites supérieure et inférieure 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.
Enregistrez le format vidéo accepté par le minidriver de l’appareil photo.
USBCAMD2
Appelez la fonction de rappel CamAllocateBandwidthEx du minidriver pour allouer 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.
Mini-disque d’appareil photo
Calculez la taille maximale des paquets du canal isochrone qui satisfait la fréquence d’images et la taille des fenêtres de sortie demandées.
Mini-disque d’appareil photo
Choisissez l’autre paramètre le plus proche en appelant USBCAMD_SelectAlternateInterface. Le minidriver doit fournir à USBCAMD2 la taille de cadre maximale possible qui peut être produite par l’appareil photo.
Mini-disque d’appareil photo
Définissez la mise à l’échelle matérielle sur 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 si la première fois.
Mini-disque d’appareil photo
Vérifiez que la fréquence d’images (VideoInfoHeader.AvgTimePerFrame) est comprise dans les limites du format vidéo et corrigez-la si ce n’est pas le cas.
Si des flux sont toujours ouverts, fermez-les en appelant les fonctions de rappel CamStopCaptureEx et CamFreeBandwidthEx du minidriver pour chaque flux.
USBCAMD2
Appelez la fonction de rappel CamUnInitialize du minidriver.
Redémarrez la diffusion en continu sur un canal isochronique, le cas échéant, ou renvoyez le transfert en bloc ou interrompez le transfert vers la classe USB.
Mini-disque d’appareil photo
Restaurez les paramètres de l’appareil photo et la consommation d’énergie de l’appareil photo à des niveaux normaux.