DXVA_MBctrl_P_OffHostIDCT_1结构 (dxva.h)

主机解码器为每个宏块发送一次DXVA_MBctrl_P_OffHostIDCT_1结构,以使用非主机 IDCT 为大多数非阻止图片指定宏块控制命令。

语法

typedef struct _DXVA_MBctrl_P_OffHostIDCT_1 {
  WORD         wMBaddress;
  WORD         wMBtype;
  DWORD        dwMB_SNL;
  WORD         wPatternCode;
  BYTE         bNumCoef[DXVA_NumBlocksPerMB_420];
  DXVA_MVvalue MVector[DXVA_NumMV_OBMC_off_BinPBwith4MV_off];
} DXVA_MBctrl_P_OffHostIDCT_1;

成员

wMBaddress

按光栅扫描顺序指定当前宏块的宏块地址。 有关宏块地址的示例,请参阅 macroblock 地址

wMBtype

指定要处理的宏块的类型。 以下位定义宏块处理。

说明
15 到 12 通过MvertFieldSel_0 (位 12 位) MvertFieldSel_3 (位 15 最有效位)
指定宏块控制命令稍后发送的相应运动向量的垂直字段选择。 例如,对于帧图片结构 (基于帧的运动,对于 H.261 和 H.263) ,这些位都必须为零。 这些位的使用与为 MPEG-2 的第 6.3.17.2 节中的相应位指定的位相同。
11 保留位
必须为零。
10 HostResidDiff
指定是发送空间域残差解码块,还是为当前宏块的非主机 IDCT 发送转换系数。
如果 bConfigResidDiffHost 为零,则此标志必须为零。 如果 bConfigResidDiffAccelerator 为零,则此标志必须为 1。 此标志在DXVA_MBctrl_P_OffHostIDCT_1始终等于零。
9 和 8 MotionType
指定图片中的动作类型。 例如,对于帧图片结构 (的基于帧的运动,如 H.261) 中所示,位 9 必须为 1,位 8 必须为零。
当 MPEG-2 中存在这些位时,使用这些位直接对应于使用 MPEG-2 中的frame_motion_type位或field_motion_type位。 以下“备注”部分进一步解释了这些位的使用。
7 和 6 MBscanMethod
指定要使用的扫描方法。
如果 bPicScanFixed 为 1,则必须等于 bPicScanMethod。
如果 bConfigHostInverseScan 为零,MBscanMethod 必须是以下值之一:
  • 位 6 为零,对于 zigzag 扫描,位 7 为零, (MPEG-2 图 7-2) 。
  • 位 6 为 1,位 7 为零,用于备用垂直扫描。
  • 位 6 为零,位 7 为 1 表示备用水平扫描。
如果 bConfigHostInverseScan 为 1,MBscanMethod 必须等于以下值:
  • 位 6 为 1,对于具有绝对系数地址的任意扫描,位 7 为 1。
bPicScanMethod 和 bPicScanFixed 都是 DXVA_PictureParameters 的成员。 bConfigHostInverseScan 是 DXVA_ConfigPictureDecode的成员。
5 FieldResidual
指示残差块是否使用 MPEG-2 中指定的字段 IDCT 结构。
如果 DXVA_PictureParameters 的 bPicStructure 成员为 1 或 2,则此标志必须为 1 或 2。
当用于 MPEG-2 时,如果 MPEG-2 语法中的frame_pred_frame_DCT标志为 1,则 FieldResidual 必须为零,如果宏块存在dct_type,则必须等于 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
指示如果 MotionForward 为零,或者 如果 DXVA_PictureParameters 的 bPic4MVallowed 成员为零,则前向运动对宏块中的四个亮度块中的每一个都使用不同的运动向量,如 H.263 附件 F 和 J.Motion4MV 中所示。
2 MotionBackward
在 MPEG-2 中为相应的macroblock_motion_backwardparameter指定。 如果 DXVA_PictureParameters 的 bPicBackwardPrediction 成员为零,则 MotionBackward 必须为零。 以下“备注”部分进一步解释了此位的使用。
1 MotionForward
用作 MPEG-2 中相应macroblock_motion_forward指定的用法。 以下“备注”部分进一步解释了此位的使用。
0 IntraMacroblock
指示宏块编码为内部,不对当前宏块使用运动向量。 对应于 macroblock_intrain MPEG-2。 以下“备注”部分进一步解释了此位的使用。

dwMB_SNL

指定要在当前宏块之后生成的跳过宏块的数量,并指示当前宏块块的残差数据的位置。 此成员包含两个变量: MBskipsFollowing 在最显著的 8 位中, MBdataLocation 的最小有效 24 位。 MBskipsFollowing 指示在当前宏块之后生成的跳过的宏块数。 MBdataLocation 是 IDCT 残差块数据缓冲区中的索引。 此索引指示当前宏块块的残差数据的位置,表示为 32 位的倍数。

wPatternCode

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

wPatternCode (的位 (11-i) ,其中 i 是宏块的索引,位 0 表示最小有效位) 表示是否为块发送残差数据 (请参阅 Macroblock-Oriented Picture Decoding 了解详细信息) i 是宏块中块的索引,如 MPEG-2 图 6-10 中指定, 6-11 和 6-12 (光栅扫描顺序为 Y,后跟 4:2:0 Cb 的光栅扫描顺序,后跟 4:2:0 的 Cr,后跟 4:2:2 块的 Cb,后跟 4:2:2 块的 Cr,后跟 4:4:4 块的 Cb, 后接 Cr) 4:4:4 块。 编码块的数据 (块的位 (11-i) 等于 1) 位于剩余编码缓冲区中, (增加 i) 。 对于 4:2:0 MPEG-2 数据, wPatternCode 的值对应于将 CBP 的解码值移到左侧的 6 位位置, (用于 4:2:2 和 4:4:4:4 的色度格式) 。

如果 DXVA_ConfigPictureDecodebConfigSpatialResidInterleaved 成员为 1,则会以与使用的 YUV 像素格式匹配的色度交错形式发送基于主机的残差。 在这种情况下,每个 Cb 和空间上对应的 Cr 块将被视为单个残差数据结构单元。 这不会改变 wPatternCode 的值或含义,但这意味着每当其中任一数据块在 wPatternCode 中设置了相应的位集时,都会发送每对 Cb 和 Cr 数据块的成员。 如果特定数据块 的 wPatternCode 中的位为零,则每当此配对要求为 wPatternCode 位等于零的块发送残差数据块时,都必须将相应的残差数据值作为零发送。

bNumCoef[DXVA_NumBlocksPerMB_420]

bNumCoef 数组中的每个值指示宏块 i 的每个块的残差数据缓冲区中的系数数。

数组下标 i 是宏块的索引,如 MPEG-2 视频图 6-10、6-11 和 6-12 (Y 光栅扫描顺序(后跟 Cb),后跟 Cr) 。

仅当 wMBtype) 中的 HostResidDiff 标志 (位 10 且 bChromaFormat 为 1 (4:2:0) 时才使用此成员。 如果以 4:2:2 或 4:4:4 格式使用,则会增大典型的宏块控制命令的大小,超过关键内存对齐边界。 因此,DXVA_TCoefSingle结构中的 TCoefEOB 位用于确定非 4:2:0 事例中每个块中的系数数。

bNumCoef 的目的是指示剩余差异数据缓冲区中每个块存在的数据数量,表示为存在的系数数。 当 DXVA_ConfigPictureDecode 结构的 bConfig4GroupedCoefs 成员为 1 时,bNumCoef 可能包含为块发送的实际系数数,或者将该值舍入为四的倍数。 这些系数的数据按相同的顺序在残差缓冲区中找到。

MVector[DXVA_NumMV_OBMC_off_BinPBwith4MV_off]

一个数组,其中包含宏块 () 运动向量的值,每个数组都使用 DXVA_MVvalue 结构表示。

注解

MBskipsFollowing 指定的每个跳过的宏块必须以数学方式等效于递增 wMBaddress 的值,然后重复相同的宏块控制命令。 任何具有 MBskipsFollowing 非零值的宏块控制命令都指定如何针对要跳过的每个宏块执行运动补偿预测,并且等效 (,除了 MBskipsFollowing) 的值与第一个跳过宏块系列第一代的显式非斯基普规范外,还等效于 (。 因此,每当 MBskipsFollowing 不为零时,以下值必须全部等于零: Motion4MVIntraMacroblockbNumCoef

MBdataLocation 是 IDCT 残差块数据缓冲区的索引,指示当前宏块块的残差数据的位置,表示为 32 位的倍数。 对于宏块控件命令缓冲区中的第一个宏块,必须为零。 如果 wPatternCode 为零,MBdataLocation 可能包含任何值。 如果 wPatternCode 为零,则建议解码器,但不需要将此值设置为零或设置为与下一个宏块控件命令中的相同值。

有关如何生成跳过的宏块的详细信息,请参阅 生成跳过的宏块

宏块控制命令结构第一部分的表中显示了 IntraMacroblockMotionForward、MotionBackwardMotionTypeMvertFieldSelMVector 的有效组合。

要求

   
Header dxva.h (包括 Dxva.h)

另请参阅

DXVA_ConfigPictureDecode

DXVA_MBctrl_P_HostResidDiff_1

DXVA_MVvalue

DXVA_PictureParameters

DXVA_TCoefSingle