Partager via


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 :

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.

diagramme illustrant le plug-in d’unité d’extension et les modules associés.

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 :

  1. Inscription aux événements de mise à jour à l’aide de KSEVENTSETID_VIDCAPNotify::KSEVENT_VIDCAP_AUTO_UPDATE

  2. Écoute des événements sur le handle d’événement de notification

  3. Annulation de la notification lorsque vous avez terminé