共用方式為


視訊轉譯器中的來源和目標矩形

[與此頁面 相關的功能 DirectShow是舊版功能。 它已被 MediaPlayerIMFMediaEngineMedia Foundation 中的音訊/視訊擷取取代。 這些功能已針對Windows 10和Windows 11進行優化。 Microsoft 強烈建議新程式碼盡可能使用 MediaPlayerIMFMediaEngine音訊/視訊擷取 ,而不是 DirectShow。 Microsoft 建議盡可能重寫使用舊版 API 的現有程式碼,以使用新的 API。]

影片媒體類型的VIDEOINFO、VIDEOINFOHEADERVIDEOINFOHEADER2格式結構中有三種大小。 本文說明它們是什麼,以及其運作方式。

首先,這些結構的 bmiHeader 成員中有一個大小。 bmiHeader成員是點陣圖INFOHEADER結構,其本身的寬度和高度成員bmiHeader.biWidthbmiHeader.biHeight

其次,這些結構的 rcSource 成員中有一個矩形;最後,這些結構的 rcTarget 成員中有一個矩形。

假設您有兩個篩選準則 A 和 B,而且這些篩選準則會彼此連線, (左側或上游,以及右側的 B,或具有特定視訊媒體類型的下游) 。

在篩選 A 和 B 之間傳遞的緩衝區大小 (bmiHeader.biWidthbmiHeader.biHeight) 。 篩選 A 應該採用 rcSource 所決定的輸入視訊部分,並延展該視訊以填滿緩衝區的 rcTarget 部分。 要使用的輸入視訊部分是以 rcSource 與篩選 A 和 B 原本連接之媒體類型的 (biWidthbiHeight) 大小為基礎。 如果 rcSource 是空的,篩選 A 會使用其整個輸入視訊。 如果 rcTarget 是空的,篩選 A 會填滿整個輸出緩衝區。

例如,假設篩選 A 正在接收 160 x 120 圖元的視訊資料。 此外,假設篩選 A 已連線至具有下列媒體類型的篩選 B。

  • (biWidthbiHeight) :320、240
  • rcSource: (0、0、0、0)
  • rcTarget: (0、0、0、0)

這表示篩選 A 會以 x 和 y 方向將接收的視訊延展 2,並填滿 320 x 240 輸出緩衝區。

另一個範例是假設篩選 A 正在接收 160 x 120 視訊資料,並連接到具有下列媒體類型的篩選 B。

  • (biWidthbiHeight) :320、240
  • rcSource: (0、0、160、240)
  • rcTarget: (0、0、0、0)

rcSource成員相對於 320、 240 的連線緩衝區大小。 因為指定的 rcSource (0、0、160、240) 是緩衝區的左半部,所以篩選 A 會採用其輸入視訊的左半部,或 (0、0、80、120) 部分,並將視訊延展至 (320、240) (4 的 x 方向, 和 by 2 以 y 方向) 並填滿 320 x 240 輸出緩衝區。

現在假設篩選 A 會呼叫 CBaseAllocator::GetBuffer,而傳回的媒體範例已附加媒體類型,表示篩選 B 想要篩選 A 提供與先前提供的不同大小或類型的視訊。 假設新的媒體類型為:

  • (biWidthbiHeight) :640、480
  • rcSource: (0、0、160、120)
  • rcTarget: (0、0、80、60)

這表示媒體範例具有大小為 640 x 480 的緩衝區。 rcSource成員相對於原始連線媒體類型 (320、240) 與 (640、480) 的新媒體類型不同,因此rcSource會指定要使用輸入視訊的左上角 (25%) 。 輸入視訊的這個部分會放在左上方 (80、60) 圖元的 640 x 480 輸出緩衝區,如 rcTarget (0、0、80、60) 所指定。 因為篩選 A 收到 160 x 120 視訊,所以輸入視訊的左上角是 (80、60) 片段、輸出點陣圖的大小相同,而且不需要縮放。

篩選 A 不會在輸出緩衝區的其他圖元中放置任何資料,而且不會變更這些位。 rcSource成員系結于篩選 A 和 B 之間原始連線媒體類型的biWidthbiHeight而 rcTarget是由媒體範例的新biWidthbiHeight所系結。 在上述範例中, rcSource 無法超出 (0、0、320、240) , rcTarget 無法超出 (0、0、640、480) 的界限。