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