非二乗混合
[このページに関連付けられている機能 DirectShow は、従来の機能です。 MediaPlayer、IMFMediaEngine、Media Foundation のオーディオ/ビデオ キャプチャに置き換わりました。 これらの機能は、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能であれば、DirectShow ではなく Media Foundation で MediaPlayer、IMFMediaEngine、Audio/Video Capture を使用することを強くお勧めします。 Microsoft は、レガシ API を使用する既存のコードを、可能であれば新しい API を使用するように書き換えるよう提案しています。]
このトピックは、Windows XP Service Pack 2 以降に適用されます。
VMR-9 が 2 つ以上のストリームを混在させる場合、スケーリングが発生する可能性がある点は 2 つあります。ミキサーが入力ストリームを合成するとき、およびアロケーター 発表者が合成イメージをレンダリングする場合です。
以前のバージョンの VMR-9 では、ビデオ ストリームが 1 つしかない場合でも、常に正方形 (1:1) ピクセル縦横比 (PAR) を使用して入力ストリームが合成されていました。 入力ストリームに正方形以外のピクセルがある場合は、不要なスケーリング操作が発生しました。 もちろん、最終的な画質が低下するため、スケーリングは可能な限り避ける必要があります。
Windows XP Service Pack 2 以降、VMR-9 では、二重スケーリングの問題を回避するための 2 つの異なる方法がサポートされています。
- カスタム アロケーター 発表者を実装し、 IVMRSurfaceAllocatorEx9 インターフェイスを サポートします。
- 非正方形混合モードを使用します。
このセクションでは、非二乗混合モードについて説明します。 アプリケーションでは、両方の手法を組み合わせることができます。
非二乗混合のしくみ
非正方形ミキシング モードでは、VMR-9 はターゲット サイズと PAR として 1 つの入力ストリームを選択します。 VMR のミキサーでは、そのストリームまたは同じイメージ サイズと PAR を持つ他のストリームからのビデオはスケーリングされません。 サイズまたは縦横比が異なるストリームは、ターゲット PAR に合わせてスケーリングされ、最終的な出力イメージ サイズに合わせてレターボックス化されます。
ストリームの選択は、現在のミキシング モードによって異なります。
- YUV ミキシング モードは、ピン 0 の 1 つのビデオ ストリームに制限されます。 (他のピンには、サブピックがある場合や、キャプションストリームが閉じている場合があります。そのため、VMR-9 では、ターゲット イメージ サイズと PAR に対して常にピン 0 が選択されます。
- RGB ミキシング モードでは、VMR は最大のイメージ サイズのストリームを選択します。 複数ある場合は、z オーダーが最も高いものを選択します。また、引き分けがある場合は、最も低いピン番号のストリームを選択します。
操作の例
例 1. Stream 0 は 720 x 480 ピクセルで、画像の縦横比は 16:9 です。 ストリーム 1 は 640 x 480 ピクセルで、画像の縦横比は 4:3 です。
この例では、ストリーム 0 のイメージ サイズが最も大きいので、RGB ミキシング モードまたは YUB ミキシング モードに関係なく、VMR はこのストリームを選択します。 PAR は 32:27 (16:9/ 720:480) です。つまり、正しい 16:9 の画像縦横比を生成するには、この比率で画像を水平方向に拡大する必要があります。
ターゲット PAR と一致させるために、VMR ミキサーはストリーム 1 を逆比 (27:32) でスケーリングし、540 x 480 のイメージになります。 その後、2 つのストリームが 1 つのサーフェスに合成されます。 結果の画像を正しく表示するには、アロケーターの発表者は、画像の縦横比を 16:9 に合わせて水平方向に拡大する必要があります。
例 2. Stream 0 は 720 x 480 ピクセルで、画像の縦横比は 16:9 です。 ストリーム 1 は 1024 x 768 ピクセルで、画像の縦横比は 4:3 です。
VMR-9 で YUV ミキシング モードが使用されている場合は、常にストリーム 0 が選択されます。 したがって、ストリーム1〜540x480ピクセルを延伸し、ストリーム0のPARに一致させる。
VMR-9 が RGB ミキシング モードを使用している場合、そのストリームのイメージ サイズが最も大きいため、ターゲットとしてストリーム 1 が選択されます。 ストリーム 0 を 1024 x 576 ピクセルの画像サイズに拡張します。 この場合、複合イメージの PAR は 1:1 であるため、アロケーター 発表者は 2 乗以外のピクセルを修正する必要はありません。 (ビデオを引き続き拡大して、移動先の四角形を考慮する必要がある場合があります)。
非二乗混合モードの使用
次のいずれかの条件に該当する場合は、非二乗混合モードを使用することをお勧めします。
- アプリケーションが VMR-9 に複数のビデオ ストリームを送信することはありません。
- アプリケーションで DVD、テレビ、または ms-dvr ファイルがレンダリングされます。 グラフィックス ハードウェアでサポートされている場合は、この場合も YUV ミキシング モードを使用する必要があります。
アプリケーションで、さまざまな画像サイズまたはピクセル縦横比を持つ可能性がある複数のビデオ ストリームを混在させる場合は、既定の正方形ミキシング モードをお勧めします。
非正方形ミキシング モードを構成するには、フィルター グラフを停止し、すべての入力ピンを VMR-9 で切断する必要があります。 次に、MixerPref9_NonSquareMixing フラグを指定して IVMRMixerControl9::SetMixingPrefs を呼び出します。
DWORD dwPrefs;
pMixControl->GetMixingPrefs(&dwPrefs);
dwPrefs |= MixerPref9_NonSquareMixing;
pMixControl->SetMixingPrefs(dwPrefs);
注意
MixerPref9_NonSquareMixing フラグと MixerPref9_ARAdjustXorY フラグを組み合わせると、VMR-9 は MixerPref9_ARAdjustXorY フラグを無視します。
アプリケーションで非正方形混合モードのカスタム アロケーター 発表者を使用する場合は、複合イメージに非正方形 PAR が含まれている可能性があることに注意してください。 アロケーター 発表者は、イメージを正方形 (1:1) PAR にスケーリングする必要があります。
静的ビットマップ
IVMRMixerBitmap9 インターフェイスを使用して静的ビットマップをビデオにブレンドする場合は、VMR ミキシング モードの目的で、ビットマップを 2 番目のビデオ ストリームと見なす必要があります。
VMR は、ビットマップをターゲットと同じ PAR を持つものとして扱います。 ターゲットのピクセル縦横比に合わせて調整するようにビットマップはスケーリングされません。 VMR の既定の構成では、ターゲットには 1 対 1 の PAR があり、ほとんどのビットマップに一致します。 非正方形混合モードでは、ターゲットに 2 乗以外のピクセルが含まれる場合があります。 ビットマップが正しく表示されるように、アプリケーションは PAR がターゲット PAR と一致するイメージを提供する必要があります。
関連トピック