Freigeben über


Hardwareoffladene Audiotreiberimplementierung

Wenn Sie einen Treiber für ausgelagerte Audio implementieren, entwickeln Sie einen Treiber, der ausgelagerte Audiodatenströme verarbeiten kann und diese Fähigkeit dem Windows-Audiosystem bereitstellt.

In diesem Thema werden die Implementierungsdetails für einen Audiotreiber beschrieben, der für einen Audioadapter entwickelt wird, der hardwareoffene Audiodatenströme verarbeiten kann.

In diesen zusätzlichen Themen in diesem Abschnitt werden die Probleme erläutert, die Sie beachten sollten, wenn Sie einen Audiotreiber für einen Audioadapter entwickeln, der ein Hardwareaudiomodul zum Behandeln von entladenen Audiodatenströmen implementiert.

Portcls-Hilfsschnittstellen für ausgelagerte Audiobearbeitung

Glitch-Berichterstellung für offloaded Audio

Hardware offload - KS-Filter-Topologie

Windows unterstützt die Verwendung eines Audioadapters, der ein Hardwareaudiomodul für die Verarbeitung von Audiostreams verwenden kann. Wenn Sie einen solchen Audioadapter entwickeln, muss der zugehörige Audiotreiber diese Tatsache dem Audiosystem für den Benutzermodus auf eine bestimmte Weise verfügbar machen, damit das Audiosystem die Features dieses Adapters und seines Treibers ermitteln, verwenden und ordnungsgemäß verfügbar machen kann.

Diagramm mit einem mit DSP ausgestatteten System, das Effekte in der Hardware implementiert.

Die KSNODETYPE_AUDIO_ENGINE GUID für Knotendeskriptoren

Wenn ein Audioadapter in der Lage ist, ausgeladene Audiodatenströme zu verarbeiten, macht der Audiotreiber des Adapters diese Funktion verfügbar, indem ein Knoten im KS-Filter für den Adapter verwendet wird.

Wenn ein Audioadapter in der Lage ist, ausgelagerte Audiodatenströme zu verarbeiten, macht der Audiotreiber des Adapters diese Funktion verfügbar, indem ein bestimmter Knoten im KS-Filter für den Adapter verwendet wird.

Jeder Knoten im Pfad des Audiodatenstroms verfügt über einen Knotendeskriptor. Für einen Hardware-Offload muss der Treiber die Typ-GUID auf KSNODETYPE_AUDIO_ENGINE festlegen.

Hier ist ein Beispiel dafür, wie der Treiber den Knotendeskriptor für diesen Knoten konfigurieren kann:

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;

Wenn die Namens-GUID auf KSNODETYPE_AUDIO_ENGINE festgelegt ist, müssen Sie eine Standardnamenzeichenfolge für diesen Knoten erstellen. Anschließend fügen Sie diese Zeichenfolge zu ks.inf hinzu, damit die Zeichenfolge während der Installation des Treibers zum Auffüllen des MediaCategories-Registrierungsschlüssels verwendet werden kann.

Die Definition der GUID für den Knotentyp KSNODETYPE_AUDIO_ENGINE lautet wie folgt:

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)

Weitere Informationen finden Sie in der Headerdatei "ksmedia.h ".

Und basierend auf den vorstehenden Informationen könnte ein Deskriptor für einen Miniportknoten wie folgt aussehen:

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

Der KSPROPSETID_AudioEngine KS-Eigenschaftssatz für Audio-Engines

Der KSPROPSETID_AudioEngine Eigenschaftensatz wird verwendet, um Hardwareaudiomodule und hardwarebelastete Audioverarbeitung zu unterstützen. Daher muss der Treiber für einen Adapter, der ausgeladene Audiodatenströme verarbeiten kann, die Eigenschaften in diesem neuen Eigenschaftensatz unterstützen.

Der Eigenschaftensatz KSPROPSETID_AudioEngine wird wie folgt definiert:

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

Die Namen der Eigenschaften in diesem Eigenschaftensatz werden in der KSPROPERTY_AUDIOENGINE Enumeration definiert, und der Treiber muss diese Namen unterstützen.

Im Folgenden sind die Eigenschaften im eigenschaftensatz KSPROPSETID_AudioEngine aufgeführt:

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

Erforderliche Eigenschaften im KSPROPSETID_ Audio-Eigenschaftensatz

Zusätzlich zur Unterstützung der Eigenschaften im KSPROPSETID_AudioEngine Eigenschaftensatz muss der Treiber auch die folgenden vorhandenen Eigenschaften im KSPROPSETID_Audio Eigenschaftensatz unterstützen:

KSPROPERTY_AUDIO_MUTE

KSPROPERTY_AUDIO_PEAKMETER2

KSPROPERTY_AUDIO_VOLUMELEVEL

Um die Implementierung der Treiberunterstützung für die hardwareoffene Audioverarbeitung abzuschließen, stehen eigenschaften für den KSPROPSETID_ Audio-Eigenschaftensatz zur Verfügung.

KSPROPERTY_AUDIO_LINEAR_BUFFER_POSITION

KSPROPERTY_AUDIO_PRESENTATION_POSITION

KSPROPERTY_AUDIO_WAVERT_CURRENT_WRITE_POSITION

Portklassentreiberupdates und Glitch-Berichte

Zusätzlich zu der in den vorherigen Abschnitten beschriebenen Unterstützung für die hardwareunterstützte Audioverarbeitung stellt der Windows-Portklassentreiber "Hilfsschnittstellen" bereit, um die Entwicklung eines Treibers zu vereinfachen, der mit ausgelagerten Audiostreams arbeiten kann. Und wenn ein solcher Treiber Störungen erkennt, gibt es einen Mechanismus, mit dem der Treiber die Fehler melden kann. Die folgenden Themen enthalten weitere Details zu den Hilfsschnittstellen und Glitch-Berichten:

Portcls-Hilfsschnittstellen für ausgelagerte Audioverarbeitung Zusätzlich zur Unterstützung, die in den vorherigen Abschnitten für die hardware-ausgelagerte Audioverarbeitung beschrieben worden ist, enthält der Windows-Portklassentreiber auch "Hilfsschnittstellen", um die Entwicklung eines Treibers zu vereinfachen, der mit ausgelagerten Audiostreams arbeiten kann. Und wenn ein solcher Treiber Störungen erkennt, gibt es einen Mechanismus, mit dem der Treiber die Fehler melden kann. Die folgenden Themen enthalten weitere Details zu den Hilfsschnittstellen und Glitch-Berichten:

Windows-Audioverarbeitungsobjekte