ビデオ品質管理
このトピックでは、Microsoft Media Foundation と Microsoft DirectShow の両方について、Windows 7 のビデオ パイプラインのいくつかの機能強化について説明します。
完璧な世界では、ビデオの解像度や CPU/GPU の負荷に関係なく、ビデオが障害になることはありません。 実際には、もちろん、ビデオ パイプラインは有限のハードウェア リソースに対応でき、システム環境に合わせてアダプティブに再生を調整する必要があります。 ビデオ品質管理の目標は次のとおりです。
- グリッチ (ドロップまたは遅延フレーム) を減らします。
- 特に GPU のメモリ使用量を減らします。
- 特にバッテリ電源で動作するラップトップでは、消費電力を削減します。
- リソースの制約に応じ、可能な限り最高の画質を取得します。
- ビデオをオーディオと同期します。
これらの目標の一部は、特にローエンド システムでは反対です。 一般的に、速度と品質の間にはトレードオフがあります。 グリッチは、視覚的品質の中程度の低下よりも不快です。 消費電力の相対的な重要性は環境によって異なります。バッテリー電源で動作しているラップトップでは、それは非常に重要です。
Windows 7 では、強化されたビデオ レンダラー (EVR) によるビデオ品質管理のサポートが強化されています。 Media Foundation パイプラインとDirectShow パイプラインの両方が更新され、これらの機能を利用できるようになりました。 2 つのアプローチが使用されます。
- 再生が開始される前に、ユーザーの電源管理設定とハードウェアに関する情報に基づいて、パイプラインで静的な最適化を実行できます。
- 再生が開始されると、パイプラインは実行時のパフォーマンスに基づいて動的最適化を適用できます。
メディア財団の品質管理
静的最適化を有効にするには、トポロジを解決する前に、部分トポロジに MF_TOPOLOGY_STATIC_PLAYBACK_OPTIMIZATIONS 属性を設定します。 トポロジ ローダーは、 IMFTopoLoader::Load メソッドでこの属性を照会します。
静的最適化を有効にする場合は、トポロジで他の 2 つの属性を設定する必要があります。
属性 | 説明 |
---|---|
MF_TOPOLOGY_PLAYBACK_MAX_DIMS |
ビデオ再生ウィンドウの最大サイズを指定します。 |
MF_TOPOLOGY_PLAYBACK_FRAMERATE |
モニターのリフレッシュ レートを指定します。 |
これら 2 つの属性は、パイプラインが品質管理に最も効果的な設定を計算するのに役立ちます。
動的最適化は、品質マネージャーによって実行されます。 品質マネージャーを有効にするために何もする必要はありません。自動的に有効になります。 品質マネージャーは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 フラグを指定します。
Note
DirectShowの静的最適化は DVD 再生に制限されます。
EVRの品質管理
EVR では、品質管理のためにいくつかの新しい構成フラグがサポートされています。 前述の品質管理の最適化を有効にした場合、これらのフラグを直接設定する必要はありません。 ただし、EVR をよりきめ細かく制御する必要があるアプリケーションに関して文書化されています。
IMFVideoMixerControl2::SetMixingPrefs メソッドを呼び出して、EVR ミキサーに次のフラグを設定します。
Flags | 説明 |
---|---|
|
インターレースされたすべてのフレームの 2 番目のフィールドをスキップします。 |
|
ドライバーが高品質のインターレース解除モードをサポートしている場合でも、bob のインターレース解除を使用します。 |
IMFVideoDisplayControl::SetRenderingPrefs メソッドを呼び出して、EVR 発表者に次のフラグを設定します。
Flags | 説明 |
---|---|
|
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
再生を開始する前に、 IMFVideoMixerControl2 メソッドと IMFVideoDisplayControl メソッドを呼び出す代わりに、EVR メディア シンクでこれらの属性を直接設定できます。 これらの属性を設定するには、 IMFAttributes の EVR メディア シンクに対してクエリを実行します。
関連トピック