Condividi tramite


Implementazione del driver audio caricato hardware

Quando si implementa un driver per l'audio scaricato, si sviluppa un driver in grado di elaborare i flussi audio caricati e di esporre tale capacità al sistema audio windows.

Questo argomento presenta i dettagli dell'implementazione per un driver audio sviluppato per una scheda audio in grado di elaborare flussi audio caricati dall'hardware.

Questi argomenti aggiuntivi in questa sezione illustrano i problemi da tenere presente quando si sviluppa un driver audio per una scheda audio che implementa un motore audio hardware per gestire i flussi audio caricati.

Interfacce helper portcls per l'elaborazione audio caricata

Creazione di report suglitch per l'audio disattivato

Offload hardware - Topologia di filtro KS

Windows supporta l'uso di una scheda audio che può usare un motore audio hardware su scheda per elaborare i flussi audio. Quando si sviluppa tale scheda audio, il driver audio associato deve esporre questo fatto al sistema audio in modalità utente in modo specifico, in modo che il sistema audio possa individuare, usare e esporre correttamente le funzionalità di questa scheda e il relativo driver.

Diagramma che mostra un sistema dotato di DSP che implementa gli effetti nell'hardware.

GUID KSNODETYPE_AUDIO_ENGINE per i descrittori del nodo

Se una scheda audio è in grado di elaborare flussi audio caricati, il driver audio dell'adattatore espone questa funzionalità usando un nodo nel filtro KS per l'adattatore.

Se un adattatore audio è in grado di elaborare flussi audio caricati, il driver audio dell'adattatore espone questa funzionalità usando un nodo specifico nel filtro KS per la scheda.

Ogni nodo nel percorso del flusso audio ha un descrittore del nodo, per il caricamento hardware disattivato, il driver deve impostare il GUID tipo su KSNODETYPE_AUDIO_ENGINE.

Ecco un esempio di come il driver potrebbe configurare il descrittore del nodo per questo nodo:

typedef struct _KSNODE_DESCRIPTOR {
  const KSAUTOMATION_TABLE *AutomationTable;    // drv specific
  const GUID               *Type;       // must be set to KSNODETYPE_AUDIO_ENGINE
  const GUID               *Name;       // drv specific (KSNODETYPE_AUDIO_ENGINE?)  
} KSNODE_DESCRIPTOR, *PKSNODE_DESCRIPTOR;

Se il GUID Nome è impostato su KSNODETYPE_AUDIO_ENGINE, è necessario creare una stringa di nome predefinita per questo nodo. Si aggiunge quindi tale stringa a ks.inf, in modo che durante l'installazione del driver, la stringa possa essere usata per popolare la chiave del Registro di sistema MediaCategories .

La definizione del GUID per il tipo di nodo , KSNODETYPE_AUDIO_ENGINE, è la seguente:

Code style
#define STATIC_KSNODETYPE_AUDIO_ENGINE\
    0x35caf6e4, 0xf3b3, 0x4168, 0xbb, 0x4b, 0x55, 0xe7, 0x7a, 0x46, 0x1c, 0x7e
DEFINE_GUIDSTRUCT("35CAF6E4-F3B3-4168-BB4B-55E77A461C7E", KSNODETYPE_AUDIO_ENGINE);
#define KSNODETYPE_AUDIO_ENGINE DEFINE_GUIDNAMED(KSNODETYPE_AUDIO_ENGINE)

Per altre informazioni, vedere il file di intestazione ksmedia.h .

E in base alle informazioni precedenti, un descrittore per un nodo miniport potrebbe essere simile al seguente:

PCNODE_DESCRIPTOR MiniportNodes[] =
{
    // KSNODE_WAVE_AUDIO_ENGINE
    {
        0,                          // Flags
        NULL,                       // AutomationTable
        &KSNODETYPE_AUDIO_ENGINE,   // Type  KSNODETYPE_AUDIO_ENGINE
        NULL                        // Name
    }
};

