Videoqualitätsmanagement
In diesem Thema werden einige Verbesserungen 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 niemals glitchen, unabhängig von der Videoauflösung oder der CPU/GPU-Auslastung. In der Realität muss die Videopipeline natürlich in der Lage sein, mit endlichen Hardwareressourcen fertig zu werden, und sie muss die Wiedergabe adaptiv an die Systemumgebung anpassen. Die Ziele für das Videoqualitätsmanagement sind:
- Verringern Sie den Litching (verworfene oder verspätete Frames).
- Verringern Sie die Speicherauslastung, insbesondere in der GPU.
- Reduzieren Sie den Stromverbrauch, insbesondere bei Laptops, die auf Akkubetrieb laufen.
- Erhalten Sie die bestmögliche Bildqualität aufgrund von Ressourceneinschränkungen.
- Halten Sie das Video mit Audio synchronisiert.
Einige dieser Ziele sind im Gegenteil, insbesondere bei Low-End-Systemen. Im Allgemeinen gibt es einen Kompromiss zwischen Geschwindigkeit und Qualität. Litching ist unannehmbarer als moderate Reduzierung der visuellen Qualität. Die relative Bedeutung des Stromverbrauchs variiert je nach Umwelt; in einem Laptop, der auf Akkubetrieb läuft, ist es sehr wichtig.
In Windows 7 bietet der erweiterte Videorenderer (EVR) eine bessere Unterstützung für die Videoqualitätsverwaltung. Sowohl die Media Foundation-Pipeline als auch die DirectShow-Pipeline wurden aktualisiert, um diese Funktionen nutzen zu können. Es wird ein zweistufiger Ansatz verwendet:
- Vor dem Start der Wiedergabe kann die Pipeline statische Optimierungen durchführen, basierend auf den Energieverwaltungseinstellungen des Benutzers und Informationen zur Hardware.
- Nach dem Start der Wiedergabe kann die Pipeline dynamische Optimierungen basierend auf der Laufzeitleistung anwenden.
Qualitätsmanagement in Media Foundation
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 der IMFTopoLoader::Load-Methode ab.
Wenn Sie statische Optimierungen aktivieren, sollten Sie zwei weitere Attribute für die Topologie festlegen:
Attribut | 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, 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; sie wird automatisch aktiviert. Der Qualitätsmanager war in Windows Vista vorhanden; in Windows 7 kann der EVR besser auf Nachrichten des Qualitätsmanagers 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:
Flagge | Beschreibung |
---|---|
AM_DVD_ADAPT_GRAPH | Aktiviert statische Optimierungen. |
AM_DVD_EVR_QOS | Ermöglicht dynamische Optimierungen. |
Andere DirectShow-Anwendungen können dynamische Optimierungen aktivieren, indem sie die IEVRFilterConfigEx::SetConfigPrefs Methode direkt im EVR-Filter aufrufen. Geben Sie das EVRFilterConfigPrefs_EnableQoS Flag an.
Anmerkung
Statische Optimierungen in DirectShow sind auf die DVD-Wiedergabe beschränkt.
Qualitätsmanagement im EVR
Der EVR unterstützt einige neue Konfigurationskennzeichnungen für das Qualitätsmanagement. Wenn Sie die zuvor beschriebenen Qualitätsverwaltungsoptimierungen aktivieren, müssen Sie diese Flags nicht direkt festlegen. Sie werden jedoch für Anwendungen dokumentiert, die eine genauere Kontrolle über das EVR wünschen.
Legen Sie die folgenden Flags für den EVR-Mixer fest, indem Sie die IMFVideoMixerControl2::SetMixingPrefs Methode aufrufen:
Flaggen | Beschreibung |
---|---|
|
Überspringen Sie das zweite Feld jedes verketteten Rahmens. |
|
Verwenden Sie Bob-Deinterlacing, auch wenn der Fahrer einen qualitativ hochwertigen Deinterlace-Modus unterstützt. |
Legen Sie die folgenden Flags für den EVR-Referenten fest, indem Sie die IMFVideoDisplayControl::SetRenderingPrefs Methode aufrufen:
Flaggen | Beschreibung |
---|---|
|
Drosselungsausgabe, um die GPU-Bandbreite abzugleichen. |
|
Batch direct3D Present-Aufrufe. Diese Optimierung ermöglicht es dem System, häufiger in Leerlaufzustände zu gelangen, wodurch der Stromverbrauch reduziert werden kann. |
|
Führen Sie videomixen mit einem Rechteck 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 jedem dieser 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 IMFVideoMixerControl2- und IMFVideoDisplayControl- Methoden. Um diese Attribute festzulegen, fragen Sie die EVR-Mediensenke für IMFAttributesab.
Verwandte Themen