ビデオ品質管理

このトピックでは、Microsoft Media Foundation と Microsoft DirectShow の両方について、Windows 7 のビデオ パイプラインの機能強化について説明します。

完璧な世界では、ビデオの解像度や CPU/GPU の負荷に関係なく、ビデオがグリッチになることはありません。 実際には、もちろん、ビデオ パイプラインは有限のハードウェア リソースに対応できる必要があり、システム環境に合わせてアダプティブに再生を調整する必要があります。 ビデオ品質管理の目標は次のとおりです。

  • グリッチ (ドロップまたは遅延フレーム) を減らします。
  • 特に GPU でのメモリ使用量を削減します。
  • 特にバッテリー電源で動作するラップトップでは、消費電力を削減します。
  • リソースの制約に応じ、可能な限り最高の画質を実現します。
  • オーディオとビデオの同期を維持します。

これらの目標の一部は、特にローエンド システムでは反対です。 一般に、速度と品質の間にはトレードオフがあります。 グリッチは、ビジュアル品質の中程度の低下よりも不快です。 電力消費の相対的な重要性は環境によって異なります。バッテリー電源で動作しているラップトップでは、それは非常に重要です。

Windows 7 では、強化されたビデオ レンダラー (EVR) がビデオ品質管理をより適切にサポートしています。 これらの機能を利用するために、Media Foundation パイプラインと DirectShow パイプラインの両方が更新されました。 2 つのアプローチが使用されます。

  • 再生を開始する前に、ユーザーの電源管理設定とハードウェアに関する情報に基づいて、パイプラインで静的最適化を実行できます。
  • 再生が開始された後、パイプラインは実行時のパフォーマンスに基づいて動的最適化を適用できます。

Media Foundation の品質管理

静的最適化を有効にするには、トポロジを解決する前に、部分トポロジで 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 フラグを指定します。

注意

DirectShow での静的最適化は、DVD 再生に制限されます。

 

EVR の品質管理

EVR では、品質管理用のいくつかの新しい構成フラグがサポートされています。 前述の品質管理の最適化を有効にした場合、これらのフラグを直接設定する必要はありません。 ただし、EVR をよりきめ細かく制御する必要があるアプリケーションについては、文書化されています。

IMFVideoMixerControl2::SetMixingPrefs メソッドを呼び出して、EVR ミキサーに次のフラグを設定します。

Flags Description
  • MFVideoMixPrefs_ForceHalfInterlace
  • MFVideoMixPrefs_AllowDropToHalfInterlace
すべてのインターレース フレームの 2 番目のフィールドをスキップします。
  • MFVideoMixPrefs_AllowDropToBob
  • MFVideoMixPrefs_ForceBob
ドライバーが高品質のインターレース 解除モードをサポートしている場合でも、bob deinterlacing を使用します。

 

IMFVideoDisplayControl::SetRenderingPrefs メソッドを呼び出して、EVR 発表者に次のフラグを設定します。

Flags Description
  • MFVideoRenderPrefs_ForceOutputThrottling
  • MFVideoRenderPrefs_AllowOutputThrottling
GPU 帯域幅に合わせて出力を調整します。
  • MFVideoRenderPrefs_ForceBatching
  • MFVideoRenderPrefs_AllowBatching
Batch Direct3D Present の呼び出し。 この最適化により、システムはより頻繁にアイドル状態に入り、消費電力を削減できます。
  • MFVideoRenderPrefs_ForceScaling
  • MFVideoRenderPrefs_AllowScaling
出力四角形より小さい四角形を使用して、ビデオの混合を実行します。 結果を正しい出力サイズにスケーリングします。

 

さらに、EVR メディア シンクでは、次の各フラグに対応する構成属性がサポートされています。

再生を開始する前に、 IMFVideoMixerControl2 メソッドと IMFVideoDisplayControl メソッドを呼び出す代わりに、これらの属性を EVR メディア シンクに直接設定できます。 これらの属性を設定するには、 IMFAttributes の EVR メディア シンクに対してクエリを実行します。

メディア セッション