In-Place zpracování
[Funkce přidružená k této stránce DirectShow je starší funkce. Byla nahrazena MediaPlayer, MMFMediaEnginea Audio/Video Capture v Media Foundation. Tyto funkce jsou optimalizované pro Windows 10 a Windows 11. Microsoft důrazně doporučuje, aby nový kód používal MediaPlayer, MMFMediaEngine a Audio/Video Capture v Media Foundation místo DirectShow, pokud je to možné. Microsoft navrhuje, aby se stávající kód, který používá starší rozhraní API, přepsal, aby se nová rozhraní API používala, pokud je to možné.]
Určité transformace dat je možné provést přímo úpravou dat. Tomu se říká zpracování na místě. Mnoho zvukových a video efektů lze tímto způsobem provést. Pokud DMO podporuje místní zpracování, zpřístupní rozhraní IMediaObjectInPlace. Místní zpracování je obecně efektivnější než použití samostatných vyrovnávacích pamětí pro výstup. (Jednou z hlavních výjimek je, když se vyrovnávací paměť nachází v paměti videa. V takovém případě jsou operace čtení mnohem pomalejší než operace zápisu, takže místní zpracování se nedoporučuje.)
Aby bylo možné zpracovávat data na místě, klient provede jedno volání metody IMediaObjectInPlace::Process, nikoli samostatná volání metod ProcessInput a ProcessOutput. Metoda Process je synchronní; veškeré zpracování probíhá uvnitř volání. Místní zpracování také nepoužívá objekty IMediaBuffer. Metoda Process přebírá ukazatel přímo do vyrovnávací paměti.
Objekt DMO, který podporuje místní zpracování, musí stále implementovat rozhraní IMediaObject, včetně metod ProcessInput a ProcessOutput. Klient si může zvolit, jestli se má použít místní zpracování, nebo použít samostatné vyrovnávací paměti. Tyto dva typy zpracování však nekombinujte. Pokud voláte Process, nevolejte ProcessInput nebo ProcessOutputa naopak.
Ocas efektu
Místní DMO může vytvořit další výstup poté, co se vstup zastaví. To se nazývá efekt tail. Efekt dozvuku například pokračuje i poté, co vstup dosáhne ticha. Pokud je zde stopa efektu, metoda Process vrátí S_FALSE. Jakmile aplikace zpracuje všechna data, může vygenerovat efekt tail odesláním prázdných vyrovnávacích pamětí do metody Process.
Související témata