宏块控制命令结构的第一部分

泛型宏块控件命令结构的前四个成员始终相同。 下表描述了此结构的第一部分的成员。

成员 说明

wMBaddress

指定当前正在处理的宏块的宏块地址。

wMBtype

指定要处理的宏块的类型。 此成员包含指示是否使用运动补偿来预测宏块的值以及发送哪些类型的残差数据的标志。

dwMB_SNL

包含两个字段 MBskipsFollowing (在上 8 位) 和 MBdataLocation (在低 24 位) 。

MBskipsFollowing 指定要在当前宏块之后生成的跳过的宏块数。

MBdataLocation 是 IDCT 残差块数据缓冲区中的索引,指示当前宏块块的残差数据的位置。

wPatternCode

指示是否为宏块中的每个块发送残差数据。

wMBaddress

wMBaddress 结构成员按光栅扫描顺序指定当前宏块的宏块地址。 下表显示了宏块地址的示例。

宏块 地址

top-left

零个

右上角

wPicWidthInMBminus1

lower-left

wPicHeightInMBminus1 x (wPicWidthInMBminus1+1)

lower-right

(wPicHeightInMBminus1+1) x (wPicWidthInMBminus1+1) - 1

wPicWidthInMBminus1wPicHeightInMBminus1 地址是DXVA_PictureParameters结构的成员。

wMBtype

wMBtype 结构成员指定要处理的宏块的类型。 此成员包含一组位,用于定义宏块和运动向量的处理方式。 bPic4MVallowedbPicScanMethodbPicBackwardPredictionbPicStructurebPicScanFixed 地址是DXVA_PictureParameters结构的成员。 bConfigHostInverseScan 地址是 DXVA_ConfigPictureDecode 结构的成员。

Bits 说明

15 到 12

MvertFieldSel_3 (位 15,这是通过 MvertFieldSel_0 (位 12) 的最有效)

为稍后在宏块控件命令中发送的相应运动向量指定垂直字段选择,如下表所述。 例如,对于帧图片结构 (基于帧的运动,对于 H.261 和 H.263) ,这些位必须全部为零。 MvertFieldSel_0、MvertFieldSel_1、MvertFieldSel_2MvertFieldSel_3 中的位对应于 MPEG-2 第 6.3.17.2 节中的motion_vertical_field_select[r][s] 位。

11

保留位。 必须为零。

10

HostResidDiff

指定是发送空间域残差差解码块,还是为当前宏块的主机外 IDCT 发送转换系数。 如果 bConfigResidDiffHost 为零,则必须为零。 如果 bConfigResidDiffAccelerator 为零,则必须为 1。

9 和 8

MotionType

指定图片中的运动类型。 例如,对于帧图片结构 ((如 H.261) 中所示)的基于帧的运动,位 9 必须为 1,位 8 必须为零。

当这些位存在于 MPEG-2 位流中时,这些位的使用直接对应于 MPEG-2 视频标准第 6.3.17.1 节和表 6-17 和 6-18 中的frame_motion_type或field_motion_type位的使用。 下表进一步介绍了这些位的用法。

7 和 6

MBscanMethod

指定宏块扫描方法。 如果 bPicScanFixed 为 1,则必须等于 bPicScanMethod 。 如果 HostResidDiff 为 1,则此变量没有意义,这些位应设置为零。

如果 bConfigHostInverseScan 为零, 则 MBscanMethod 必须是以下值之一:

  • 对于曲折扫描,第 6 位为零,第 7 位为零, (MPEG-2 图 7-2)

  • 对于交替垂直扫描,位 6 为 1,位 7 为零, (MPEG-2 图 7-3)

  • 对于交替水平扫描,位 6 为零,位 7 为 1 (H.263 图 I.2 第 a 部分)

如果 bConfigHostInverseScan 为 1, MBscanMethod 必须等于以下值:

  • 对于具有绝对系数地址的任意扫描,位 6 为 1,位 7 为 1。

5

FieldResidual

指示残差块是否使用 MPEG-2 中指定的字段 IDCT 结构。

如果 bPicStructure 为 1 或 2,则此标志必须为 1。 如果 MPEG-2 语法中的 frame_pred_frame_DCT 标志为 1,则用于 MPEG-2 时,此标志必须为零。 如果宏块存在 dct_type ,则用于 MPEG-2 时,此标志必须等于 MPEG-2 语法 的 dct_type 元素。

4

H261LoopFilter

