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

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

成员 说明

wMBaddress

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

wMBtype

指定正在处理的宏块的类型。 此成员包含一些标志,该标志指示是否使用运动补偿来预测宏块的值和发送的剩余数据的类型。

dwMB_SNL

包含两个字段, MBskipsFollowing (在) 较低的8位 , (在 低24位) 中的。

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

MBdataLocation 是 IDCT 残留差异块数据缓冲区的索引,指示当前宏块的块的剩余差值数据的位置。

wPatternCode

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

wMBaddress

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

宏块 地址

左上角

右上方

wPicWidthInMBminus1

左下角

wPicHeightInMBminus1 x (wPicWidthInMBminus1+ 1)

右下

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

WPicWidthInMBminus1wPicHeightInMBminus1地址是DXVA_PictureParameters结构的成员。

wMBtype

WMBtype结构成员指定正在处理的宏块类型。 此成员包含一组定义 macroblocks 和运动向量处理方式的位。 BPic4MVallowedbPicScanMethodbPicBackwardPredictionbPicStructurebPicScanFixed地址都是DXVA_PictureParameters结构的成员。 BConfigHostInverseScan地址是DXVA_ConfigPictureDecode结构的成员。

Bits 说明

15到12

MvertFieldSel_3 (位15,) 到 MvertFieldSel_0) (

为稍后在宏块控件命令中发送的相应运动向量指定垂直字段选择,如下表所示。 对于带有帧图片结构的基于帧的运动 (例如,对于261和) ,这些位必须均为零。 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

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

如果在 mpeg-2 位流中存在 MPEG-2 视频标准的6.3.17.1 和表6-17 和6-18,则使用这些位直接对应于使用该 frame_motion_typefield_motion_type 位。 此表后面会进一步说明这些位的使用情况。

7和6

MBscanMethod

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

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

  • 第6位为零,而位7为零(用于中值扫描) (MPEG-2 图 7-2)

  • 第6位为1,第7位为零(对于垂直扫描 7-3 ()为零)

  • 第6位为零,第7位为1,适用于备用水平扫描 (.H 图 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

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

3

Motion4MV

指示对于宏块中的四个亮度块中的每个,forward 运动都使用不同的运动向量,如在 Annexes 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 变量。 此表后面的文本中进一步说明了使用此位。

如果 macroblocks 是预先编码的,则它们具有关联的运动矢量值。 这些值基于是否将 macroblocks 用于字段编码或框架编码图片而生成。 任何实现必须正确考虑每个已利用的宏块类型 (尤其是对于字段结构图片或双) 。

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

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

  • H261LoopFilterMotion4MVbPicOBMC 为零。

  • PicCurrentField 标志为零,除非 bPicStructure 为 2 (字段) 。 在这种情况下, PicCurrentField 为 1。

MVectorDXVA_MBctrl_P_HostResidDiff_1 和 DXVA_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 都是指按 MPEG-2 视频第 7.6.3.1 节 (当前运动矢量值 (更新 PMV 后,PMV 的值) 。

  • 可以在 MPEG-2 第 7.6.3.6 节中找到 vector'[2][0] 和 vector'[3][0] 的定义。 显示的左-移操作指示垂直组件已修改为框架坐标。

  • 在两个"无运动" (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 (2,dir1) MVector[3]MvertFieldSel_3 (2,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 (top)

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 (2,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] 中发送一个向前运动向量,并且261循环筛选器对于宏块中的正向预测是活动的。

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

bPicOBMC = 0

Motion4MV = 1

指示在 MVector[0] 到 MVector[3] 之间发送四个前进运动向量。 在这种情况下, MotionForward必须为1,而IntraMacroblock必须为零。

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

bPicOBMC = 1

Motion4MV = 0

指示将在 MVector[0] 到 MVector[9] 中发送10个前进运动向量,以指定 OBMC 动作,并且前四个运动向量的值都相等。

如果 MotionBackward 为1,则将为 MVector[10] 中的向后预测发送第11个运动矢量。

bPicOBMC = 1

Motion4MV = 1

指示将在 MVector[0] 到 MVector[9] 中发送10个前进运动向量,以指定 OBMC 运动,并且前四个此类运动向量的值可能不同。

如果 MotionBackward 为1,则将为 MVector[10] 中的向后预测发送第11个运动矢量。

注意 Average 运算符的 ( (s1 + s2 + 1) >> 1) 对于 mpeg-2、mpeg-2 半样本预测筛选、双向求平均值和双质数与混合的双向相同。 在右移位之前,H-p 双向平均运算符不会增加 + 1 的偏移量。 DXVA_PictureParametersbBidirectionalAveragingMode成员确定使用这些方法中的哪一种。