Partager via


Architecture de l’unité d’extension Plug-In

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 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 aux identificateurs de propriété (ID) sur le jeu de propriétés d’unité d’extension. Ils sont accessibles à l’aide de requêtes KSPROPERTY standard via IKsControl.

En réponse aux demandes de propriétés provenant d’applications, le pilote UVC retourne les valeurs de propriété dont le membre MembersFlags de la structure KSPROPERTY_MEMBERSHEADER est définis exclusivement sur KSPROPERTY_MEMBER_RANGES. UVC ne prend pas en charge les gammes progressives ni les valeurs par défaut de longueur arbitraire de l’unité d’extension.

Pour exposer des propriétés d’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 d’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 Création de l’exemple de contrôle 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 pertinentes lors de la création de l’instance de nœud.

Note À compter de Windows XP SP2, le jeu de propriétés de l’unité d’extension est pris 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 spécifiques à l’appareil (INF).

Consultez l’exemple d’entrée de Registre pour les unités d’extension UVC pour un exemple de fichier .rgs qui affiche les valeurs requises pour les entrées du 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 de l’application, vers la DLL de 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 informe 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 pour les é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 descripteur d’événement de notification

  3. Annulation de la notification lorsque vous avez terminé