指定 H.261 循环筛选器 (H.261) 第 3.2.3 节是否为当前宏块预测处于活动状态。 H.261 循环筛选器是一个可分离的 1/4、1/2、1/4 筛选器,可水平和垂直方式应用于 H.261 宏块中的所有六个块,但块边缘的一个分流器将落在块外。 在这种情况下,筛选器将更改为系数为 0、1、0。 在二维筛选器过程的输出中,将舍入到 8 位整数时保留完整的算术精度, () 舍入半整数或更高值。

3

Motion4MV

指示向前运动对宏块中四个亮度块中的每一个都使用不同的运动矢量,如 H.263 附件 F 和 J 中使用的。如果 MotionForward 为零或 bPic4MVallowed 为零,则 Motion4MV 必须为零。

2

MotionBackward

此变量用于指定 MPEG-2 中相应的 macroblock_motion_backward 参数。 如果 DXVA_PictureParameters 结构的 bPicBackwardPrediction 成员为零, 则 MotionBackward 必须为零。

1

MotionForward

此变量按指定方式用于 MPEG-2 中的相应 macroblock_motion_forward 。 此表后面的文本进一步说明了此位的用法。

0

IntraMacroblock

指示宏块编码为内部,并且没有运动向量用于当前宏块。

此变量对应于 MPEG-2 中的 macroblock_intra 变量。 此表后面的文本进一步说明了此位的用法。

对宏块进行预测编码时,它们具有关联的运动向量值。 根据宏块是用于字段编码图片还是帧编码图片生成值。 对于任何实现来说,必须正确考虑每个已利用的宏块类型 (特别是对于现场结构化图片或双质运动) 。

本节中的以下两个表指示了用于帧编码和字段编码图片的 IntraMacroblockMotionForwardMotionBackwardMotionTypeMvertFieldSelMVector 的有效组合。 MVector 包含运动矢量的水平和垂直部分。 其余变量和标志指定运动向量运算。 这是根据处理的宏块的类型以及宏块是否用于框架编码图片还是字段编码图片来确定的。

下表中显示的值 (本节中) 出现以下情况:

  • H261LoopFilterMotion4MVbPicOBMC 为零。

  • 除非 bPicStructure 为 2 (底部字段) ,否则 PicCurrentField 标志为零。 在本例中, PicCurrentField 为 1。

MVectorDXVA_MBctrl_P_HostResidDiff_1DXVA_MBctrl_P_OffHostIDCT_1 结构的成员。 IntraMacroblockMotionForwardMotionBackwardMotionTypeMvertFieldSelH261LoopFilterMotion4MV 标志和变量是包含在DXVA_MBctrl_P_HostResidDiff_1和DXVA_MBctrl_P_OffHostIDCT_1结构的 wMBtype 成员中的位域。 bPicOBMCDXVA_PictureParameters 结构的成员。 PicCurrentField 标志派生自 DXVA_PictureParameters 的 bPicStructure 成员。

