Hardwareausgelagerte Audiotreiberimplementierung

Wenn Sie einen Treiber für ausgeladene Audiodaten implementieren, entwickeln Sie einen Treiber, der in der Lage ist, ausgeladene Audiodatenströme zu verarbeiten und diese Möglichkeit für das Windows-Audiosystem verfügbar zu machen.

In diesem Thema werden die Implementierungsdetails für einen Audiotreiber vorgestellt, der für einen Audioadapter entwickelt wurde, der hardwareoffene Audiostreams 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 eine Hardwareaudio-Engine für die Verarbeitung von ausgeladenen Audiodatenströmen implementiert.

Portcls-Hilfsschnittstellen für die ausgeladene Audioverarbeitung

Störungsberichterstattung für ausgeladene Audiodaten

Hardwareauslagerung – KS-Filtertopologie

Windows unterstützt die Verwendung eines Audioadapters, der eine integrierte Hardwareaudio-Engine zum Verarbeiten von Audiodatenströmen verwenden kann. Wenn Sie einen solchen Audioadapter entwickeln, muss der zugehörige Audiotreiber diese Tatsache dem Audiosystem im Benutzermodus auf bestimmte Weise zur Verfügung stellen, damit das Audiosystem die Features dieses Adapters und seines Treibers erkennen, verwenden und ordnungsgemäß verfügbar machen kann.

Diagramm eines mit DSP ausgestatteten Systems, das Effekte in 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 er einen Knoten im KS-Filter für den Adapter verwendet.

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

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

Im Folgenden finden Sie ein Beispiel dafür, wie der Treiber den Knotendeskriptor für diesen Knoten konfigurieren könnte:

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 .

Basierend auf den vorherigen 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
    }
};

Die KSPROPSETID_AudioEngine KS-Eigenschaft, die für Audio-Engines festgelegt ist

Der KSPROPSETID_AudioEngine Eigenschaftensatz wird verwendet, um Hardwareaudio-Engines und die hardwareoffene 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 Eigenschaftssatz 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 sind in der KSPROPERTY_AUDIOENGINE Enumeration definiert, und der Treiber muss diese Namen unterstützen.

Dies sind die Eigenschaften im KSPROPSETID_AudioEngine Eigenschaftensatz:

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

Und um die Implementierung der Treiberunterstützung für die hardwareoffene Audioverarbeitung abzuschließen, stehen Eigenschaften für den KSPROPSETID_ Eigenschaftensatz Audio zur Verfügung.

KSPROPERTY_AUDIO_LINEAR_BUFFER_POSITION

KSPROPERTY_AUDIO_PRESENTATION_POSITION

KSPROPERTY_AUDIO_WAVERT_CURRENT_WRITE_POSITION

Portklassentreiberupdates und Fehlerberichte

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

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

Implementierung des hardwareoffenen Audiotreibers

Windows-Audioverarbeitungsobjekte