影片品質管理
本主題描述 Windows 7 中視訊管線的一些改善,包括適用於 Microsoft Media Foundation 和 Microsoft DirectShow。
在完美的世界中,無論視訊解析度或 CPU/GPU 負載為何,影片永遠不會故障。 當然,在現實中,視訊管線必須能夠應付有限的硬體資源,而且必須根據系統環境調整播放。 影片品質管理的目標是:
- 減少故障(已卸除或晚期框架)。
- 減少記憶體使用量,特別是在 GPU 中。
- 降低耗電量,特別是在電池電力上執行的膝上型計算機。
- 根據資源條件約束,盡可能取得最佳的影像品質。
- 讓視訊與音訊保持同步。
其中一些目標相反,特別是在低端系統上。 一般來說,速度和質量之間有取捨。 問題比視覺質量的適度減少更令人反感。 耗電量的相對重要性會隨著環境而有所不同:在電池電源上執行的膝上型計算機中,它非常重要。
在 Windows 7 中,增強的視訊轉譯器 (EVR) 對影片品質管理有更好的支援。 Media Foundation 管線和 DirectShow 管線都已更新,以利用這些功能。 使用雙管齊下的方法:
- 開始播放之前,管線可以根據用戶的電源管理設定和硬體相關信息來執行靜態優化。
- 播放開始之後,管線可以根據運行時間效能套用動態優化。
媒體基礎的品質管理
若要啟用靜態優化,請先在部分拓撲上設定 MF_TOPOLOGY_STATIC_PLAYBACK_OPTIMIZATIONS 屬性,再解析拓撲。 拓撲載入器會在其 IMFTopoLoader::Load 方法中查詢此屬性。
如果啟用靜態優化,您應該在拓撲上設定另外兩個屬性:
屬性 | 描述 |
---|---|
MF_TOPOLOGY_PLAYBACK_MAX_DIMS |
指定視訊播放視窗的大小上限。 |
MF_TOPOLOGY_PLAYBACK_FRAMERATE |
指定監視器重新整理速率。 |
這兩個屬性可協助管線計算最有效的品質管理設定。
動態優化是由品質管理員執行。 您不需要執行任何動作來啟用品質管理員;它會自動啟用。 品質管理員存在於 Windows Vista 中;在 Windows 7 中,EVR 可以更好地回應來自品質管理員的訊息。
DirectShow 中的品質管理
DirectShow 支援 DVD 播放的靜態和動態優化。 若要在 DVD 播放應用程式中啟用這些優化,請在 IDvdGraphBuilder::RenderDvdVideoVolume 方法的 dwFlags 參數中設定下列旗標:
旗 | 描述 |
---|---|
AM_DVD_ADAPT_GRAPH | 啟用靜態優化。 |
AM_DVD_EVR_QOS | 啟用動態優化。 |
其他 DirectShow 應用程式可以直接在 EVR 篩選條件上呼叫 IEVRFilterConfigEx::SetConfigPrefs 方法來啟用動態優化。 指定 EVRFilterConfigPrefs_EnableQoS 旗標。
注意
DirectShow 中的靜態優化僅限於 DVD 播放。
EVR 中的品質管理
EVR 支援一些用於品質管理的新組態旗標。 如果您啟用先前所述的品質管理優化,則不需要直接設定這些旗標。 不過,系統會針對想要對EVR進行更細微控制的應用程式記錄它們。
呼叫 IMFVideoMixerControl2::SetMixingPrefs 方法,在 EVR 混音器上設定下列旗標:
標誌 | 描述 |
---|---|
|
略過每個交錯式框架的第二個字段。 |
|
即使驅動程式支持高品質 deinterlace 模式,也請使用 bob deinterlacing。 |
呼叫 IMFVideoDisplayControl::SetRenderingPrefs 方法,在 EVR 演示者上設定下列旗標:
標誌 | 描述 |
---|---|
|
節流輸出以符合 GPU 頻寬。 |
|
Batch Direct3D Present 呼叫。 此優化可讓系統更頻繁地進入閑置狀態,以減少耗電量。 |
|
使用小於輸出矩形的矩形執行影片混合。 將結果調整為正確的輸出大小。 |
此外,EVR 媒體接收支持對應至每個旗標的組態屬性:
- EVRConfig_AllowBatching
- EVRConfig_AllowDropToBob
- EVRConfig_AllowDropToHalfInterlace
- EVRConfig_AllowScaling
- EVRConfig_AllowDropToThrottle
- EVRConfig_ForceBatching
- EVRConfig_ForceBob
- EVRConfig_ForceHalfInterlace
- EVRConfig_ForceScaling
- EVRConfig_ForceThrottle
在播放開始之前,您可以直接在 EVR 媒體接收上設定這些屬性,作為呼叫 IMFVideoMixerControl2 和 IMFVideoDisplayControl 方法的替代方法。 若要設定這些屬性,請查詢 IMFAttributes的 EVR 媒體接收。
相關主題