EVR Media Type Negotiation
[Komponenten som beskrivs på den här sidan, Enhanced Video Renderer, är en äldre funktion. Det har ersatts av Simple Video Renderer (SVR) exponeras via MediaPlayer och IMFMediaEngine komponenter. Om du vill spela upp videoinnehåll bör du skicka data till någon av dessa komponenter och låta dem instansiera den nya videoåtergivningen. Dessa komponenter har optimerats för Windows 10 och Windows 11. Microsoft rekommenderar starkt att ny kod använder MediaPlayer eller den lägre nivån IMFMediaEngine API:er för att spela upp videomedier i Windows i stället för EVR när det är möjligt. Microsoft föreslår att befintlig kod som använder äldre API:er skrivs om för att använda de nya API:erna om möjligt.]
Det här avsnittet beskriver hur den förbättrade videoåtergivningen (EVR) validerar medietyper.
För DirectShow EVR-filtret skriver du förhandling när filtrets stift är anslutna.
För EVR-mediemottagaren anges medietyperna via IMFMediaTypeHandler gränssnitt på strömmottagare. Vanligtvis förhandlar topologiinläsaren om medietyperna, även om programmet också kan ange medietyperna direkt.
EVR rapporterar inga önskade medietyper. Klienten måste testa medietyper tills den hittar en acceptabel typ. Medietypen för referensströmmen måste anges innan typerna kan ställas in på någon av underströmmen.
För referensströmmen hämtar EVR-mixern en lista över kompatibla DX-målformat för DirectX Video Acceleration (DXVA). EVR-presentatören använder den här listan för att välja formatet för Direct3D-växlingskedjan. Om det inte går att hitta något kompatibelt målformat för återgivning avvisar EVR medietypen.
För underströmmen frågar EVR-mixern om DXVA-enheten stöder det underströmsformatet i kombination med det återgivningsmålformat som valdes för referensströmmen. Därför kan de tillgängliga underströmsformaten ändras beroende på referensströmmen.
Här är processen i detalj. Den här informationen är inte viktig för de flesta program, men kan vara till hjälp om du skriver en anpassad mixer eller presentatör.
För referensströmmen sker förhandling på följande sätt:
EVR anropar IMFTransform::SetInputType på mixern.
Mixern konverterar medietypen till en DXVA 2.0-beskrivning med hjälp av DXVA2_VideoDesc struktur.
Mixern anropar IDirectXVideoProcessorService::GetVideoProcessorDeviceGuids för att hämta en lista över GUID för videoprocessorer.
För varje GUID för videoprocessor anropar mixern IDirectXVideoProcessorService::GetVideoProcessorRenderTargets för att hämta målformaten för återgivning som stöds.
EVR anropar IMFVideoPresenter::P rocessMessage på presentatören med MFVP_MESSAGE_INVALIDATEMEDIATYPE-meddelandet. Det här meddelandet gör att presentatören väljer ett nytt format.
Presentatören anropar IMFTransform::GetOutputAvailableType för att hämta en lista över tillgängliga utdataformat från mixern. Mixern genererar den här listan från de format som hämtas i steg 4.
Presentatören väljer ett format och anropar IMFTransform::SetOutputType på mixern.
För underströmmar är processen enklare:
EVR anropar IMFTransform::SetInputType på mixern.
Mixern anropar IDirectXVideoProcessorService::GetVideoProcessorSubStreamFormats för att hämta en lista över tillgängliga underströmsformat.
Om det föreslagna formatet finns i den här listan accepterar EVR indatatypen.
Relaterade ämnen