Architecture Plug-In unité d’extension
Le pilote de classe vidéo USB expose les unités d’extension en tant que nœuds dans le filtre proxy USB Video KS. Les contrôles d’unité d’extension sont davantage exposés en mode utilisateur en tant que propriété définie sur le nœud, qui est de type KSNODETYPE_DEV_SPECIFIC. Le GUID du jeu de propriétés correspond au GUID du descripteur d’unité d’extension.
Les contrôles d’unité d’extension individuels doivent être numérotés en continu de 1 à une valeur maximale n. Ces contrôles sont directement mappés à des identificateurs de propriétés (ID) sur le jeu de propriétés d’unité d’extension, et ils sont accessibles à l’aide de requêtes KSPROPERTY standard via IKsControl.
En réponse aux demandes de propriété des applications, le pilote UVC retourne des valeurs de propriété dont le membre MembersFlags de la structure KSPROPERTY_MEMBERSHEADER est défini exclusivement sur KSPROPERTY_MEMBER_RANGES. UVC ne prend pas en charge les plages échelonnées ou les valeurs par défaut des unités d’extension de longueur arbitraire.
Pour exposer les propriétés de l’unité d’extension à une application, vous pouvez écrire une DLL de plug-in en mode utilisateur qui expose une API COM. Vous pouvez implémenter cette API en effectuant des requêtes à la propriété KS définie à l’aide de l’interface IKsControl . Vidcap.ax charge automatiquement le plug-in d’interface de nœud en fonction de certaines entrées de Registre. Une application peut accéder à l’interface à l’aide de IKsTopologyInfo::CreateNodeInstance suivi d’un appel à QueryInterface sur l’objet node pour obtenir l’API COM requise.
Les éléments suivants sont nécessaires pour écrire et utiliser un plug-in d’unité d’extension :
Un fichier d’en-tête et de cpp implémentant l’API d’unité d’extension et une interface nommée IKsNodeControl. Vidcap.ax utilise l’interface IKsNodeControl pour informer le plug-in de l’identificateur de nœud d’extension et lui fournir une instance d’IKsControl. Vous trouverez un exemple de code pour ces fichiers dans exemple de DLL de plug-in d’unité d’extension.
Fichier .rgs qui inscrit les interfaces de nœud et les ID de classe (CLSID) sous la sous-clé de Registre HKLM\System\CCS\Control\NodeInterfaces\Property_Set_GUID . Les entrées de cette sous-clé de Registre contiennent les valeurs binaires de l’ID d’interface (IID) et du CLSID. Pour plus d’informations, consultez Exemple d’entrée de registre pour les unités d’extension UVC.
Application qui appelle cette interface. L’application crée d’abord un nœud instance avec l’ID de nœud correct à l’aide de IKsTopologyInfo::CreateNodeInstance. L’application appelle ensuite QueryInterface sur le nœud instance pour obtenir l’interface d’unité d’extension requise. Pour plus d’informations, consultez Exemple d’application pour les unités d’extension UVC et Prise en charge des événements de mise à jour automatique avec des unités d’extension
Les exemples de code de cette section illustrent tous ces éléments. Consultez Génération du contrôle d’exemple d’unité d’extension pour savoir comment générer l’exemple de plug-in et l’exemple de code d’application associé.
Une fois que la DLL du plug-in est inscrite et que les entrées de Registre décrites ci-dessus sont fournies, Vidcap.ax charge automatiquement les interfaces de nœud appropriées lors de la création du instance de nœud.
Note À compter de Windows XP SP2, la propriété Unité d’extension définie est prise en charge uniquement sur le nœud, et non sur le filtre.
Considérations relatives au Registre
Pour inscrire l’IID et le CLSID de l’interface exportée par le plug-in, vous pouvez utiliser l’inscription DLL ou un fichier d’informations d’installation (INF) spécifique à l’appareil.
Consultez Exemple d’entrée de Registre pour les unités d’extension UVC pour obtenir un exemple de fichier .rgs qui montre les valeurs requises pour les entrées de Registre. Cette rubrique montre également comment écrire un fichier INF spécifique à un appareil pour installer un périphérique vidéo USB et inscrire la DLL de plug-in. Vous pouvez choisir l’inscription DLL ou un fichier INF spécifique à l’appareil, en fonction de vos besoins spécifiques.
Schéma
Le diagramme schématique suivant montre les relations entre les différents modules impliqués dans l’écriture et l’utilisation d’un plug-in d’unité d’extension. En particulier, il trace la connexion à partir de l’application, à la DLL du plug-in, jusqu’au pilote et enfin à l’unité d’extension sur l’appareil lui-même. Le schéma illustre également les différents GUID impliqués; les valeurs identiques sont mises en surbrillance par l’utilisation d’une couleur correspondante.
Mécanismes d’événement
La classe vidéo USB prend en charge les événements de mise à jour automatique, où l’appareil avertit le pilote hôte des modifications apportées à l’un de ses contrôles. Le pilote Microsoft USB Video Class prend en charge ce concept en permettant aux applications de s’inscrire aux événements de mise à jour automatique. Le processus d’obtention des mises à jour implique trois étapes :
Inscription aux événements de mise à jour à l’aide de KSEVENTSETID_VIDCAPNotify::KSEVENT_VIDCAP_AUTO_UPDATE
Écoute des événements sur le handle d’événement de notification
Annulation de la notification lorsque vous avez terminé