Zpracování změn formátu z rendereru videa
[Funkce přidružená k této stránce DirectShow je starší funkce. Byla nahrazena MediaPlayer, IMFMediaEnginea Audio/Video Capture v rámci 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é.]
Tato část popisuje, jak má filtr dekodéru nebo transformační filtr zpracovávat změny formátu z rendereru videa.
filtr vykreslovače videa
Když se starý Video Renderer filtr připojí, vyžaduje formát RGB, který odpovídá formátu zobrazení primárního monitoru. To umožňuje použít GDI pro vykreslování, pokud directDraw není k dispozici. Při spuštění přehrávání může renderer videa přepnout do formátu kompatibilního s DirectDraw. Chcete-li zjistit, zda upstreamový filtr může podporovat nový formát, video renderer volá IPin::QueryAccept na výstupním pinu upstreamového filtru. Pokud upstreamový filtr přijme nový formát, vrátí metoda QueryAccept S_OK. Video Renderer přepne formáty připojením typu média s novým formátem k další ukázce médií vrácené jeho alokátorem. Upstreamový filtr by měl kontrolovat změny formátu voláním IMediaSample::GetMediaType v každé ukázce. Video Renderer může kdykoli během streamování přepínat mezi původním a novým formátem. Po první změně formátu se nevolá QueryAccept. Jakmile nadřazený filtr přijme nový formát, musí být schopný přepnout tam a zpět.
Upstreamový filtr může změnu formátu odmítnout vrácením S_FALSE z QueryAccept. V takovém případě video renderer nadále používá GDI s původním formátem.
Filtr pro renderer video pro míchání
Filtr Video Mixing Renderer (VMR-7 a VMR-9) se připojí k libovolnému formátu podporovanému grafickým hardwarem v systému. VMR-7 vždy používá DirectDraw pro vykreslování a přidělí podkladové plochy DirectDraw, když se nadřazený filtr připojí. VMR-9 vždy používá Direct3D pro vykreslování a alokuje podkladové Direct3D povrchy, když se nadřazený filtr připojí.
Grafický hardware může vyžadovat větší plochu, než je šířka obrázku. V takovém případě VMR požaduje nový formát voláním QueryAccept. Hlásí šířku povrchu v parametru biWidth člena struktury BITMAPINFOHEADER formátu videa. Pokud upstreamový filtr nevrací S_OK z QueryAccept, VMR odmítne formát a pokusí se připojit pomocí dalšího formátu inzerovaného upstreamovým filtrem. VMR připojí typ média s novým formátem k první ukázce médií. Po prvním vzorku zůstane formát konstantní; VMR neprovede změnu formátu, zatímco graf běží.
Vylepšené vykreslování videa (EVR)
EVR vždy používá k vykreslování Direct3D. Pokud je potřeba větší plocha, použije EVR stejný QueryAccept mechanismus jako VMR.
Související témata