Sdílet prostřednictvím


Filtr vykreslovacího modulu videa

[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é.]

Filtr Video Rendereru je robustní a univerzální vykreslovač videa.

Poznámka

Ve Windows XP a novějším je výchozí renderer videa Video Mixing Renderer Filter 7 (VMR-7). VMR-7 a Video Renderer mají popisný název "Video Renderer". Na starších platformách je výchozím vykreslovacím modulem Video Renderer. Viz výběr správnéhovykreslovacího modulu .

 

Video Renderer používá DirectDraw a překryvné plochy, pokud je grafická karta podporuje. Správce grafů filtru zveřejňuje rozhraní IVideoWindow, které umožňuje aplikacím nastavit a načíst vlastnosti ve Video Rendereru. Díky novějším grafickým kartám podporuje Renderer vykreslování na celé obrazovce. V opačném případě se Správce grafů filtru automaticky přepne na renderer na celou obrazovku filtr pro režim zobrazení na celé obrazovce. Další informace najdete v tématu IVideoWindow::p ut_FullScreenMode.

  • ! [Důležité]

    Za normálních okolností okno videa tohoto filtru zpracovává zprávy v pracovním vlákně vytvořeném Správcem grafů filtru. Howerver, pokud aplikace přímo vytvoří filtr pomocí CoCreateInstance, okno videa zpracovává zprávy ve vlákně aplikace. V takovém případě musí vlákno aplikace obsahovat smyčku zpráv, která odesílá zprávy do okna videa. Vlákno také nesmí ukončit, dokud konečné vydané verze volání video rendereru, ke kterému dojde při vypnutí Správce grafů filtru. V opačném případě může aplikace dojít k zablokování.

     

Označit Hodnota
Rozhraní filtru IBaseFilter, IBasicVideo, IBasicVideo2, IDirectDrawVideo, IKsPropertySet, IMediaPosition, IMediaSeeking, IQualityControl, IQualProp, IVideoWindow
Typy médií připnutí vstupu Nekomprimované formáty videa.
Rozhraní vstupního pinu IMemInputPin, IOverlay, IPin, IPinConnection, IQualityControl
Typy médií připnutí výstupu Nelze použít.
Rozhraní výstupního připínáčku Nelze použít.
Filtr CLSID CLSID_VideoRenderer
CLSID stránky vlastností Žádná stránka vlastností.
Spustitelný quartz.dll
Merit Windows XP a novější: MERIT_UNLIKELY
kategorie filtru CLSID_LegacyAmFilterCategory

 

Poznámky

V ladicí verzi Quartz.dll, pokud je úroveň ladění LOG_TRACE nastavená na 5 nebo vyšší, zobrazí Video Renderer časové razítka jednotlivých snímků v okně videa. Tato čísla se nezobrazují v maloobchodní verzi knihovny DLL. Další informace naleznete v tématu ladění výstupních funkcí.

Následující poznámky jsou určeny pro vývojáře filtru:

Video Renderer přijímá formáty YUV, pokud grafická karta podporuje překryvné plochy YUV. Při prvním připojení k upstreamovém filtru ale renderer videa vyžaduje formát RGB, který odpovídá barevné hloubkě aktuálního nastavení monitoru. Pokud je například aktuální nastavení zobrazení 24bitová barva, musí být nadřazený filtr schopný poskytnout 24bitové video RGB. Když se graf filtru přepne do stavu spuštění, vyjedná renderer videa změnu dynamického formátu na odpovídající barevný prostor YUV.

Připojením pomocí typu RGB zajistí renderer videa, že může použít GDI v případě, že DirectDraw není k dispozici. Přepne na GDI, pokud jiná aplikace používá paměť videa, pokud obdélník videa straddles dva monitory v systému s více monitory nebo pokud je obdélník videa zcela zakrytý jiným oknem.

Poznámka

Video Mixing Renderer neprovádí tento typ dynamické změny formátu a nevyžaduje typ média RGB, protože nikdy nepoužívá GDI pro vykreslování.

 

Pokud chcete vyjednat změnu formátu, volá Renderer videa IPin::QueryAccept s novým typem média. Pokud upstreamový filtr vrátí S_OK, připojí renderer videa nové médium k další ukázce. Upstreamový filtr by měl volat IMediaSample::GetMediaType pro každou ukázku. Pokud GetMediaType vrátí hodnotu, která nenínull, označuje změnu formátu a nadřazený filtr by měl reagovat přepnutím výstupních typů. (Nepřepínejte typy v metodě QueryAccept.) Upstreamový filtr by měl přijímat alespoň hlavní typy RGB a ideálně by měl podporovat běžné typy YUV. Během streamování může renderer videa přepínat mezi yuV a RGB typy kdykoli a zpět. Renderer videa nepřijímá změny dynamického formátu iniciované nadřazeným filtrem.

Když Video Renderer nakreslí na překryvnou plochu DirectDraw, přidělí jednu vyrovnávací paměť pro vstupní kolík. Pokud se upstreamový filtr pokusí vynutit připojení pomocí více vyrovnávacích pamětí, video renderer nebude moct použít překryvnou plochu.

Filtry DirectShow