產生略過的宏區塊

在 DirectX VA 中產生略過的宏區塊與 MPEG-2 影片 7.6.6 節有些不同。 在 DirectX VA 略過的宏區塊中,會在個別的 macroblock 控制項命令中產生,而不是從上述非skid 宏區塊的類型推斷,以及例如在 MPEG-2 中顯示 (的圖片類型,產生略過宏區塊的方法取決於圖片是 P 圖片 還是 B picture.)

產生和使用略過宏區塊時,需要下列條件:

  • 略過宏區塊沒有剩餘的差異。

  • 您可以重複使用遞增 wMBaddress的宏區塊控制項命令作業來產生略過宏區塊。 (除了遞增 wMBaddress.)

  • 宏區塊略過會限制為圖片中宏區塊的新資料列。 (必須傳送個別的 macroblock 控制項命令,以產生 macroblocks.) 每個資料列的第一個宏區塊

  • 具有 MBskipsFollowing 非零值的宏區塊控制項命令內容相當於 (除了 MBskipsFollowing) 值以外,與略過之宏區塊系列第一個明確規格的內容相同。 因此,每當MBskipsFollowing不是零時,下列結構成員和變數都必須等於零:Motion4MV、IntraMacroblock、wPatternCodewPC_Overflow

由於前三個前三個條件,當 Motion4MV 為零) 時,快速鍵可能會實作動作補償 (,方法是將指定的動作向量套用至寬度等於亮度元件中下列運算式的矩形,以及與 chrominance 元件中類似的指定矩形。 這個矩形區域動作補償方法可由快速鍵執行,而不是使用相同宏區塊控制作業的 MBskipsFollowing+1 重複。

(bMacroblockWidthMinus1+1) X (MBskipsFollowing+1)

bMacroblockWidthMinus1成員包含在DXVA_PictureParameters中。 MBskipsFollowing變數位於每個宏區塊控制項結構的wMBtype成員中。

H.263 中的略過宏區塊 (附錄 F)

在 H.263 中使用進階預測模式的略過宏區塊產生, (附錄 F) ,需要在 DirectX VA 宏區塊控制命令中將某些略過的宏區塊表示為非已略過的宏區塊。 這是為了在這些宏區塊內產生 OBMC 效果而完成。

在 MPEG-2 範例中產生略過宏區塊

下列範例示範在產生略過宏區塊時如何使用 macroblock 控制項命令。 為了示範目的,假設在 MPEG-2 位資料流程中,會以下列方式使用七個宏區塊。

宏區塊編號 描述

0

以殘差編碼

1

已略過

2

以殘差編碼

3

已略過

4

已略過

5

已略過

6

以殘差編碼

這七個宏區塊需要產生 (至少) 下表所示的五個 DirectX VA 宏區塊控制項命令。 MBskipsFollowing變數表示略過宏區塊的數目。 wMBaddress成員表示宏區塊的位址。 MBskipsFollowingwMBaddress 包含在 DXVA_MBctrl_P_OffHostIDCT_1DXVA_MBctrl_P_HostResidDiff_1 結構中。 (MBskipsFollowing 變數定義于 dwMB_SNL 結構 member.)

Macroblock 命令 成員值

First

wMBaddress = 0

MBskipsFollowing = 0

Second

wMBaddress = 1

MBskipsFollowing = 0

Third

wMBaddress = 2

MBskipsFollowing = 0

第四個

wMBaddress = 3

MBskipsFollowing = 2

步驟 5

wMBaddress = 6

MBskipsFollowing = 0