La proprietà KSPROPSETID_AudioEngine KS impostata per i motori audio

Il set di proprietà KSPROPSETID_AudioEngine viene usato per supportare motori audio hardware e elaborazione audio caricata dall'hardware. Quindi il driver per una scheda che può elaborare flussi audio caricati deve supportare le proprietà in questo nuovo set di proprietà.

Il set di proprietà, KSPROPSETID_AudioEngine, è definito come segue:

#define STATIC_KSPROPSETID_AudioEngine\
    0x3A2F82DCL, 0x886F, 0x4BAA, 0x9E, 0xB4, 0x8, 0x2B, 0x90, 0x25, 0xC5, 0x36
DEFINE_GUIDSTRUCT("3A2F82DC-886F-4BAA-9EB4-082B9025C536", KSPROPSETID_AudioEngine);
#define KSPROPSETID_AudioEngine DEFINE_GUIDNAMED(KSPROPSETID_AudioEngine)

I nomi delle proprietà di questo set di proprietà sono definiti nell'enumerazione KSPROPERTY_AUDIOENGINE e il driver deve supportare questi nomi.

Di seguito sono riportate le proprietà nel set di proprietà KSPROPSETID_AudioEngine :

KSPROPERTY_AUDIOENGINE_BUFFER_SIZE_RANGE

KSPROPERTY_AUDIOENGINE_DESCRIPTOR

KSPROPERTY_AUDIOENGINE_DEVICEFORMAT

KSPROPERTY_AUDIOENGINE_GFXENABLE

KSPROPERTY_AUDIOENGINE_LFXENABLE

KSPROPERTY_AUDIOENGINE_LOOPBACK_PROTECTION

KSPROPERTY_AUDIOENGINE_MIXFORMAT

KSPROPERTY_AUDIOENGINE_SUPPORTEDDEVICEFORMATS

KSPROPERTY_AUDIOENGINE_VOLUMELEVEL

Proprietà necessarie nel set di proprietà audio di KSPROPSETID_

Oltre a supportare le proprietà nel set di proprietà KSPROPSETID_AudioEngine , il driver deve supportare anche le proprietà esistenti seguenti nel set di proprietà KSPROPSETID_Audio :

KSPROPERTY_AUDIO_MUTE

KSPROPERTY_AUDIO_PEAKMETER2

KSPROPERTY_AUDIO_VOLUMELEVEL

Per completare l'implementazione del supporto driver per l'elaborazione audio caricata dall'hardware, le proprietà sono disponibili per il set di proprietà audio KSPROPSETID_ .

KSPROPERTY_AUDIO_LINEAR_BUFFER_POSITION

KSPROPERTY_AUDIO_PRESENTATION_POSITION

KSPROPERTY_AUDIO_WAVERT_CURRENT_WRITE_POSITION

Aggiornamenti del driver di classe porta e creazione di report suglitch

Oltre al supporto descritto nelle sezioni precedenti per l'elaborazione audio caricata dall'hardware, il driver di classe porta Windows fornisce "interfacce helper" per semplificare lo sviluppo di un driver che può lavorare con flussi audio caricati. E quando un driver di questo tipo rileva glitch, esiste un meccanismo sul posto per consentire al driver di segnalare gli errori di glitch. Gli argomenti seguenti forniscono altri dettagli sulle interfacce helper e sulla creazione di report suglitch:

Interfacce helper portcls per l'elaborazione audio caricata Oltre al supporto descritto nelle sezioni precedenti per l'elaborazione audio caricata dall'hardware, il driver di classe porta Windows include anche "interfacce helper" per semplificare lo sviluppo di un driver che può funzionare con flussi audio caricati. E quando un driver di questo tipo rileva glitch, esiste un meccanismo sul posto per consentire al driver di segnalare gli errori di glitch. Gli argomenti seguenti forniscono altri dettagli sulle interfacce helper e sulla creazione di report suglitch:

Implementazione del driver audio caricato hardware

Oggetti di elaborazione audio Windows