Dela via


Formatera förhandling

När ett program har initierat ljudbearbetning konfigurerar graph builder sAPOs till ett ljuddiagram och initierar även sAPOs. Ljudtjänsten förhandlar sedan med LFX sAPO för att upprätta formatet för ljuddata vid indata och utdata från sAPO. Den här förhandlingsprocessen kallas formatförhandling.

Alla sAPOs som ger ljudsystemeffekter för Windows Vista måste ha vissa gränssnitt och metoder. De metoder som används av sAPO och ljudmotorn för att förhandla om dataformatet är: metoden IsInputFormatSupported i gränssnittet IAudioProcessingObject och metoderna LockForProcess och UnlockForProcess i gränssnittet IAudioProcessingObjectConfiguration .

För att initiera formatförhandling anger ljudtjänsten först utdata från LFX sAPO till standardformatet float32. Ljudtjänsten anropar sedan metoden IAudioProcessingObject::IsInputFormatSupported för LFX sAPO, föreslår standardformatet och övervakar HRESULT-svaret för den här metoden. Om LFX sAPO kan stödja det föreslagna formatet returneras S_OK, tillsammans med en referens till formatet som stöds. Om LFX sAPO inte kan stödja det föreslagna formatet returneras S_FALSE tillsammans med en referens till ett format som är närmast det föreslagna formatet. Om LFX sAPO inte stöder det föreslagna formatet, och inte finner någon nära matchning, returneras APOERR_FORMAT_NOT_SUPPORTED. GFX sAPO fungerar med utdataformatet för LFX sAPO. Så GFX sAPO är inte involverad i formatförhandlingsprocessen.

När ett dataformat har valts för att bearbeta ljuddata anropar diagramverktyget för ljudbearbetning metoden IAudioProcessingObjectConfiguration::LockForProcess för sAPOs, vilket gör att formatvalet slutförs.

Om Windows Vista sAPO returnerar ett fel till det omslutande anpassade sAPO som svar på ett anrop till Metoden LockForProcess, måste det anpassade sAPO hantera felet på samma sätt som det hanterar ett fel från CoCreateInstance när ett försök att instansiera ett sAPO misslyckas. Mer information om hur du skriver över den systemspecifika Metoden LockForProcess finns i filen Spkrfill.cpp.

På grund av hur ljudtjänsten fungerar måste LFX- och GFX-sAPOs kunna svara oberoende av varandra på frågor från ljudtjänsten om dataformat.

Viktig När du implementerar en anpassad sAPO som omsluter en Windows Vista LFX-sAPO anger du inte flaggan APO_FLAG_FRAMESPERSECOND_MUST_MATCH i registreringsegenskaperna för den anpassade sAPO:en. Om du anger den här flaggan kommer Windows Vista LFX sAPO inte att kunna utföra talarfyllning, hörlursvirtualisering eller virtuell surround. Dessutom kommer din anpassade sAPO inte att kunna downmixa några ljudströmmar. Din anpassade sAPO kan till exempel inte blanda en 5.1-ljudström ned till en stereoljudström med två kanaler.