Grundlegendes zum WaveRT-Porttreiber
Der WaveRT-Porttreiber kombiniert die Einfachheit des vorherigen WaveCyclic-Porttreibers mit der hardwarebeschleunigten Leistung des WavePci-Porttreibers.
Der WaveRT-Porttreiber entfällt die Notwendigkeit, Audiodaten kontinuierlich zuzuordnen und zu kopieren, indem er seinem Standard Client (in der Regel die Audio-Engine) direkten Zugriff auf den Datenpuffer bereitstellt. Durch diesen direkten Zugriff entfällt auch die Notwendigkeit, dass der Treiber die Daten im Audiostream bearbeiten muss. Der WaveRT-Porttreiber erfüllt somit die Anforderungen der DMA-Controller (Direct Memory Access), über die einige Audiogeräte verfügen.
Um sich von anderen Wave-Render- und Wave-Capture-Geräten zu unterscheiden, registriert sich der WaveRT-Porttreiber unter KSCATEGORY_REALTIME zusätzlich zu KSCATEGORY_AUDIO, KSCATEGORY_RENDER und KSCATEGORY_CAPTURE. Diese Selbstregistrierung erfolgt während der Installation des Adaptertreibers.
Wenn das Betriebssystem in Windows Vista und höheren Betriebssystemen gestartet und die Audio-Engine initialisiert wird, listet die Audio-Engine die KS-Filter auf, die die Audiogeräte darstellen. Während der Enumeration instanziiert die Audio-Engine die Treiber für die gefundenen Audiogeräte. Dieser Prozess führt zur Erstellung von Filterobjekten für diese Geräte. Für WaveRT-Audiogeräte verfügt das resultierende Filterobjekt über die folgenden Komponenten:
Ein instance des WaveRT-Porttreibers zum Verwalten der generischen Systemfunktionen für den Filter
Ein instance des WaveRT-Miniporttreibers zum Verarbeiten aller hardwarespezifischen Funktionen des Filters
Nachdem das Filterobjekt erstellt wurde, können die Audio-Engine und der WaveRT-Miniporttreiber einen Audiodatenstrom für den erforderlichen Audioverarbeitungstyp öffnen. Zum Vorbereiten des KS-Filters für das Audiorendering (Wiedergabe) führen die Audio-Engine und der WaveRT-Miniporttreiber beispielsweise die folgenden Schritte aus, um einen Wiedergabestream zu öffnen:
Die Audio-Engine öffnet einen Pin am KS-Filter, und der WaveRT-Miniporttreiber erstellt eine instance des Pins. Wenn die Audio-Engine den Pin öffnet, übergibt sie auch das Wellenformat des Streams an den Treiber. Der Treiber verwendet die Wellenformatinformationen, um im nächsten Schritt die richtige Puffergröße auszuwählen.
Die Audio-Engine sendet eine Anforderung an den Miniporttreiber für einen zu erstellenden zyklischen Puffer einer bestimmten Größe. Der Begriff zyklischer Puffer bezieht sich auf die Tatsache, dass das Positionsregister, wenn das Pufferpositionsregister in einem Wiedergabe- oder Aufzeichnungsvorgang das Ende des Puffers erreicht, das Positionsregister automatisch bis zum Anfang des Puffers umschließen kann. Im Gegensatz zum WaveCyclic-Miniporttreiber, der einen zusammenhängenden Block physischen Arbeitsspeichers einrichtt, benötigt der WaveRT-Miniporttreiber keinen Puffer, der im physischen Arbeitsspeicher zusammenhängend ist. Der Treiber verwendet die KSPROPERTY_RTAUDIO_BUFFER-Eigenschaft , um Speicherplatz für den Puffer zuzuweisen. Wenn die Hardware des Audiogeräts nicht aus einem Puffer der angeforderten Größe streamen kann, arbeitet der Treiber innerhalb der Ressourcenbeschränkungen des Audiogeräts, um einen Puffer zu erstellen, der der ursprünglich angeforderten Größe am nächsten ist. Der Treiber ordnet den Puffer dann der DMA-Engine des Audiogeräts zu und macht den Puffer für die Audio-Engine im Benutzermodus zugänglich.
Die Audio-Engine plant, dass ein Thread regelmäßig Audiodaten in den zyklischen Puffer schreibt.
Wenn die Hardware des Audiogeräts keine direkte Unterstützung für zyklische Puffer bietet, wird das Audiogerät vom Miniporttreiber in regelmäßigen Abständen neu bereitgestellt, um denselben Puffer zu verwenden. Wenn die Hardware beispielsweise keine Pufferschleife unterstützt, muss der Treiber die DMA-Adresse jedes Mal wieder auf den Anfang des Puffers festlegen, wenn sie das Ende des Puffers erreicht. Dieses Update kann entweder in einer Interruptdienstroutine (ISR) oder in einem Thread mit hoher Priorität durchgeführt werden.
Die resultierende Konfiguration liefert ein störungsresistentes Audiosignal auf Audiogerätehardware, das entweder zyklische Puffer unterstützt oder mit dem Miniporttreiber arbeitet, um die Hardware regelmäßig zu aktualisieren.
Um einen KS-Filter für die Audioaufnahme (Aufzeichnung) vorzubereiten, führen die Audio-Engine und der WaveRT-Miniporttreiber ähnliche Schritte aus, um einen Aufzeichnungsdatenstrom zu öffnen.
Eine der Leistungsverbesserungen, die der WaveRT-Porttreiber bietet, ist eine Verringerung der Verzögerung bei der End-to-End-Verarbeitung des Audiostreams während des Wave-Renderns oder der Wellenaufnahme. Diese Verzögerung wird als Streamlatenz bezeichnet.
Weitere Informationen zu diesen beiden Arten von Streamlatenz finden Sie in den folgenden Themen.
Informationen zum Entwickeln eines WaveRT-Miniporttreibers, der den WaveRT-Porttreiber ergänzt, finden Sie im Thema Entwickeln eines WaveRT-Miniporttreibers .