次の方法で共有


ビデオ品質管理

このトピックでは、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 アプリケーションでは、IEVRFilterConfigEx::SetConfigPrefs メソッドを EVR フィルターで直接呼び出すことによって、動的最適化を有効にすることができます。 EVRFilterConfigPrefs_EnableQoS フラグを指定します。

手記

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

 

EVR の品質管理

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

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

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

 

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

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

 

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

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

メディア セッション