生成已跳过的宏块

DirectX VA 中跳过的宏块的生成与 MPEG-2 视频第 7.6.6 节中的宏块的生成稍有不同。 在 DirectX VA 跳过的宏块中,在单独的宏块控制命令中生成,而不是从上述非斯基宏块的类型和显示的图片类型推断(例如,在 MPEG-2 中,生成跳过的宏块的方法取决于图片是 P 图片还是 B 图片)。

生成和使用跳过的宏块时,需要满足以下条件:

  • 跳过的宏块没有剩余差异。

  • 通过重复使用递增 的 wMBaddress 的宏块控制命令的操作,可以生成跳过的宏块。 (除了递增 wMBaddress 的值外,每个后续跳过的宏块的生成方式与第一个块相同。

  • 宏块跳过被限制为图片中的新宏块行。 (必须发送单独的宏块控制命令,以生成每行宏块的第一个宏块。

  • 具有 MBskipsFollowing 的非零值的宏块控件命令的内容等效(MBskipsFollowing 的值除外)与跳过的宏块系列第一个显式规范的内容相同。 因此,每当 MBskipsFollowing 不为零时,以下结构成员和变量必须全部等于零:Motion4MV、IntraMacroblock、wPatternCode wPC_Overflow

由于前面的前三个条件,加速器可以通过将指定的运动向量应用于宽度等于亮度分量的以下表达式以及色度组件中类似指定的矩形来实现运动补偿(当 Motion4MV 为零时)。 此矩形区域运动补偿方法可由加速器执行,而不是使用相同的 宏块控制操作的 MBskipsFollowing+1 重复执行。

(bMacroblockWidthMinus1+1) X (MBskipsFollowing+1)

bMacroblockWidthMinus1 成员包含在DXVA_PictureParametersMBskipsFollowing 变量位于每个宏块控件结构的 wMBtype 成员中

H.263 中跳过的宏块(附件 F)

在 H.263 中生成具有高级预测模式主动(附件 F)的跳过宏块需要将一些跳过的宏块表示为 DirectX VA 宏块控制命令中的非基宏块。 为此,可以在这些宏块中生成 OBMC 效果。

在 MPEG-2 示例中生成跳过的宏块

以下示例演示如何在生成跳过的宏块时使用宏块控件命令。 出于演示目的,假定在 MPEG-2 位流中使用以下方式使用 7 个宏块。

Macroblock Number 说明

0

使用残差编码

1

已跳过

2

使用残差编码

3

已跳过

4

已跳过

5

已跳过

6

使用残差编码

这七个宏块需要生成(至少)下表所示的五个 DirectX VA 宏块控制命令。 MBskipsFollowing 变量指示跳过的宏块数。 wMBaddress 成员指示宏块的地址。 MBskipsFollowingwMBaddress 包含在DXVA_MBctrl_P_OffHostIDCT_1DXVA_MBctrl_P_HostResidDiff_1结构中。 (The MBskipsFollowing 变量在dwMB_SNL结构成员中定义。

Macroblock 命令 成员值

第一个

wMBaddress = 0

MBskipsFollowing = 0

Second

wMBaddress = 1

MBskipsFollowing = 0

第三个

wMBaddress = 2

MBskipsFollowing = 0

第四

wMBaddress = 3

MBskipsFollowing = 2

第五个

wMBaddress = 6

MBskipsFollowing = 0