Condividi tramite


API del codificatore

[La funzionalità associata a questa pagina, DirectShow, è una funzionalità legacy. È stata sostituita da MediaPlayer, IMFMediaEngine e Audio/Video Capture in Media Foundation. Queste funzionalità sono state ottimizzate per Windows 10 e Windows 11. Microsoft consiglia vivamente che il nuovo codice usi MediaPlayer, IMFMediaEngine e Audio/Video Capture in Media Foundation invece di DirectShow, quando possibile. Microsoft suggerisce che il codice esistente che usa le API legacy venga riscritto per usare le nuove API, se possibile.

L'API codificatore fornisce un'interfaccia uniforme per la configurazione di codificatori software e hardware. Le applicazioni possono usare l'API codificatore per configurare un codificatore e archiviare le impostazioni di configurazione. I fornitori di codificatori possono usare l'API codificatore per esporre le funzionalità di un codificatore. Anche se l'API del codificatore è progettata principalmente per i codificatori, è sufficiente che i decodificatori possano supportarlo.

L'API del codificatore viene esposta alle applicazioni tramite l'interfaccia ICodecAPI , esposta dal filtro del codificatore. Il filtro del codificatore può essere un filtro DirectShow nativo, un codificatore hardware o un oggetto DMO (DirectX Media Object).

  • Filtri software: un codificatore implementato come filtro DirectShow nativo deve esporre direttamente l'ICodecAPI .
  • Codificatori hardware: il dispositivo di codifica viene esposto tramite uno o più minidriver AVStream, rappresentati in modalità utente da KSProxy. KSProxy converte le chiamate al metodo ICodecAPI in set di proprietà KS. Per altre informazioni, vedere la documentazione di DDK.
  • DMOs: DMO deve esporre l'interfaccia ICodecAPI . Le applicazioni DirectShow possono eseguire query sul filtro Wrapper DMO, che espone l'interfaccia aggregando l'oggetto DMO. Le applicazioni non basate su DirectShow possono eseguire query direttamente su DMO.

Capabilties del codificatore

Un codificatore può registrare un elenco di funzionalità di alto livello archiviandole nel Registro di sistema. Ogni funzionalità è identificata da un GUID. Per enumerare le funzionalità di un particolare codificatore, eseguire le operazioni seguenti:

  1. Creare il moniker che rappresenta il filtro del codificatore. Vedere Uso dell'enumeratore del dispositivo di sistema.
  2. Eseguire una query sul moniker del filtro per l'interfaccia IGetCapabilitiesKey .
  3. Chiamare IGetCapabilitiesKey::GetCapabilitiesKey. Il metodo restituisce un handle alla chiave del Registro di sistema che contiene l'elenco delle funzionalità del filtro.
  4. Chiamare la funzione RegEnumValue per enumerare i valori per la chiave restituita.

Se si sta eseguendo lo sviluppo di un codificatore, creare le voci del Registro di sistema per le funzionalità quando il filtro viene registrato. Per i filtri software, creare una chiave denominata Capabilities adiacente alle chiavi FilterData e FriendlyName . In genere, è necessario aggiungere queste informazioni dopo aver chiamato AMovieDllRegisterServer2 per registrare i dati del filtro standard. Per altre informazioni, vedere Come registrare i filtri DirectShow. In alternativa, è possibile creare una chiave CapabilitiesLocation contenente una stringa che fornisce la posizione della chiave Capabilities nel Registro di sistema. La stringa deve iniziare con "HKLM\", "HKCR\" o "HKCU\" per indicare il sottoalbero del Registro di sistema. Per i dispositivi Plug and Play, i file di installazione del driver devono creare una chiave Capabilities adiacente alla chiave FriendlyName del filtro oppure può usare una chiave CapabilitiesLocation come descritto per i filtri software.

Dopo aver creato la chiave Capabilities , creare un valore per ogni GUID di funzionalità. Il nome del valore deve essere il formato stringa del GUID, nel formato {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}. Ogni tipo di valore deve essere uno dei seguenti:

  • Valore numerico singolo. Usare un valore DWORD .
  • GUID. Usare il formato stringa del GUID.
  • Coppie numeriche. Usare una stringa con il formato "a,b" per rappresentare coppie di valori, ad esempio larghezza e altezza, o numeratore e denominatore per le frazioni.
  • Matrici di valori. Usare più stringhe (REG_SZ_MULTI) per rappresentare più di un valore.

L'esempio seguente illustra il layout del Registro di sistema per un filtro software:

\HKCR\CLSID\Filter Category\Instance\Filter CLSID\Capabilities\
    
Values: 
    
    guid1: 1234 (REG_DWORD)   
    
    guid2: "{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}" (REG_SZ)
    
    guid3: "2","4","6" (REG_SZ_MULTI)
    
    guid4: "720,480" (REG_SZ) 

Profili codificatori

Un profilo del codificatore è un elenco fisso di impostazioni di configurazione che possono essere applicate a un codificatore in fase di esecuzione. I profili sono indipendenti dal codificatore; un'applicazione può selezionare un codificatore, quindi selezionare un profilo e applicare le impostazioni del profilo al codificatore. I profili sono identificati dal GUID e devono essere archiviati nel percorso seguente nel Registro di sistema:

\HKLM\Software\Microsoft\EncoderProfiles\Profile GUID\

dove GUID profilo

è il formato stringa del GUID che identifica il profilo. Creare valori per ogni impostazione. Creare anche un valore stringa denominato "FriendlyName" i cui dati identificano il profilo ,ad esempio "LowBandwidthVideo".

Sviluppo di codificatori e decodificatori