查看本节中的下表时,以下注意事项适用:

  • 在很多地方,MPEG-2 变量名称 PMV 用于指示运动向量的值。 此表示法用于区分 MPEG-2 中定义的 PMV 变量(在帧坐标中)和可能位于字段坐标 (的运动矢量(即半垂直分辨率) )。 在所有情况下, PMV 是指 PMV 的值后 ,由 MPEG-2 视频第 7.6.3.1 节) 中指定的当前运动矢量值 (更新。

  • vector'[2][0] 和 vector'[3][0] 的定义位于 MPEG-2 第 7.6.3.6 节中。 显示的左-移运算指示垂直分量已修改为帧坐标。

  • 在 (0,0,0) 的“无运动”情况下,宏块参数使用零值运动向量模拟正向预测宏块 (0,1,0) 。 (另请参阅 MPEG-2 节 7.6.3.5.)

  • 单引号中 为 MotionType 显示的值是二进制表示形式, (第一个数字用于位 9,第二个数字表示位 8 位) 。

  • 第一个表中的左移运算符仅适用于显示的第二个值。

框架结构化图片

下表显示了当 DXVA_PictureParameters 结构的 bPicStructure 成员等于 3) 时, 框架 结构图片 (元素设置的有效组合。

IntraMacroblock、MotionForward、MotionBackward MotionType (含义取决于图片类型) MVector[0]MvertFieldSel_0 (1st,dir1) MVector[1]MvertFieldSel_1 (1st,dir2) MVector[2]MvertFieldSel_2 (2nd, dir1) MVector[3]MvertFieldSel_3 (2nd,dir2)

1,0,0 (内部)

) 内 (“00”

-

-

-

-

-

-

-

-

0,0,0 (无动作)

“10” (无动作)

0

-

-

-

-

-

-

-

0,1,0

“10” (帧 MC)

PMV[0][0]

-

-

-

-

-

-

-

0,0,1

“10” (帧 MC)

-

-

PMV[0][1]

-

-

-

-

-

0,1,1

“10” (帧 MC)

PMV[0][0]

-

PMV[0][1]

-

-

-

-

-

0,1,0

“01” (字段 MC)

PMV[0][0]

sel[0][0]

-

-

PMV[1][0]

sel[1][0]

-

-

0,0,1

“01” (字段 MC)

-

-

PMV[0][1]

sel[0][1]

-

-

PMV[1][1]

sel[1][1]

0,1,1

“01” (字段 MC)

PMV[0][0]

sel[0][0]

PMV[0][1]

sel[0][1]

PMV[1][0]

sel[1][0]

PMV[1][1]

sel[1][1]

0,1,0

“11” (双质)

PMV[0][0]

0 (顶部)

vector'[2][0][0],

vector'[2][0][1]<<1

1 (底部)

PMV[0][0]

1

vector'[3][0][0],

vector'[3][0][1]<<1

0

现场结构化图片

下表显示了当DXVA_PictureParameters结构的 bPicStructure 成员等于 1 或 2) 时,字段结构化图片 (元素设置的有效组合。

IntraMacroblock、MotionForward、MotionBackward MotionType (含义取决于图片类型) MVector[0]MvertFieldSel_0 (1st,dir1) MVector[1]MvertFieldSel_1 (1st,dir2) MVector[2]MvertFieldSel_2 (2nd, dir1) MVector[3]MvertFieldSel_3 (2nd, dir2)

1,0,0 (内部)

) 内 (“00”

-

-

-

-

-

-

-

-

0,0,0 (无动作)

“01” (无动作)

0

PicCurrentField

-

-

-

-

-

-

0,1,0

“01” (字段 MC)

PMV[0][0]

sel[0][0]

-

-

-

-

-

-

0,0,1

“01” (字段 MC)

-

-

PMV[0][1]

sel[0][1]

-

-

-

-

0,1,1

“01” (字段 MC)

PMV[0][0]

sel[0][0]

PMV[0][1]

sel[0][1]

-

-

-

-

0,1,0

“10” (16x8 MC)

PMV[0][0]

sel[0][0]

-

-

PMV[1][0]

sel[1][0]

-

-

0,0,1

“10” (16x8 MC)

-

-

PMV[0][1]

sel[0][1]

-

-

PMV[1][1]

sel[1][1]

0,1,1

“10” (16x8 MC)

PMV[0][0]

sel[0][0]

PMV[0][1]

sel[0][1]

PMV[1][0]

sel[1][0]

PMV[1][1]

sel[1][1]

0,1,0

“11” (双质)

PMV[0][0]

PicCurrentField

vector'[2][0]

PicCurrentField

-

-

-

-

字段和帧图片的其他有效元素设置

框架结构化图片和现场结构化图片的剩余允许情况如下所示。

说明

H261LoopFilter = 1

bPicOBMC = 0

Motion4MV = 0

指示在 MVector[0] 中发送一个向前运动向量,并且 H.261 循环筛选器对于宏块中的向前预测处于活动状态。

在这种情况下,MotionForward 必须为 1,IntraMacroblockMotionBackward 必须为零。

bPicOBMC = 0

Motion4MV = 1

指示通过 MVector[3] 在 MVector[0] 中发送四个向前运动向 。 在这种情况下,MotionForward 必须为 1,IntraMacroblock 必须为零。

如果 MotionBackward 为 1,则会在 MVector[4] 中发送第五个运动向量进行向后预测。

bPicOBMC = 1

Motion4MV = 0

指示 MVector[0] 中通过 MVector[9] 发送 10 个向前运动向量以指定 OBMC 运动,并且前四个此类运动向量的值都相等。

如果 MotionBackward 为 1,则会发送第 11 个运动向量,以便在 MVector[10] 中向后预测。

bPicOBMC = 1

Motion4MV = 1

指示通过 MVector[9] 在 MVector[9] 中发送 10 个向前运动矢量,以便指定 OBMC 运动,并且前四个此类运动向量的值可能彼此不同。

如果 MotionBackward 为 1,则会发送第 11 个运动向量,以便在 MVector[10] 中向后预测。

注意 对于 MPEG-1、 >>MPEG-2 半样本预测筛选、双向求平均值和双质同相反奇偶校验组合,平均运算符在数学上是相同的 ( (s1+s2+1) 1) 。 H.263 双向平均运算符不会在右移之前添加 +1 的偏移量。 DXVA_PictureParametersbBidirectionalAveragingMode 成员确定使用这些方法中的哪一个。