VMR 中的座標對應
[與此頁面相關聯的功能,DirectShow是舊版功能。 它已被 MediaPlayer、imfMediaEngine 取代,並在媒體基金會 音訊/視訊擷取。 這些功能已針對 Windows 10 和 Windows 11 進行優化。 Microsoft強烈建議新程式代碼盡可能在媒體 基礎中使用 MediaPlayer、IMFMediaEngine 和 音訊/視訊擷取,而不是 DirectShow。 Microsoft建議使用舊版 API 的現有程式代碼,盡可能改寫成使用新的 API。]
本節說明 VMR 將 VMR 對應至最終輸出映像之前,套用至來源映像的五個轉換。
- 轉換 T(Src) 將來源矩形對應至目的地矩形。 這些是由媒體類型中 VIDEOINFOHEADER 或 VIDEOINFOHEADER2 結構的成員所指定 rcSource 和 rcTar get。 當來源映像傳遞至 VMR 時,此對應會預先處理。
- 轉換 T(Flag) 會執行媒體範例中旗標所指定的任何影像作。 這些包括轉換,例如垂直轉譯和縮放以容納 bob 交錯旗標。 交錯轉換會將影像高度加倍,如果影像位於奇數位段,則可能會將影像轉譯為視訊線的一半。
- 轉換 T(AR) 會根據影像外觀比例,將影像調整為平方圖元。 針對 VIDEOINFOHEADER 媒體類型,外觀比例取決於影像大小。 針對 VIDEOINFOHEADER2 類型,外觀比例取決於 dwPictAspectRatioX 和 dwPictAspectRatioY 字段,除非設定AMCONTROL_PAD_TO_16x9或AMCONTROL_PAD_TO_4x3旗標。 此轉換假設監視器顯示設定符合監視器的實體外觀比例。 例如,如果使用者具有 4 x 3 外觀比例的監視器,但會將顯示器設定為 1280 x 768 像素(5 x 3),影像就不會有正確的外觀比例。
- 轉換 T(Mix) 轉換會使用 IVMRMixerControl方法中指定的標準化矩形,將影像放置在目的地影像內。 標準化矩形可讓應用程式組織來源數據流的定位方式,並彼此相對縮放。 VMR 會計算所有來源影像的最大維度,並將每個影像置中於整體周框內,以計算目的地映像。 周框的角落會指派範圍 (0,0) 到 (1,1)。 周框會在圖形執行之前修正,即使新增或刪除數據流,仍會維持常數。 每個數據流的目的地矩形可以位於範圍 (0,0) 到 (1,1) 之外,而且仍然有效。
- 最後,混合映像的一部分可以透過 VMR 上 IBasicVideo 介面中的來源和目的地矩形所指定的對應 T(Dst)來轉換。 如果已取代 Allocator-Presenter 且未使用 IBasicVideo 介面,應用程式必須實作 IVMRWindowlessControl 介面,並將座標對應回 2D 線性空間。 傳回 DVD 導覽器的滑鼠座標也必須在此空間中。 例如,如果應用程式將視訊轉譯到旋轉的 Cube 上,則會回報無視窗控件的整個顯示器,並傳回相對於顯示器的滑鼠座標。
從源數據到最終轉譯器的整體影像轉換為:
T = T(Src)* T(Flag)T(Ar)T(Mix)* T(Dst)*
其中 * 表示影像可以在該階段裁剪至目的地映像。 請注意,這些都是仿射轉換,因此 VMR 可以將它們合併成單一轉換。
轉換的反向是:
反向轉換
係數 T(Src) T(Flag) T(Ar) 相對於來源解析度。 在因數 T(Mix)中,正規化來源矩形相對於外觀更正的影像。 標準化目的地矩形相對於輸出解析度。 下圖顯示這些關聯性。
相關主題