VMR での座標マッピング
ここでは、VMR が転送元イメージを最終的な出力イメージにマップする前に、イメージに適用される 5 つの変換を説明する。
- 変換 T(Src) は転送元矩形を転送先矩形にマップする。これらの矩形は、メディア タイプの VIDEOINFOHEADER 構造体または VIDEOINFOHEADER2 構造体の rcSource メンバと rcTarget メンバにより指定される。このマッピングでは、転送元イメージを VMR に渡すときに前処理する。
- 変換 T(Flag) は、メディア サンプルのフラグにより指定されたイメージ操作を実行する。これには、ボブ インターレース フラグに対応するための垂直変換とスケールなどの変換が含まれる。インターレース変換はイメージの高さを 2 倍にし、イメージが奇数フィールドにある場合は、イメージをビデオ ラインの半分に変換することがある。
- 変換 T(AR) は、イメージのアスペクト比に基づき、イメージを矩形ピクセルに合わせる。VIDEOINFOHEADER メディア タイプの場合、アスペクト比はイメージ サイズにより決まる。VIDEOINFOHEADER2 タイプの場合、AMCONTROL_PAD_TO_16x9 フラグまたは AMCONTROL_PAD_TO_4x3 フラグが設定されていない限り、dwPictAspectRatioX フィールドと dwPictAspectRatioY フィールドにより決まる。この変換では、モニタ表示設定がモニタの物理アスペクト比に一致することを想定している。たとえば、ユーザーがアスペクト比 4 × 3 のモニタを持っているが、表示を 1280 × 768 ピクセル (5 × 3) に設定した場合、イメージは正しいアスペクト比にならない。
- 変換 T(Mix) は、IVMRMixerControl メソッドで指定された正規化した矩形を使い、転送先イメージ内にイメージを配置する。正規化した矩形を使うと、転送元ストリームをどのように互いに相対して配置し、スケールするかを設定できる。VMR は、すべての転送元イメージの最大ディメンジョンを計算し、全体の境界矩形内でそれぞれを中央に配置することで、転送先イメージを計算する。境界矩形の角は、(0,0) から (1,1) の範囲に割り当てられる。境界矩形はグラフの実行前に固定され、ストリームが追加されたり削除されても、一定のままである。各ストリームの転送先矩形は (0,0) から (1,1) の範囲外に置いても有効である。正規化した転送先矩形にも、転送先座標の使用セマンティクスを変更するフラグのペアがある。フラグには次の値を指定できる。
- VMRDest_AdjustHeight (0x00000001): 高さは、イメージのアスペクト比を保持するように調整される (さらに、正規化した矩形の中央あたりに配置される)。
- VMRDest_AdjustWidth (0x00000002): 幅は、イメージのアスペクト比を保持するように調整される (さらに、正規化した矩形の中央あたりに配置される)。
- 最後に、ミキシングされたイメージの部分はマッピング T(Dst) により変換できる。T(Dst) は、VMR の IBasicVideo インターフェイスの転送元矩形と転送先矩形により指定される。アロケータ プレゼンタが置き換えられ、IBasicVideo インターフェイスが使われない場合、アプリケーションは IVMRWindowlessControl インターフェイスを実装し、座標を 2D 線形空間にマップする必要がある。DVD ナビゲータに返されるマウス座標もこの空間に置く必要がある。たとえば、アプリケーションがビデオをスピンするキューブにレンダリングした場合、ウィンドウレス制御用のディスプレイ全体が報告され、ディスプレイに相対したマウス座標が返される。
ソース データから最終レンダラへのイメージ変換全体は次のようになる。
T = T(Src)* T(Flag) T(Ar) T(Mix)* T(Dst)*
* は、イメージがこの段階で転送先イメージにクリップできることを示す。これらはすべて疑似変換である点に注意すること。したがって、VMR はこれらの変換を単一の変換にまとめられる。
変換の逆は次のようになる。
因数 T(Src) T(Flag) T(Ar) は転送元解像度に比例する。因数 T(Mix) では、正規化した転送元矩形はアスペクト補正されたイメージに比例する。正規化した転送先矩形は出力解像度に比例する。次の図はこうした関係を示している。