Dela via


Videokvalitetshantering

I det här avsnittet beskrivs några förbättringar av videopipelinen i Windows 7, både för Microsoft Media Foundation och Microsoft DirectShow.

I en perfekt värld skulle video aldrig glapp, oavsett videoupplösning eller CPU/GPU-belastning. I verkligheten måste videopipelinen naturligtvis kunna hantera ändliga maskinvaruresurser, och den måste anpassa uppspelningen till systemmiljön. Målen för videokvalitetshantering är att:

  • Minska problem (borttagna eller sena bildrutor).
  • Minska minnesanvändningen, särskilt i GPU:n.
  • Minska strömförbrukningen, särskilt i bärbara datorer som körs på batteridrift.
  • Få bästa möjliga bildkvalitet, givet resursbegränsningar.
  • Håll videon synkroniserad med ljud.

Vissa av dessa mål är motsatta, särskilt när det gäller lågslutssystem. I allmänhet finns det en kompromiss mellan hastighet och kvalitet. Glitching är mer stötande än måttliga minskningar av den visuella kvaliteten. Den relativa betydelsen av energiförbrukning varierar med miljön. i en bärbar dator som körs på batteridrift är det mycket viktigt.

I Windows 7 har den förbättrade videoåtergivningen (EVR) bättre stöd för videokvalitetshantering. Både Media Foundation-pipelinen och DirectShow-pipelinen har uppdaterats för att dra nytta av dessa funktioner. En tvådelad metod används:

  • Innan uppspelningen startar kan pipelinen utföra statiska optimeringar baserat på användarens energisparinställningar och information om maskinvaran.
  • När uppspelningen har startat kan pipelinen tillämpa dynamiska optimeringar baserat på körningsprestanda.

Kvalitetshantering i Media Foundation

Om du vill aktivera statiska optimeringar anger du attributet MF_TOPOLOGY_STATIC_PLAYBACK_OPTIMIZATIONS på den partiella topologin innan du löser topologin. Topologiinläsaren frågar det här attributet i sin IMFTopoLoader::Load-metoden.

Om du aktiverar statiska optimeringar bör du ange två andra attribut på topologin:

Attribut Beskrivning
MF_TOPOLOGY_PLAYBACK_MAX_DIMS
Anger den maximala storleken på videouppspelningsfönstret.
MF_TOPOLOGY_PLAYBACK_FRAMERATE
Anger uppdateringsfrekvensen för övervakaren.

 

Dessa två attribut hjälper pipelinen att beräkna den mest effektiva inställningen för kvalitetshantering.

Dynamiska optimeringar utförs av kvalitetshanteraren. Du behöver inte göra något för att aktivera kvalitetshanteraren. den aktiveras automatiskt. Kvalitetshanteraren fanns i Windows Vista; I Windows 7 kan EVR svara bättre på meddelanden från kvalitetshanteraren.

Kvalitetshantering i DirectShow

DirectShow stöder statiska och dynamiska optimeringar för DVD-uppspelning. Om du vill aktivera dessa optimeringar i ett DVD-uppspelningsprogram anger du följande flaggor i parametern dwFlags för IDvdGraphBuilder::RenderDvdVideoVolume-metoden:

Flagga Beskrivning
AM_DVD_ADAPT_GRAPH Aktiverar statiska optimeringar.
AM_DVD_EVR_QOS Aktiverar dynamiska optimeringar.

 

Andra DirectShow-program kan aktivera dynamiska optimeringar genom att anropa IEVRFilterConfigEx::SetConfigPrefs-metoden direkt i EVR-filtret. Ange flaggan EVRFilterConfigPrefs_EnableQoS.

Not

Statiska optimeringar i DirectShow är begränsade till DVD-uppspelning.

 

Kvalitetshantering i EVR

EVR stöder några nya konfigurationsflaggor för kvalitetshantering. Om du aktiverar kvalitetshanteringsoptimeringarna som beskrevs tidigare behöver du inte ange dessa flaggor direkt. De dokumenteras dock för program som vill ha mer detaljerad kontroll över EVR.

Ange följande flaggor på EVR-mixern genom att anropa metoden IMFVideoMixerControl2::SetMixingPrefs:

Flaggor Beskrivning
  • MFVideoMixPrefs_ForceHalfInterlace
  • MFVideoMixPrefs_AllowDropToHalfInterlace
Hoppa över det andra fältet i varje sammanflätad bildruta.
  • MFVideoMixPrefs_AllowDropToBob
  • MFVideoMixPrefs_ForceBob
Använd bob deinterlacing, även om drivrutinen stöder ett deinterlace-läge av högre kvalitet.

 

Ange följande flaggor på EVR-presentatören genom att anropa metoden IMFVideoDisplayControl::SetRenderingPrefs:

Flaggor Beskrivning
  • MFVideoRenderPrefs_ForceOutputThrottling
  • MFVideoRenderPrefs_AllowOutputThrottling
Begränsa utdata för att matcha GPU-bandbredden.
  • MFVideoRenderPrefs_ForceBatching
  • MFVideoRenderPrefs_AllowBatching
Batch Direct3D Present-anrop. Den här optimeringen gör det möjligt för systemet att gå in i inaktiva tillstånd oftare, vilket kan minska energiförbrukningen.
  • MFVideoRenderPrefs_ForceScaling
  • MFVideoRenderPrefs_AllowScaling
Utför videoblandning med en rektangel som är mindre än utdatarektangeln. Skala resultatet till rätt utdatastorlek.

 

Dessutom stöder EVR-mediemottagaren konfigurationsattribut som motsvarar var och en av dessa flaggor:

Innan uppspelningen startar kan du ange dessa attribut direkt på EVR-mediemottagaren, som ett alternativ till att anropa IMFVideoMixerControl2 och IMFVideoDisplayControl metoder. Om du vill ange dessa attribut frågar du EVR-mediemottagaren efter IMFAttributes.

Media Session