Gestione qualità video

Questo argomento descrive alcuni miglioramenti alla pipeline video in Windows 7, sia per Microsoft Media Foundation che per Microsoft DirectShow.

In un mondo perfetto, il video non avrebbe mai glitch, indipendentemente dalla risoluzione video o dal carico cpu/GPU. In realtà, naturalmente, la pipeline video deve essere in grado di gestire risorse hardware limitate e deve adattare in modo adattivo la riproduzione all'ambiente di sistema. Gli obiettivi per la gestione della qualità dei video sono:

  • Ridurre l'interruzione (fotogrammi eliminati o in ritardo).
  • Ridurre l'utilizzo della memoria, soprattutto nella GPU.
  • Ridurre il consumo di energia, soprattutto nei portatili in esecuzione con alimentazione a batteria.
  • Ottenere la migliore qualità dell'immagine possibile, in base ai vincoli delle risorse.
  • Mantieni il video sincronizzato con l'audio.

Alcuni di questi obiettivi sono contrari, in particolare nei sistemi di fascia bassa. In genere c'è un compromesso tra velocità e qualità. Glitching è più discutibile rispetto a una riduzione moderata della qualità visiva. L'importanza relativa del consumo energetico varia in base all'ambiente; in un portatile in esecuzione sull'alimentazione a batteria, è molto importante.

In Windows 7, il renderer video avanzato (EVR) offre un supporto migliore per la gestione della qualità dei video. Sia la pipeline di Media Foundation che la pipeline DirectShow sono state aggiornate per sfruttare queste funzionalità. Viene usato un approccio bidirezionale:

  • Prima dell'avvio della riproduzione, la pipeline può eseguire ottimizzazioni statiche, in base alle impostazioni di risparmio energia dell'utente e alle informazioni sull'hardware.
  • Dopo l'avvio della riproduzione, la pipeline può applicare ottimizzazioni dinamiche, in base alle prestazioni di runtime.

Gestione della qualità in Media Foundation

Per abilitare le ottimizzazioni statiche, impostare l'attributo MF_TOPOLOGY_STATIC_PLAYBACK_OPTIMIZATIONS nella topologia parziale prima di risolvere la topologia. Il caricatore della topologia esegue una query su questo attributo nel metodo IMFTopoLoader::Load .

Se si abilitano le ottimizzazioni statiche, è necessario impostare altri due attributi nella topologia:

Attributo Descrizione
MF_TOPOLOGY_PLAYBACK_MAX_DIMS
Specifica le dimensioni massime della finestra di riproduzione video.
MF_TOPOLOGY_PLAYBACK_FRAMERATE
Specifica la frequenza di aggiornamento del monitoraggio.

 

Questi due attributi consentono alla pipeline di calcolare l'impostazione più efficace per la gestione della qualità.

Le ottimizzazioni dinamiche vengono eseguite dal gestore qualità. Non è necessario eseguire alcuna operazione per abilitare il responsabile della qualità; viene abilitata automaticamente. Il gestore qualità esiste in Windows Vista; in Windows 7, EVR può rispondere meglio ai messaggi del manager di qualità.

Gestione della qualità in DirectShow

DirectShow supporta ottimizzazioni statiche e dinamiche per la riproduzione dvd. Per abilitare queste ottimizzazioni in un'applicazione di riproduzione DVD, impostare i flag seguenti nel parametro dwFlags del metodo IConfigurationGraphBuilder::RenderDeviceVideoVolume :

Flag Descrizione
AM_DVD_ADAPT_GRAPH Abilita le ottimizzazioni statiche.
AM_DVD_EVR_QOS Abilita le ottimizzazioni dinamiche.

 

Altre applicazioni DirectShow possono abilitare le ottimizzazioni dinamiche chiamando il metodo IEVRFilterConfigEx::SetConfigPrefs direttamente nel filtro EVR. Specificare il flag EVRFilterConfigPrefs_EnableQoS .

Nota

Le ottimizzazioni statiche in DirectShow sono limitate alla riproduzione dvd.

 

Gestione della qualità in EVR

EVR supporta alcuni nuovi flag di configurazione per la gestione della qualità. Se si abilitano le ottimizzazioni di gestione della qualità descritte in precedenza, non è necessario impostare direttamente questi flag. Tuttavia, sono documentate per le applicazioni che vogliono un controllo più granulare sull'EVR.

Impostare i flag seguenti nel mixer EVR chiamando il metodo IMFVideoMixerControl2::SetMixingPrefs :

Flags Descrizione
  • MFVideoMixPrefs_ForceHalfInterlace
  • MFVideoMixPrefs_AllowDropToHalfInterlace
Ignorare il secondo campo di ogni cornice interlacciata.
  • MFVideoMixPrefs_AllowDropToBob
  • MFVideoMixPrefs_ForceBob
Usare bob deinterlacing, anche se il driver supporta una modalità deinterlace di qualità superiore.

 

Impostare i flag seguenti nel relatore EVR chiamando il metodo IMFVideoDisplayControl::SetRenderingPrefs :

Flags Descrizione
  • MFVideoRenderPrefs_ForceOutputThrottling
  • MFVideoRenderPrefs_AllowOutputThrottling
Limitare l'output in modo che corrisponda alla larghezza di banda della GPU.
  • MFVideoRenderPrefs_ForceBatching
  • MFVideoRenderPrefs_AllowBatching
Chiamate Batch Direct3D Present. Questa ottimizzazione consente al sistema di entrare in stati di inattività più frequentemente, riducendo così il consumo di energia.
  • MFVideoRenderPrefs_ForceScaling
  • MFVideoRenderPrefs_AllowScaling
Eseguire la combinazione di video usando un rettangolo più piccolo del rettangolo di output. Ridimensionare il risultato in base alle dimensioni di output corrette.

 

Inoltre, il sink multimediale EVR supporta gli attributi di configurazione che corrispondono a ognuno di questi flag:

Prima dell'avvio della riproduzione, è possibile impostare questi attributi direttamente sul sink multimediale EVR, in alternativa alla chiamata dei metodi IMFVideoMixerControl2 e IMFVideoDisplayControl . Per impostare questi attributi, eseguire una query sul sink multimediale EVR per IMFAttributes.

Sessione multimediale