コンポジション空間でビデオの四角形を配置および移動する
[このページに関連付けられている機能 DirectShow は、従来の機能です。 MediaPlayer、IMFMediaEngine、および Media Foundation のオーディオ/ビデオ キャプチャに置き換わりました。 これらの機能は、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能であれば、DirectShow ではなく Media Foundation で MediaPlayer、IMFMediaEngine、Audio/Video Capture を使用することを強くお勧めします。 Microsoft は、従来の API を使用する既存のコードを、可能であれば新しい API を使用するように書き直すよう提案しています。]
VMR は、複数の入力ストリームを混在させると、"コンポジション空間" と呼ばれる正規化された四角形内に各ストリームを配置します。コンポジション空間内では、座標 (0.0, 0.0) から (1.0, 1.0) が表示されるビデオの四角形を形成します。 この四角形の外側にある座標はすべてクリップされます。
アプリケーションでは、入力ストリームの合成空間内の変換先の四角形を変更することで、入力ストリームからビデオを移動、ストレッチ、縮小する特殊効果を実行できます。 指定した四角形のサイズがネイティブ ビデオの四角形とは異なる場合、ネイティブ ビデオは縮小されるか、収まるように拡大されます。 変換先の四角形は、 IVMRMixerControl::SetOutputRect メソッドを呼び出すことによって指定します。
たとえば、ストリーム 0 (ピン 0 に対応) にメインビデオ ストリームが含まれており、ストリーム 1 (ピン 1 に対応) にセカンダリ ビデオが含まれているとします。 ストリーム 1 は、 { -1.0f, 0.0f, 0.0f, 1.0f } の正規化された四角形を指定することで、完全にオフスクリーンに配置できます。 次に、 SetOutputRect への連続する呼び出しで四角形の左右の辺を変更することで、ストリーム 1 を表示領域に移動できます。
Label | 値 |
---|---|
Time | Rectangle |
t + 0 | { -1.0f, 0.0f, 0.0f, 1.0f } |
t + 1 | { -0.9f, 0.0f, 0.1f, 1.0f } |
t + 2 | { -0.8f, 0.0f, 0.2f, 1.0f } |
... | ... |
t + 10 | { 0.0f, 0.0f, 1.0f, 1.0f } |
時刻 t+10 では、ストリーム 1 のビデオが完全に表示されます。 この例では、ストリーム 1 のネイティブ サイズは移動中に維持されていました。 また、四角形を拡大または縮小して、興味深い効果を生み出すこともできます。 ビデオを垂直方向に反転することもできます。一番下よりも上に大きい値を指定するか、右よりも左に大きい値を指定してビデオを水平方向にミラーします。
関連トピック