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.
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 :
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: