DXVA_PictureParameters 结构 (dxva.h)
DXVA_PictureParameters结构由主机解码器发送到加速器,以提供压缩图片的图片级参数,以便在加速器上解码。
语法
typedef struct _DXVA_PictureParameters {
WORD wDecodedPictureIndex;
WORD wDeblockedPictureIndex;
WORD wForwardRefPictureIndex;
WORD wBackwardRefPictureIndex;
WORD wPicWidthInMBminus1;
WORD wPicHeightInMBminus1;
BYTE bMacroblockWidthMinus1;
BYTE bMacroblockHeightMinus1;
BYTE bBlockWidthMinus1;
BYTE bBlockHeightMinus1;
BYTE bBPPminus1;
BYTE bPicStructure;
BYTE bSecondField;
BYTE bPicIntra;
BYTE bPicBackwardPrediction;
BYTE bBidirectionalAveragingMode;
BYTE bMVprecisionAndChromaRelation;
BYTE bChromaFormat;
BYTE bPicScanFixed;
BYTE bPicScanMethod;
BYTE bPicReadbackRequests;
BYTE bRcontrol;
BYTE bPicSpatialResid8;
BYTE bPicOverflowBlocks;
BYTE bPicExtrapolation;
BYTE bPicDeblocked;
BYTE bPicDeblockConfined;
BYTE bPic4MVallowed;
BYTE bPicOBMC;
BYTE bPicBinPB;
BYTE bMV_RPS;
BYTE bReservedBits;
WORD wBitstreamFcodes;
WORD wBitstreamPCEelements;
BYTE bBitstreamConcealmentNeed;
BYTE bBitstreamConcealmentMethod;
} DXVA_PictureParameters, *LPDXVA_PictureParameters;
成员
wDecodedPictureIndex
指定解码的宏块的目标帧缓冲区。
wDeblockedPictureIndex
指定 bPicDeblocked 为 1 时解除阻止的输出图片的目标帧缓冲区。 此成员没有意义,如果 bPicDeblocked 为零,则必须为零。 此成员可能与 wDecodedPictureIndex 相同。
wForwardRefPictureIndex
指定要用作当前图片向前预测的参考图片的图片的帧缓冲区索引。 不得与 wDecodedPictureIndex 相同。 如果 bPicIntra 为 1,则必须0xFFFF此成员。
wBackwardRefPictureIndex
指定要用作参考图片的图片的帧缓冲区索引,以便对当前图片进行向后预测。 如果使用向后引用运动预测,则此成员不得与 wDecodedPictureIndex 相同。 如果 bPicBackwardPrediction 为零,则必须0xFFFF此成员。
wPicWidthInMBminus1
指定当前图片的宽度(以宏块为单位,减 1)。 通过将 1 添加到 wPicWidthInMBminus1 来派生宏块中图片的宽度。
wPicHeightInMBminus1
指定当前图片的高度(以宏块为单位,减 1)。 通过将 1 添加到 wPicHeightInMBminus1 来派生宏块中图片的高度。
bMacroblockWidthMinus1
指定宏块的目标亮度样本宽度,减去 1。 对于 MPEG-1、MPEG-2、H.263 和 MPEG-4,这等于 15。
bMacroblockHeightMinus1
指定宏块的目标亮度样本高度减 1。 对于 MPEG-1、MPEG-2、H.261、H.263 和 MPEG-4,这等于 15。
bBlockWidthMinus1
指定残差块减 1 的块宽度。 对于 MPEG-1、MPEG-2、H.261、H.263 和 MPEG-4,这等于 7。 如果 DXVA_ConfigPictureDecode 结构的 bConfig4GroupedCoefs 成员为 1,则 为 7。 宏块中的剩余差异块按 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) 。 通过将 1 添加到 bBlockWidthMinus1 来形成名为 WT 的派生术语。
bBlockHeightMinus1
指定残差块的块高减 1。 对于 MPEG-1、MPEG-2、H.261、H.263 和 MPEG-4,这等于 7。 如果 bConfig4GroupedCoefs 为 1,则为 7。 通过将 1 添加到 bBlockHeightMinus1 来形成名为 HT 的派生术语。
bBPPminus1
指定视频样本值的每像素位数减 1。 这至少为 7 个 (表示 8 位像素) 。 对于 MPEG-1、MPEG-2、H.261 和 H.263,这等于 7。 MPEG-4 的某些操作模式支持更高的每像素位数。 名为 BPP 的派生术语通过将 1 添加到 bBPPminus1 来形成。
bPicStructure
指示当前图片是值 1) (上字段图片、下字段图片 (值 2) ,还是 (值 3) 的相框图片。 在渐进式扫描帧结构化编码(如 H.261 中)中, bPicStructure 为 3。 派生值 PicCurrentField 定义为零,除非 bPicStructure 为 2 (底部字段) 。 在这种情况下,它是 1。 此成员的含义与 MPEG-2 (H.262) 的第 6.3.10 节和表 6-14 中定义的 picture_structure 变量相同。
bSecondField
指示在 bPicStructure 为 1 或 2) 时,在字段结构化编码 (的情况下,当前字段是图片的第二个字段。 这用于确定用作运动补偿预测相反奇偶校验线的引用的对奇偶校验字段是引用图片的相反奇偶校验字段还是当前图片的相反奇偶校验字段。 如果 bSecondField 为 1,则当前字段是图片的第二个字段,用作运动补偿相反奇偶校验线的引用的字段是当前图片的对等线。 (在这两种情况下,用作运动补偿相同奇偶校验线的引用的字段是参考图片的相同奇偶校验线。) 否则, bSecondField 为零。
bPicIntra
指示此图片是否需要运动补偿预测。 如果 bPicIntra 为 1,则使用 DXVA_MBctrl_I_OffHostIDCT_1 或 DXVA_MBctrl_I_HostResidDiff_1 宏块控制命令结构发送所有宏块,其中 IntraMacroblock 标志等于 1 。 也就是说,不会对图片执行运动补偿预测。 否则,图片的某些宏块可能具有宏块控件命令的 IntraMacroblock 参数等于零,并且宏块控件命令结构将使用 DXVA_MBctrl_P_HostResidDiff_1 结构或 DXVA_MBctrl_P_OffHostIDCT_1 结构。
bPicBackwardPrediction
指示当前图片的任何宏块是否可能包含后向预测。 如果 bPicIntra 为 1, 则 bPicBackwardPrediction 必须为零。 如果 bPicBackwardPrediction 为零,则每个DXVA_MBctrl_I_HostResidDiff_1、DXVA_MBctrl_I_OffHostIDCT_1、DXVA_MBctrl_P_HostResidDiff_1或DXVA_MBctrl_P_OffHostIDCT_1结构) 内图片 (的所有宏块控件命令中 ,MotionBackward 必须为零。 如果 bPicBackwardPrediction 为 1,则图片的某些宏块的 MotionBackward 可能等于 1。
bBidirectionalAveragingMode
指示用于将用于 B 图片和双质运动) 的双向运动补偿 (预测平面组合的舍入方法。 值零指示 MPEG-1 和 MPEG-2 舍入平均值 (其中两个整数之间的值向上舍入到下一个更高的整数) ,值 1 指示 H.263 截断平均值 (其中两个整数之间的一半值向下舍入到下一个较低的整数) 。 bBidirectionalAveragingMode 如果不需要双向平均,则必须为零。
bMVprecisionAndChromaRelation
此成员指示亮度运动矢量的精度以及色度运动矢量如何从亮度运动矢量派生。
下表列出了具有指定亮度运动矢量精度的此成员的值,以及有关如何派生色度运动矢量的说明。
值 | 说明 |
---|---|
0 | 亮度运动矢量具有半样本精度。 色度运动矢量根据 MPEG-2 (H.262) 派生自亮度运动矢量。 |
1 | 亮度运动矢量具有半样本精度。 色度运动矢量派生自根据 H.263 的亮度运动矢量。 |
2 | 亮度运动矢量具有全样本精度。 色度运动矢量派生自亮度运动矢量,根据 H.261 (除以 2,并截断为零到全样本值) 。 |
3 | 保留。 |
bChromaFormat
影响加速器预期的预测错误块数。 此变量在 MPEG-2 (H.262) 中定义。 对于 MPEG-1、MPEG-2 主配置文件、H.261 和 H.263 位流,此值必须始终设置为 1,表示 4:2:0 格式。 如果值为 2,则表示 4:2:2;如果值为 3,则表示 4:4:4 采样。 如果 DXVA_ConfigPictureDecode 的 bConfig4GroupedCoefs 成员为 1 (,则此成员必须等于 1,因为 bConfig4GroupedCoefs 操作不包括 4:2:2 和 4:4:4 格式) 系数数据中所需的 EOB 指示。
注意
H.261、H.263 和 MPEG-1 与 MPEG-2 和 MPEG-4 的水平色位略有不同。 假定此差异足够小,无法忽略。
bPicScanFixed
使用基于加速器的 IDCT 处理残差块时,此标志的值为 1 表示图片中所有宏块的反转扫描方法相同。 如果值为零,则表示它不是。 如果 bConfigHostInverseScan 成员为 1,或者 bConfigResidDiffAccelerator 成员在 DXVA_ConfigPictureDecode 中为零,则此成员必须为 1。
bPicScanMethod
指示 bPicScanFixed 为 1 时图片的固定反扫描方法。 当 bPicScanFixed 为零时,此成员没有意义,并且必须具有零值。
如果 DXVA_ConfigPictureDecode 的 bConfigHostInverseScan 成员为零,则此成员定义的扫描方法可以是以下方法之一。
bPicScanMethod | 扫描方法 |
---|---|
0 | 锯齿形扫描 (MPEG-2) |
1 | 备用垂直扫描 (MPEG-2) |
2 | 交替水平扫描 (H.263) |
如果 DXVA_ConfigPictureDecode 的 bConfigHostInverseScan 成员为 1,则必须按如下所示设置 bPicScanMethod 定义的扫描方法。
bPicScanMethod | 扫描方法 |
---|---|
3 | 具有绝对系数地址的任意扫描。 |
bPicReadbackRequests
指示是否为当前图片发出回读控制请求。 值为 1 表示存在读回请求,值为 0 表示不存在。 读回请求指示,如果在 wDeblockedPictureIndex (等于 wDecodedPictureIndex) 的情况下应用了取消阻止,则宏块的值在最终解码和已解除阻止的图片中读回。
bRcontrol
定义用于半样本运动补偿的舍入方法。 此变量在 H.263 第 6.1.2 节中定义。 值为零表示在 MPEG-1、MPEG-2 和第一个版本的 H.263 中找到的半样本舍入方法。 值 1 指示舍入方法,该方法包括可在 H.263 和 MPEG-4 的某些可选模式中选择的向下平均偏差。 它对于 H.261 毫无意义,因为 H.261 没有半样本运动补偿。 对于所有 MPEG-1 和 MPEG-2 位流,它必须设置为零,以便符合这些标准定义的舍入运算符。
bPicSpatialResid8
指示空间域差异块如何从主机发送到加速器。 值为 1 表示可以使用 8 位样本发送基于主机的残差解码的空间域差异块,而值为 0 表示不能。
如果 DXVA_ConfigPictureDecode 的 bConfigResidDiffHost 成员为零或 BPP 大于 8,则此成员必须为零。 如果 BPP 为 8,bPicIntra 为 1,bConfigResidDiffHost 为 1,则此成员必须为 1。 如果 DXVA_ConfigPictureDecode 的 bConfigSpatialResid8 成员为 1,则此成员必须为 1。
如果此成员等于 1,则空间域内部宏块将作为 8 位值发送 (,这些值由 DXVA_ConfigPictureDecode) 的 bConfigIntraResidUnsigned 成员确定,并且空间域 nonintra 宏块差异作为相对于某些运动补偿预测的有符号 8 位差值发送。
bPicSpatialResid8 成员与 DXVA_ConfigPictureDecode 的 bConfigSpatialResid8 成员的不同之处在于,它是特定图片的指示,而不是整个视频序列的全局指示。 在某些情况下,例如在 BPP 等于 8 的图片中,bPicSpatialResid8 将为 1,即使 bConfigSpatialResid8 可能为零。
bPicOverflowBlocks
指示是否使用溢出块将空间域差异块从主机发送到加速器。 值为 1 表示可以使用溢出块发送用于基于主机的图片残差解码的空间域差异块。 值为零表示不使用溢出块发送空间域差异块。 如果 bConfigResidDiffHost 为零、 bConfigSpatialResid8 为零或 BPP 大于 8,则此成员必须为零。 参数 bConfigResidDiffHost 和 bConfigSpatialResid8 是 DXVA_ConfigPictureDecode 的成员。 bPicOverflowBlocks 指示特定图片是否存在任何溢出块。 在 BPP 等于 8 的内图中, bPicOverflowBlocks 必须为零,因为在这种情况下不需要溢出块。
bPicExtrapolation
指示是否根据 H.263 附件 D 和 MPEG-4 的指定,允许超过图片边界的运动矢量。 这需要分配两个宏块较宽的图片平面 (左侧有一个额外的宏块,另一个宏块位于右侧) ,两个宏块高 (一个额外的宏块位于顶部,另一个宏块位于底部) ,而不是解码后的图片大小,或者在图片边界内剪辑每个单独像素访问的地址。 此规范中的宏块地址适用于图片内部的宏块,不包括填充。
bPicDeblocked
指示是否为此图片发送解除阻止命令以创建已解除阻止的输出图片。 取消阻止的输出图片放置在 wDeblockedPictureIndex 指示的图片缓冲区中。 如果 bPicDeblocked 为 1,则发送解除阻止命令并生成已解除阻止的帧。 如果 bPicDeblocked 为零,则不发送解除阻止命令,并且不会生成已解除阻止的图片。
bPicDeblockConfined
指示解除阻止筛选器命令缓冲区是否将解除阻止筛选器操作的效果限制为解除阻止筛选器命令缓冲区中包含的宏块集。
bPic4MVallowed
指定是否允许每个宏块有四个前向引用运动矢量,如 H.263 附件 F 和 J 中使用的那样。
bPicOBMC
指定当前图片的运动补偿是否使用 H.263 附件 F 中指定的重叠块运动补偿 (OBMC) 运行。如果 bPic4MVallowed 为零,则必须为零。
bPicBinPB
指定图片中双向预测的宏块是否使用 PB 帧运动补偿中的 B 图片。 这会将每个宏块的双向预测区域限制为后向参考图片中相应宏块的区域,如 H.263 的附件 G 和 M 中所述。
bMV_RPS
指定运动矢量参考图片选择的使用。 如果 bMV_RPS 为 1,则表示将为每个运动向量发送参考图片索引,而不是为整个图片发送向前和可能向后移动的图片索引。 如果 bMV_RPS 为 1, 则 wForwardRefPictureIndex 和 wBackwardRefPictureIndex 成员没有意义,必须为零。
bReservedBits
这保留用于打包和对齐。 必须为零。
wBitstreamFcodes
指示 MPEG-2 中定义的用于原始位流处理的运动矢量 f_code 值。 每个 f_code 值需要 4 位。 这些值打包到 16 位单词中,如下所示。
Bits | 说明 |
---|---|
12 到 15 (最高有效位) | f_code[0][0]:向前水平f_code |
8 到 11 | f_code[0][1]:正向垂直f_code |
4 到 7 | f_code[1][0]:向后水平f_code |
0 到 3 (最低有效位) | f_code[1][1]:向后垂直f_code |
当 DXVA_ConfigPictureDecode 结构的 bConfigBitstreamRaw 成员为 1 时,wBitstreamFcodes 包含四个运动矢量f_code值。 如果 bConfigBitstreamRaw 为 1,并且四 个f_code 值中的任何一个由于位流数据的结构或由于相关视频编码位流语法 ( (如 H.261 或 H.263) 中)中不需要f_code值,则0xF每个不相关的f_code值。
如果 DXVA_ConfigPictureDecode 结构的 bConfigBitstreamRaw 成员为零,则 wBitstreamFcodes 设置为0xFFFF (所有f_code值都设置为 0xF) 。
注意
MPEG-1 位流以不同的形式提供此信息。 因此,对于 MPEG-1 位流,f_code[0][0] 和 f_code[0][1] 等于 MPEG-1 的forward_f_code,f_code[1][0] 和 f_code[1][1] 等于 MPEG-1 的backward_f_code。
wBitstreamPCEelements
当 DXVA_ConfigPictureDecode 的 bConfigBitstreamRaw 成员为 1 时,此成员包含 MPEG-2 视频的位流解码过程所需的一组标志。 当 bConfigBitstreamRaw 为零时,它不使用,并且对于非 MPEG-2 视频,它必须为零。 此成员中的位由它们与 MPEG-2 图片编码扩展的位流元素的对应关系定义,如下所示。
Bits | 说明 |
---|---|
14 和 15 | IntraDCprecision 等于 intra_dc_precision。 |
12 和 13 | AnotherPicStructure 等于 picture_structure。 这必须等于此结构的 bPicStructure 成员。 |
11 | TopFieldFirst 等于 top_field_first。 |
10 | FrameDCTprediction 等于 frame_pred_frame_dct。 |
9 | 隐藏MV 等于concealment_motion_vectors。 |
8 | QuantScaleType 等于 q_scale_type。 |
7 | IntraVLCformat 等于 intra_vlc_format。 |
6 | AlternateScan 等于 alternate_scan。 |
5 | RepeatFirstField 等于加速器) 不需要repeat_first_field (。 |
4 | Chroma420type 等于加速器不需要chroma_420_type (,并且受 MPEG-2 限制为等于progressive_frame) 。 |
3 | ProgressiveFrame 等于 progressive_frame。 |
0、1 和 2 | 保留位。 这些是最低有效位。 |
bBitstreamConcealmentNeed
指示当 DXVA_ConfigPictureDecode 结构的 bConfigBitstreamRaw 成员为 1 时,位流数据中出现错误的可能性。 如果 bConfigBitstreamRaw 为零,则必须为零。
无论提供给视频加速器的数据内容如何,都必须设计为不发生故障或锁定。 因此,视频加速器获取有关主机对语法错误可能性的评估信息可能会有所帮助。 这是为了确定是否需要调用更复杂的错误隐藏算法,该算法可能会减慢比特流解码过程。 此成员允许的值如下所示, (所有其他值都保留) 。
值 | 含义 |
---|---|
0 | 位流不太可能包含语法格式中的任何大量错误。 |
1 | 位流可能包含一些错误。 这些错误可能很少 (例如,每小时一次或两次错误) 。 |
2 | 位流可能包含一些错误。 这些错误可能发生的频率可能会影响用户体验 (例如,) 每隔 5 到 10 分钟发生一次错误。 |
3 | 比特流可能包含相对显著、严重且频繁的语法格式错误, (例如,每分钟) 一个或多个错误。 |
bBitstreamConcealmentMethod
当 DXVA_ConfigPictureDecode 结构的 bConfigBitstreamRaw 成员为 1 时,指定错误隐藏处理的首选默认方法。 如果 bConfigBitstreamRaw 为零,则必须为零。 此成员允许的值如下所示, (所有其他值都保留) 。
值 | 错误隐藏方法 |
---|---|
0 | 未知或未指定。 |
1 | 图片中的空间内隐藏。 |
2 | 图片间隐藏的前向运动参考图片 (更常见地用于 P 图片 或 B 图片 ,该图片更接近其向前运动参考图片,而不是其向后运动参考图片) 。 |
3 | 图片间隐藏的向后运动参考图片 (更常见地用于 B 图片,该图片更接近其向后运动参考图片,而不是其前向运动参考图片) 。 |
注解
此结构的某些成员受使用 DXVA_ConfigPictureDecode 结构建立的配置限制为特定值。 使用DXVA_PictureParameters传递图片级参数后,图片解码过程主要受使用DXVA_MBctrl_I_HostResidDiff_1、DXVA_MBctrl_I_OffHostIDCT_1、DXVA_MBctrl_P_HostResidDiff_1或DXVA_MBctrl_P_OffHostIDCT_1结构形成的宏块控制命令控制。
要求
要求 | 值 |
---|---|
Header | dxva.h (包括 Dxva.h) |