Freigeben über


Formataushandlung

Nachdem eine Anwendung die Audioverarbeitung initiiert hat, konfiguriert der Graph-Generator die sAPOs in einem Audiodiagramm und initialisiert auch die sAPOs. Der Audiodienst verhandelt dann mit dem LFX sAPO, um das Format für die Audiodaten an der Eingabe und Ausgabe des sAPO festzulegen. Dieser Aushandlungsprozess wird als Formatverhandlung bezeichnet.

Alle sAPOs, die Audiosystemeeffekte für Windows Vista bereitstellen, müssen über bestimmte Schnittstellen und Methoden verfügen. Die Methoden, die vom sAPO und dem Audiomodul zum Aushandeln des Datenformats verwendet werden, sind: die IsInputFormatSupported-Methode der IAudioProcessingObject-Schnittstelle und die LockForProcess - und UnlockForProcess-Methoden der IAudioProcessingObjectConfiguration-Schnittstelle .

Um die Formataushandlung zu initiieren, legt der Audiodienst zunächst die Ausgabe des LFX sAPO auf das standardmäßige float32-basierte Format fest. Der Audiodienst ruft dann die IAudioProcessingObject::IsInputFormatSupported-Methode des LFX sAPO auf, schlägt das Standardformat vor und überwacht die HRESULT-Antwort dieser Methode. Wenn das LFX sAPO das vorgeschlagene Format unterstützen kann, wird S_OK zurückgegeben, zusammen mit einem Verweis auf das unterstützte Format. Wenn das LFX sAPO das vorgeschlagene Format nicht unterstützen kann, wird S_FALSE zusammen mit einem Verweis auf ein Format zurückgegeben, das dem vorgeschlagenen Format am nächsten entspricht. Wenn das LFX sAPO das vorgeschlagene Format nicht unterstützt und keine enge Übereinstimmung aufweist, wird APOERR_FORMAT_NOT_SUPPORTED zurückgegeben. Der GFX sAPO arbeitet mit dem Ausgabeformat des LFX sAPO zusammen. Daher ist das GFX sAPO nicht am Formataushandlungsprozess beteiligt.

Nachdem ein Datenformat zum Verarbeiten der Audiodaten ausgewählt wurde, ruft der Grafik-Generator für die Audioverarbeitung die IAudioProcessingObjectConfiguration::LockForProcess-Methode der sAPOs auf, wodurch die Formatauswahl abgeschlossen wird.

Wenn der Windows Vista sAPO einen Fehler an das umschließende benutzerdefinierte sAPO als Reaktion auf einen Aufruf der LockForProcess-Methode zurückgibt, muss das benutzerdefinierte sAPO den Fehler auf die gleiche Weise behandeln wie ein Fehler von CoCreateInstance , wenn ein Versuch, ein sAPO zu instanziieren, fehlschlägt. Ausführliche Informationen zum Überschreiben der vom System bereitgestellten LockForProcess-Methode finden Sie in der Spkrfill.cpp Datei.

Aufgrund der Funktionsweise des Audiodiensts müssen die LFX- und GFX-sAPOs unabhängig voneinander auf Abfragen des Audiodiensts in Bezug auf Datenformate reagieren können.

Wichtig Wenn Sie ein benutzerdefiniertes sAPO implementieren, das ein Windows Vista LFX sAPO umschließt, geben Sie nicht das APO_FLAG_FRAMESPERSECOND_MUST_MATCH Flag in den Registrierungseigenschaften des benutzerdefinierten sAPO an. Wenn Sie dieses Kennzeichen angeben, kann das Windows Vista LFX sAPO keine Lautsprecherfüllung, Kopfhörervirtualisierung oder virtuelle Umgebung ausführen. Darüber hinaus kann Ihr benutzerdefiniertes sAPO keine Audiodatenströme abwärts mischen. Ihr benutzerdefiniertes sAPO kann z. B. keinen 5.1-Audio-Stream zu einem Stereo-Stream mit zwei Kanälen heruntermischen.