Sdílet prostřednictvím


Implementace zvukového ovladače s vyčleněným hardwarem

Když implementujete ovladač pro offloadovaný zvuk, vyvíjíte ovladač, který dokáže zpracovávat offloadované streamy zvuku a zpřístupnit tuto schopnost zvukovému systému Windows.

Téma představuje podrobnosti implementace zvukového ovladače vyvinutého pro zvukový adaptér schopný zpracovávat audio streamy hardwareově přenesené.

Tato další témata v této části popisují problémy, které byste měli zvážit při vývoji zvukového ovladače pro zvukový adaptér, jenž implementuje hardwarový zvukový modul k zpracovávání přenesených zvukových datových proudů.

Rozhraní pomocných rutin portcls pro odlehčené zpracování zvuku

Hlášení chyb pro přenesený zvuk

Snižování zátěže hardwaru – topologie filtru KS

Systém Windows podporuje použití zvukového adaptéru, který může ke zpracování zvukových proudů zvuku používat hardwarový zvukový modul na desce. Při vývoji takového zvukového adaptéru musí přidružený zvukový ovladač zpřístupnit tento fakt zvukovému systému uživatelského režimu určitým způsobem, aby mohl zvukový systém zjišťovat, používat a řádně vystavit funkce tohoto adaptéru a jeho ovladače.

Diagram znázorňující systém vybavený nástrojem DSP implementující efekty v hardwaru

Identifikátor GUID KSNODETYPE_AUDIO_ENGINE pro popisovače uzlů

Pokud je zvukový adaptér schopný zpracovávat offloadované zvukové streamy, zvukový ovladač adaptéru tuto schopnost zpřístupní pomocí uzlu v KS filtru adaptéru.

Pokud je zvukový adaptér schopný zpracovávat offloadované zvukové streamy, zvukový ovladač adaptéru tuto schopnost zpřístupňuje pomocí určitého uzlu v KS-filtru adaptéru.

Každý uzel v cestě ke zvukovému streamu má popisovač uzlu, pro hardware mimo zatížení musí ovladač nastavit identifikátor GUID typu na KSNODETYPE_AUDIO_ENGINE.

Tady je příklad konfigurace popisovače uzlu pro tento uzel:

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;

Pokud je identifikátor GUID názvu nastavený na KSNODETYPE_AUDIO_ENGINE, musíte pro tento uzel vytvořit výchozí řetězec názvu. Tento řetězec pak přidáte do souboru ks.inf, aby se při instalaci ovladače řetězec mohl použít k naplnění klíče registru MediaCategories .

Definice identifikátoru GUID pro typ uzlu , KSNODETYPE_AUDIO_ENGINE, je následující:

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)

Další informace najdete v souboru hlavičkový ksmedia.h.

A na základě předchozích informací může popisovač miniportového uzlu vypadat takto:

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

Vlastnost KSPROPSETID_AudioEngine KS nastavená pro zvukové moduly

Sada vlastností KSPROPSETID_AudioEngine slouží k podpoře hardwarových zvukových modulů a zpracování zvuku se snižováním zatížení hardwaru. Ovladač adaptéru, který může zpracovávat přesměrované zvukové streamy, musí podporovat vlastnosti v této nové sadě vlastností.

Sada vlastností KSPROPSETID_AudioEngine je definována takto:

#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)

Názvy vlastností v této sadě vlastností jsou definovány ve výčtu KSPROPERTY_AUDIOENGINE, a ovladač musí podporovat tyto názvy.

Tady jsou vlastnosti sady vlastností 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

Požadované vlastnosti v sadě vlastností KSPROPSETID_ Audio

Kromě podpory vlastností v sadě vlastností KSPROPSETID_AudioEngine musí ovladač podporovat také následující existující vlastnosti v sadě vlastností KSPROPSETID_Audio :

KSPROPERTY_AUDIO_MUTE

KSPROPERTY_AUDIO_PEAKMETER2

KSPROPERTY_AUDIO_VOLUMELEVEL

A k dokončení implementace podpory ovladačů pro hardwarově offloadované zpracování zvuku jsou k dispozici vlastnosti pro sadu vlastností KSPROPSETID_ Audio.

KSPROPERTY_AUDIO_LINEAR_BUFFER_POSITION

KSPROPERTY_AUDIO_PRESENTATION_POSITION

KSPROPERTY_AUDIO_WAVERT_CURRENT_WRITE_POSITION

Aktualizace ovladačů třídy portů a hlášení chyb

Kromě podpory popsané v předchozích částech pro zpracování zvuku s hardwarově offloadovaným zatížením poskytuje ovladač třídy portů systému Windows pomocná rozhraní, která usnadňují vývoj ovladače schopného pracovat s offloadovanými zvukovými streamy. A když takový ovladač zjistí závady, existuje mechanismus, který ovladači umožňuje tyto závady nahlásit. Následující témata obsahují další podrobnosti o podpůrných rozhraních a hlášení problémů:

Pomocná rozhraní portcls pro zpracování zvuku s hardwarovým přesměrováním Kromě podpory popsané v předchozích částech pro zpracování zvuku s hardwarovým přesměrováním obsahuje ovladač třídy portů systému Windows také "pomocná rozhraní", aby bylo snadné vyvinout ovladač, který dokáže pracovat se streamy zvuku s hardwarovým přesměrováním. A když takový ovladač zjistí závady, existuje mechanismus, který ovladači umožňuje tyto závady nahlásit. Následující témata obsahují další podrobnosti o podpůrných rozhraních a hlášení problémů:

Objekty pro zpracování zvuku systému Windows Audio Processing Objects