Videoqualitätsmanagement
In diesem Thema werden einige Verbesserungen an der Videopipeline in Windows 7 beschrieben, sowohl für Microsoft Media Foundation als auch für Microsoft DirectShow.
In einer perfekten Welt würde das Video nie glitchen, unabhängig von der Videoauflösung oder der CPU/GPU-Auslastung. In der Realität muss die Videopipeline natürlich endliche Hardwareressourcen bewältigen können und die Wiedergabe adaptiv an die Systemumgebung anpassen. Die Ziele für das Videoqualitätsmanagement sind:
- Reduzieren Von Störungen (gelöschte oder späte Frames).
- Reduzieren Sie die Arbeitsspeicherauslastung, insbesondere in der GPU.
- Reduzieren Sie den Energieverbrauch, insbesondere bei Laptops, die mit Akkuleistung arbeiten.
- Erhalten Sie die bestmögliche Bildqualität unter Berücksichtigung von Ressourceneinschränkungen.
- Lassen Sie Video mit Audio synchronisiert.
Einige dieser Ziele sind gegensätzlich, insbesondere bei Low-End-Systemen. Im Allgemeinen besteht ein Kompromiss zwischen Geschwindigkeit und Qualität. Glitching ist verwerflicher als moderate Verringerung der visuellen Qualität. Die relative Bedeutung des Energieverbrauchs variiert je nach Umgebung; in einem Laptop, der mit Akkuleistung läuft, ist es sehr wichtig.
In Windows 7 unterstützt der erweiterte Videorenderer (EVR) die Verwaltung der Videoqualität besser. Sowohl die Media Foundation-Pipeline als auch die DirectShow-Pipeline wurden aktualisiert, um diese Funktionen zu nutzen. Es wird ein zweistufiger Ansatz verwendet:
- Bevor die Wiedergabe beginnt, kann die Pipeline statische Optimierungen durchführen, die auf den Energieverwaltungseinstellungen des Benutzers und Informationen zur Hardware basieren.
- Nach dem Start der Wiedergabe kann die Pipeline dynamische Optimierungen basierend auf der Laufzeitleistung anwenden.
Qualitätsmanagement in der Medienstiftung
Um statische Optimierungen zu aktivieren, legen Sie das MF_TOPOLOGY_STATIC_PLAYBACK_OPTIMIZATIONS-Attribut für die partielle Topologie fest, bevor Sie die Topologie auflösen. Das Topologieladeprogramm fragt dieses Attribut in seiner IMFTopoLoader::Load-Methode ab.
Wenn Sie statische Optimierungen aktivieren, sollten Sie zwei weitere Attribute für die Topologie festlegen:
attribute | BESCHREIBUNG |
---|---|
MF_TOPOLOGY_PLAYBACK_MAX_DIMS |
Gibt die maximale Größe des Videowiedergabefensters an. |
MF_TOPOLOGY_PLAYBACK_FRAMERATE |
Gibt die Aktualisierungsrate des Monitors an. |
Diese beiden Attribute helfen der Pipeline dabei, die effektivste Einstellung für das Qualitätsmanagement zu berechnen.
Dynamische Optimierungen werden vom Qualitätsmanager durchgeführt. Sie müssen nichts tun, um den Qualitätsmanager zu ermöglichen; es wird automatisch aktiviert. Der Qualitätsmanager existierte in Windows Vista; In Windows 7 kann evR besser auf Nachrichten vom Qualitätsmanager reagieren.
Qualitätsmanagement in DirectShow
DirectShow unterstützt statische und dynamische Optimierungen für die DVD-Wiedergabe. Um diese Optimierungen in einer DVD-Wiedergabeanwendung zu aktivieren, legen Sie die folgenden Flags im dwFlags-Parameter der IDvdGraphBuilder::RenderDvdVideoVolume-Methode fest:
Flag | Beschreibung |
---|---|
AM_DVD_ADAPT_GRAPH | Aktiviert statische Optimierungen. |
AM_DVD_EVR_QOS | Aktiviert dynamische Optimierungen. |
Andere DirectShow-Anwendungen können dynamische Optimierungen aktivieren, indem sie die IEVRFilterConfigEx::SetConfigPrefs-Methode direkt im EVR-Filter aufrufen. Geben Sie das flag EVRFilterConfigPrefs_EnableQoS an.
Hinweis
Statische Optimierungen in DirectShow sind auf die DVD-Wiedergabe beschränkt.
Qualitätsmanagement im EVR
Der EVR unterstützt einige neue Konfigurationsflags für das Qualitätsmanagement. Wenn Sie die zuvor beschriebenen Qualitätsmanagementoptimierungen aktivieren, müssen Sie diese Flags nicht direkt festlegen. Sie werden jedoch für Anwendungen dokumentiert, die eine präzisere Steuerung des EVR wünschen.
Legen Sie die folgenden Flags für den EVR-Mixer fest, indem Sie die IMFVideoMixerControl2::SetMixingPrefs-Methode aufrufen:
Flags | Beschreibung |
---|---|
|
Überspringen Sie das zweite Feld jedes interlaced frame. |
|
Verwenden Sie bob-Deinterlacing, auch wenn der Treiber einen höherwertigen Deinterlacemodus unterstützt. |
Legen Sie die folgenden Flags für den EVR-Referenten fest, indem Sie die IMFVideoDisplayControl::SetRenderingPrefs-Methode aufrufen:
Flags | Beschreibung |
---|---|
|
Drosseln Sie die Ausgabe, um der GPU-Bandbreite zu entsprechen. |
|
Batch Direct3D Present-Aufrufe. Diese Optimierung ermöglicht es dem System, häufiger in Leerlaufzustände zu wechseln, was den Stromverbrauch reduzieren kann. |
|
Führen Sie die Videomischung mithilfe eines Rechtecks aus, das kleiner als das Ausgaberechteck ist. Skalieren Sie das Ergebnis auf die richtige Ausgabegröße. |
Darüber hinaus unterstützt die EVR-Mediensenke Konfigurationsattribute, die den folgenden Flags entsprechen:
- EVRConfig_AllowBatching
- EVRConfig_AllowDropToBob
- EVRConfig_AllowDropToHalfInterlace
- EVRConfig_AllowScaling
- EVRConfig_AllowDropToThrottle
- EVRConfig_ForceBatching
- EVRConfig_ForceBob
- EVRConfig_ForceHalfInterlace
- EVRConfig_ForceScaling
- EVRConfig_ForceThrottle
Bevor die Wiedergabe beginnt, können Sie diese Attribute direkt auf der EVR-Mediensenke festlegen, als Alternative zum Aufrufen der Methoden IMFVideoMixerControl2 und IMFVideoDisplayControl . Um diese Attribute festzulegen, fragen Sie die EVR-Mediensenke nach IMFAttributes ab.
Zugehörige Themen