Condividi tramite


Architettura dell'unità di estensione Plug-In

Il driver della classe video USB espone le unità di estensione come nodi nel filtro proxy USB Video KS. I controlli unità di estensione vengono ulteriormente esposti in modalità utente come proprietà impostata sul nodo, ovvero di tipo KSNODETYPE_DEV_SPECIFIC. Il GUID del set di proprietà corrisponde al GUID del descrittore di unità di estensione.

I singoli controlli unità di estensione devono essere numerati continuamente da 1 a un valore massimo n. Questi controlli vengono mappati direttamente agli identificatori di proprietà (ID) nel set di proprietà dell'unità di estensione ed è possibile accedervi usando richieste KSPROPERTY standard tramite IKsControl.

In risposta alle richieste di proprietà dalle applicazioni, il driver UVC restituisce i valori delle proprietà che hanno il membro MembersFlags della struttura KSPROPERTY_MEMBERSHEADER impostata esclusivamente su KSPROPERTY_MEMBER_RANGES. UVC non supporta intervalli con rientri o valori predefiniti dell'unità di estensione di lunghezza arbitraria.

Per esporre le proprietà dell'unità di estensione a un'applicazione, è possibile scrivere una DLL plug-in in modalità utente che espone un'API COM. È possibile implementare questa API effettuando richieste al set di proprietà KS usando l'interfaccia IKsControl . Vidcap.ax carica automaticamente il plug-in dell'interfaccia del nodo in base a determinate voci del Registro di sistema. Un'applicazione può accedere all'interfaccia usando IKsTopologyInfo::CreateNodeInstance seguita da una chiamata a QueryInterface nell'oggetto node per ottenere l'API COM richiesta.

Per scrivere e usare un plug-in di unità di estensione, sono necessari gli elementi seguenti:

  • Un'intestazione e un file cpp che implementano l'API di unità di estensione e un'interfaccia denominata IKsNodeControl. Vidcap.ax usa l'interfaccia IKsNodeControl per informare il plug-in dell'identificatore del nodo di estensione e fornire un'istanza di IKsControl. Il codice di esempio per questi file è disponibile nella DLL del plug-in di unità di estensione di esempio.

  • File con estensione rgs che registra le interfacce del nodo e gli ID classe (CLSID) nella sottochiave HKLM\System\CCS\Control\NodeInterfaces\Property_Set_GUID del Registro di sistema. Le voci in questa sottochiave del Registro di sistema contengono i valori binari per l'ID interfaccia (IID) e CLSID. Per altre informazioni, vedere Voce del Registro di sistema di esempio per le unità di estensione UVC.

  • Applicazione che richiama questa interfaccia. L'applicazione crea innanzitutto un'istanza del nodo con l'ID nodo corretto usando IKsTopologyInfo::CreateNodeInstance. L'applicazione chiama quindi QueryInterface nell'istanza del nodo per ottenere l'interfaccia di unità di estensione richiesta. Per altre informazioni, vedere Applicazione di esempio per unità di estensione UVC e supporto degli eventi di aggiornamento automatico con unità di estensione

Gli esempi di codice in questa sezione illustrano tutti questi elementi. Per informazioni su come compilare il plug-in di esempio e il codice dell'applicazione di esempio associato, vedere Compilazione del controllo unità di unità di estensione .

Dopo aver registrato la DLL del plug-in e vengono fornite le voci del Registro di sistema descritte in precedenza, Vidcap.ax carica automaticamente le interfacce del nodo pertinenti quando viene creata l'istanza del nodo.

Nota A partire da Windows XP SP2, il set di proprietà Unità di estensione è supportato solo nel nodo e non nel filtro.

Considerazioni sul Registro di sistema

Per registrare l'IID e IL CLSID dell'interfaccia esportata dal plug-in, è possibile usare la registrazione dll o un file INF (Device Specific Setup Information).

Vedere Voce del Registro di sistema di esempio per unità di estensione UVC per un file con estensione rgs di esempio che mostra i valori necessari per le voci del Registro di sistema. Questo argomento illustra anche come scrivere un file INF specifico del dispositivo per installare un dispositivo video USB e registrare la DLL del plug-in. È possibile scegliere la registrazione dll o un file INF specifico del dispositivo, in base alle esigenze specifiche.

Schema

Il diagramma schema seguente illustra le relazioni tra i vari moduli coinvolti nella scrittura e nell'uso di un plug-in di unità di estensione. In particolare, traccia la connessione dall'applicazione, alla DLL del plug-in, fino al driver e infine all'unità di estensione nel dispositivo stesso. Lo schema illustra anche i vari GUID coinvolti; i valori identici sono evidenziati dall'uso di un colore corrispondente.

Diagramma che illustra il plug-in dell'unità di estensione e i moduli associati.

Meccanismi di eventi

La classe video USB supporta gli eventi di aggiornamento automatico, in cui il dispositivo invia una notifica al driver host delle modifiche in uno dei relativi controlli. Il driver Microsoft USB Video Class supporta questo concetto consentendo alle applicazioni di registrarsi per gli eventi di aggiornamento automatico. Il processo di recupero degli aggiornamenti prevede tre passaggi:

  1. Registrazione per gli eventi di aggiornamento tramite KSEVENTSETID_VIDCAPNotify::KSEVENT_VIDCAP_AUTO_UPDATE

  2. Ascolto degli eventi nell'handle di evento di notifica

  3. Annullamento della notifica al termine