Nota
L'accesso a questa pagina richiede l'autorizzazione. Puoi provare ad accedere o a cambiare directory.
L'accesso a questa pagina richiede l'autorizzazione. Puoi provare a cambiare directory.
Quando si implementa un driver per l'audio scaricato, si sviluppa un driver in grado di elaborare flussi audio scaricati e di esporre tale capacità al sistema audio Windows.
Questo argomento presenta i dettagli di implementazione per un driver audio sviluppato per una scheda audio in grado di elaborare flussi audio scaricati dall'hardware.
Questi argomenti aggiuntivi in questa sezione illustrano i problemi da tenere presenti quando si sviluppa un driver audio per una scheda audio che implementa un motore audio hardware per gestire flussi audio scaricati.
Interfacce helper Portcls per l'elaborazione audio delegata
Segnalazione dei glitch per l'audio trasferito
Offload dell'hardware - Topologia del filtro KS
Windows supporta l'uso di una scheda audio che può utilizzare un motore audio hardware integrato per elaborare i flussi audio. Quando si sviluppa un adattatore audio di questo tipo, 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, utilizzare ed esporre correttamente le funzionalità di questa scheda e il relativo driver.
GUID KSNODETYPE_AUDIO_ENGINE per i descrittori di nodi
Se un adattatore 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 scaricati, il driver audio dell'adattatore espone questa funzionalità usando un nodo specifico nel filtro KS per l'adattatore.
Ogni nodo nel percorso del flusso audio ha un descrittore di nodo, per l'offload hardware, il driver deve impostare il GUID tipo su KSNODETYPE_AUDIO_ENGINE.
Ecco un esempio di come il driver può configurare il descrittore di 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 sia possibile usare la stringa 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 ulteriori 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 i motori audio hardware e l'elaborazione audio scaricata dall'hardware. Il driver per un adattatore in grado di elaborare flussi audio delegati deve quindi supportare le proprietà in questo nuovo insieme 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à in questo set di proprietà sono definiti nell'enumerazione KSPROPERTY_AUDIOENGINE e il driver deve supportare questi nomi.
Ecco 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à obbligatorie nel set di proprietà audio 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 dei driver per l'elaborazione audio con offload hardware, le proprietà sono disponibili nel set di proprietà KSPROPSETID_ Audio.
KSPROPERTY_AUDIO_LINEAR_BUFFER_POSITION
KSPROPERTY_AUDIO_PRESENTATION_POSITION
Posizione di scrittura corrente KSPROPERTY_AUDIO_WAVERT
Aggiornamenti dei driver di classe porta e segnalazione degli errori
Oltre al supporto descritto nelle sezioni precedenti per l'elaborazione audio offload tramite hardware, il driver di classe porta di Windows fornisce "interfacce di aiuto" per facilitare lo sviluppo di un driver in grado di gestire flussi audio offload. E quando un driver di questo tipo rileva malfunzionamenti, esiste un meccanismo che consente al driver di segnalare i malfunzionamenti. Negli argomenti seguenti vengono forniti altri dettagli sulle interfacce helper e sulla segnalazione degli errori:
Interfacce helper portcls per l'elaborazione audio con offload Oltre al supporto descritto nelle sezioni precedenti per l'elaborazione audio con offload hardware, il driver di classe porta di Windows include inoltre "interfacce helper" per semplificare lo sviluppo di un driver in grado di lavorare con flussi audio con offload. E quando un driver di questo tipo rileva malfunzionamenti, esiste un meccanismo che consente al driver di segnalare i malfunzionamenti. Negli argomenti seguenti vengono forniti altri dettagli sulle interfacce helper e sulla segnalazione degli errori: