dxva.h) (DXVA_MBctrl_P_OffHostIDCT_1 结构
主机解码器为每个宏块发送一次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
按光栅扫描顺序指定当前宏块的宏块地址。 有关宏块地址的示例,请参阅 宏块地址。
wMBtype
指定要处理的宏块的类型。 以下位定义宏块处理。
Bits | 说明 |
---|---|
15 到 12 | MvertFieldSel_3 (位 15 是) 到 MvertFieldSel_0 (位 12) 为稍后在宏块控制命令中发送的相应运动矢量指定垂直字段选择。 例如,对于帧图片结构 (基于帧的运动,对于 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 必须为以下值之一:
|
5 | FieldResidual 指示残差块是否使用 MPEG-2 中指定的字段 IDCT 结构。 如果 DXVA_PictureParameters 的 bPicStructure 成员为 1 或 2,则此标志必须为 1。 当用于 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。 在 2-D 筛选器进程的输出中,将舍入到 8 位整数时保留完整的算术精度, () 向上舍入半整数或更高的值。 |
3 | Motion4MV 指示向前运动对宏块中四个亮度块中的每一个都使用不同的运动向量,如 H.263 Annexes F 和 J.Motion4MV 中使用的那样,如果 MotionForward 为零,或者 如果 DXVA_PictureParameters 的 bPic4MVallowed 成员为零,则必须为零。 |
2 | MotionBackward 用于指定 MPEG-2 中的相应macroblock_motion_backwardparameter。 如果 DXVA_PictureParameters 的 bPicBackwardPrediction 成员为零,则 MotionBackward 必须为零。 以下“备注”部分进一步说明了此位的用法。 |
1 | MotionForward 用于为 MPEG-2 中的相应macroblock_motion_forward指定。 以下“备注”部分进一步说明了此位的用法。 |
0 | IntraMacroblock 指示宏块编码为内部,并且当前宏块不使用任何运动向量。 对应于 MPEG-2 macroblock_intrain。 以下“备注”部分进一步说明了此位的用法。 |
dwMB_SNL
指定要在当前宏块之后生成的跳过的宏块数,并指示当前宏块块的剩余差异数据的位置。 此成员包含两个变量:最有效 8 位中的 MBskipsFollowing 和最低有效 24 位中的 MBdataLocation 。 MBskipsFollowing 指示在当前宏块之后生成的跳过的宏块数。 MBdataLocation 是 IDCT 剩余差异块数据缓冲区中的索引。 此索引指示当前宏块块的剩余差异数据的位置,以 32 位的倍数表示。
wPatternCode
指示是否为宏块中的每个块发送残差数据。
wPatternCode (的位 (11-i) ,其中 i 是宏块内块的索引,位 0 表示最小有效位) 指示是否为块 i 发送残差数据 (请参阅面向宏块的图片解码了解详细信息) 。值 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 个 Cb 块,然后是 4:4:4 个 Cb 块, 后跟 4:4:4 Cr) 块。 位 (11-i) 等于 1) 的编码块 (编码块的数据位于残差编码缓冲区中,其索引顺序相同, (增加 i) 。 对于 4:2:0 MPEG-2 数据, wPatternCode 的值对应于将 CBP 的解码值向左移动 6 位位置, (用于 4:2:2 和 4:4:4 色度格式的较低位位置) 。
如果 DXVA_ConfigPictureDecode 的 bConfigSpatialResidInterleaved 成员为 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 为 0 且 bChromaFormat 为 1 (4:2:0) 时,才使用此成员。 如果以 4:2:2 或 4:4:4 格式使用,则会增大典型宏块控制命令的大小,使其超出关键内存对齐边界。 因此,DXVA_TCoefSingle结构中的 TCoefEOB 位用于确定非 4:2:0 情况下每个块中的系数数。
bNumCoef 的目的是指示残差数据缓冲区中每个块存在的数据量,以存在的系数数表示。 当 DXVA_ConfigPictureDecode 结构的 bConfig4GroupedCoefs 成员为 1 时,bNumCoef 可能包含为块发送的实际系数数,也可以包含向上舍入为 4 的倍数的值。 这些系数的数据按相同顺序在残差缓冲区中找到。
MVector[DXVA_NumMV_OBMC_off_BinPBwith4MV_off]
一个数组,其中包含宏块的运动矢量 () 的值,每个都使用 DXVA_MVvalue 结构表示。
注解
MBskipsFollowing 指定的每个跳过的宏块都必须以数学上等效的方式生成,即递增 wMBaddress 的值,然后重复相同的宏块控制命令。 任何具有 MBskipsFollowing 非零值的宏块控制命令指定如何针对要跳过的每个宏块执行运动补偿预测,并且等效 (除了 MBskipsFollowing 的值) 与生成第一个跳过的宏块系列中的第一个的显式非skip 规范相等。 因此,每当 MBskipsFollowing 不为零时,以下值都必须等于零: Motion4MV、 IntraMacroblock 和 bNumCoef。
MBdataLocation 是 IDCT 剩余差异块数据缓冲区的索引,指示当前宏块块的残差数据的位置,以 32 位的倍数表示。 对于宏块控制命令缓冲区中的第一个宏块,必须为零。 如果 wPatternCode 为零,MBdataLocation 可能包含任何值。 当 wPatternCode 为零时,建议使用解码器,但不需要将此值设置为零或设置为与下一个宏块控制命令中相同的值。
有关如何生成跳过的宏块的详细信息,请参阅 生成跳过的宏块。
IntraMacroblock、MotionForward、MotionBackward、MotionType、MvertFieldSel 和 MVector 的有效组合显示在 Macroblock 控制命令结构第一部分的表中。
要求
要求 | 值 |
---|---|
Header | dxva.h (包括 Dxva.h) |