DXVA_ConfigPictureDecode 结构 (dxva.h)

DXVA_ConfigPictureDecode结构由主机解码器发送到加速器,以设置压缩图片解码的配置。

语法

typedef struct _DXVA_ConfigPictureDecode {
  DXVA_ConfigQueryOrReplyFunc dwFunction;
  DWORD                       dwReservedBits[3];
  GUID                        guidConfigBitstreamEncryption;
  GUID                        guidConfigMBcontrolEncryption;
  GUID                        guidConfigResidDiffEncryption;
  BYTE                        bConfigBitstreamRaw;
  BYTE                        bConfigMBcontrolRasterOrder;
  BYTE                        bConfigResidDiffHost;
  BYTE                        bConfigSpatialResid8;
  BYTE                        bConfigResid8Subtraction;
  BYTE                        bConfigSpatialHost8or9Clipping;
  BYTE                        bConfigSpatialResidInterleaved;
  BYTE                        bConfigIntraResidUnsigned;
  BYTE                        bConfigResidDiffAccelerator;
  BYTE                        bConfigHostInverseScan;
  BYTE                        bConfigSpecificIDCT;
  BYTE                        bConfig4GroupedCoefs;
} DXVA_ConfigPictureDecode, *LPDXVA_ConfigPictureDecode;

成员

dwFunction

指示使用探测和锁定命令时查询或响应的类型。 dwFunction 最重要的 24 位是DXVA_ConfigQueryOrReplyFlag变量。

DXVA_ConfigQueryOrReplyFlag变量的最小有效 4 位包含正在执行的查询或响应的状态指示器。

dwFunction 的最小有效 8 位是bDXVA_Func变量,在本例中,该变量等于 1。

dwReservedBits[3]

用于打包和对齐的保留位。 这些位为零。

guidConfigBitstreamEncryption

指示与位流数据缓冲区的加密协议类型关联的 GUID。 DXVA_NoEncrypt (dxva.h) 中定义的 GUID 名称的值表示未应用加密。 如果 bConfigBitstreamRaw 为零,则这是DXVA_NoEncrypt。

guidConfigMBcontrolEncryption

指示与 宏块控制缓冲区的加密协议类型关联的 GUID。 DXVA_NoEncrypt (dxva.h) 中定义的 GUID 名称的值表示未应用加密。 如果 bConfigBitstreamRaw 为 1,则DXVA_NoEncrypt。

guidConfigResidDiffEncryption

指示与残差解码数据缓冲区的加密协议类型关联的 GUID, (包含空间域数据或基于加速器的 IDCT) 转换域系数集的缓冲区。 如果 bConfigBitstreamRaw 为 1,则DXVA_NoEncrypt。 (DXVA_NoEncrypt 是在 dxva.h 中定义的 GUID,指示未应用加密。)

bConfigBitstreamRaw

包含位流处理指示器。 值为 1 指定图片数据将在位流缓冲区中作为原始位流内容发送。 值为零指定将使用宏块控制命令缓冲区发送图片数据。

如果 bConfigResidDiffHost 为 1 或 bConfigResidDiffAccelerator 为 1,则为零。 值零被视为基本支持级别。 首选级别 1 的额外支持。

bConfigMBcontrolRasterOrder

指定宏块控制命令是按光栅扫描顺序还是按任意顺序排列。 值为 1 指定每个宏块控制命令缓冲区中的宏块控制命令采用光栅扫描顺序,值为 0 表示任意顺序。 目前,允许驱动程序限制对光栅扫描顺序的支持;但是,驱动程序应支持任意扫描顺序和光栅扫描顺序。

bConfigResidDiffHost

包含主机残差配置 (有关详细信息,请参阅 面向宏块的图片解码) 。 值为 1 指定某些残差解码数据可以作为主机空间域中的块发送。 值为零指定不会发送空间域数据。 如果 bConfigBitstreamRaw 为 1,则此成员为零。 加速器最好同时支持零和 1。

bConfigSpatialResid8

指示在 bConfigResidDiffHost 等于 1) 时,使用基于主机的残差解码 (时,用于表示预测 (nonintra) 图片的残差空间域块的单词大小。

如果 bConfigSpatialResid81,bConfigResidDiffHost 为 1,则主机将为使用 8 位带符号样本的 nonintra 宏块发送残差空间域块,并为预测 (nonintra 中的内部宏块发送残差空间域块,) 图片的格式取决于 bConfigIntraResidUnsigned ,如下所示:

  • 如果 bConfigIntraResidUnsigned 为零,则内部宏块的空间域块将作为相对于常量引用值 128 的 8 位有符号整数值发送。
  • 如果 bConfigIntraResidUnsigned 为 1,则内部宏块的空间域块将作为 8 位无符号整数值(相对于常量引用值为零)发送。
如果 bConfigSpatialResid8 为零, bConfigResidDiffHost 为 1,则主机将为使用 16 位带符号样本的 nonintra 宏块和预测 (nonintra 中的内部宏块发送数据的残差空间域块) 图片,具体取决于 bConfigIntraResidUnsigned ,如下所示:
  • 如果 bConfigIntraResidUnsigned 为零,则宏块内部的空间域块作为 16 位带符号整数值发送,相对于 BPP-1) 的 常量引用值为 2 (,其中 BPP 是未压缩视频的每个样本的位数, (通常值为 8) 。
  • 如果 bConfigIntraResidUnsigned 为 1,则宏块内部的空间域块将作为 16 位无符号整数值(相对于常量引用值零)发送。
如果 bConfigResidDiffHost 为零, 则 bConfigSpatialResid8 成员必须为零。 当 bConfigResidDiffHost 为 1 时,不会优先选择 bConfigSpatialResid8 的一个特定值。
注意对于 BPP 等于 8 的内图,必须使用 8 位样本发送空间域块。 对于 BPP 大于 8 的图片,必须使用 16 位样本发送空间域块。 (BPP 变量是未压缩视频的每个样本的位数,通常值为 8.)

如果 bConfigIntraResidUnsigned 为零,则相对于 BPP-1) 常 量引用值为 2 (,这些示例将作为有符号整数值发送。 如果 bConfigIntraResidUnsigned 为 1,则相对于零的常量引用值,这些示例将作为无符号整数值发送。

 

bConfigResid8Subtraction

如果等于 1,则表示将减去而不是添加 8 位差异溢出块。 除非 bConfigSpatialResid8 为 1,否则必须为零。 如果 bConfigSpatialResid8 为 1,则支持加速器的首选值为 1。 通过减去差异而不是添加差异,8 位差异解码完全符合视频解码器规范中所需的完整 +/-255 值范围。 这是因为+255 不能表示为两个有符号 8 位数字的加法,但范围 +/-255 中的任何数字都可以表示为两个有符号 8 位数字 (+255 之差等于 +127 减去 ˆ'128) 。

bConfigSpatialHost8or9Clipping

当等于 1 时,指示将内部宏块的空间域块剪裁到主机上的 8 位范围,并且 nonintra 宏块的空间域块被剪裁到主机上的 9 位范围。 如果值为零,则表示主机未执行此类剪辑。 除非 bConfigSpatialResid8 等于零, bConfigResidDiffHost 等于 1,否则必须为零。 支持加速器的首选值为零。

bConfigSpatialResidInterleaved

如果等于 1,则表示任何空间域残差差数据都以与 YUV 格式的色度交错模式匹配的形式发送。 除非 bConfigResidDiffHost 为 1 且 YUV 格式为 NV12 或 NV21,否则必须为零。 支持加速器的首选值为零。

bConfigIntraResidUnsigned

指示使用基于主机的差异解码 (bConfigResidDiffHost 等于 1) 时,表示内部块残差数据的空间域块的表示方法。

bConfigIntraResidUnsigned 等于零且 bConfigResidDiffHost 等于 1 时,将按如下所示发送内部宏块的空间域残差数据块:

  • 在非输入图片中,如果 bConfigSpatialResid8 为零,则宏块内部的空间域残差差数据块将作为 16 位带符号整数值发送,相对于常量引用值为 2 (BPP-1) ,其中 BPP 是未压缩视频的每个样本的位数 (通常值为 8) 。
  • 在非图中,如果 bConfigSpatialResid8 为 1,在内部图片中 ,如果 BPP 等于 8 (而不考虑 bConfigSpatialResid8) 的值,则内部宏块的空间域残差数据块将作为 8 位有符号整数值发送,相对于常量引用值 128。
bConfigIntraResidUnsigned 等于 1 且 bConfigResidDiffHost 等于 1 时,将按如下所示发送内部宏块的空间域残差数据块:
  • 在非图中,如果 bConfigSpatialResid8 为零,则宏块内的空间域残差数据块将作为 16 位无符号整数值发送,相对于常量引用值为零。
  • 在非图中,如果 bConfigSpatialResid8 为 1,在内部图片中 ,如果 BPP 等于 8 (而不考虑 bConfigSpatialResid8) 的值,则内部宏块的空间域残差数据块将作为 8 位无符号整数值发送,相对于常量引用值为零。
bConfigIntraResidUnsigned 成员必须为零,除非 bConfigResidDiffHost 为 1。

对于 bConfigIntraResidUnsigned,支持加速器的首选值为零。

bConfigResidDiffAccelerator

包含加速器残差配置。 值为 1 表示可能从主机发送基于加速器的 IDCT 的转换域系数数据块。 值为零指定将不使用基于加速器的 IDCT。 如果 bConfigResidDiffHostbConfigResidDiffAccelerator 均为 1,则会在主机和加速器上执行一些残差解码,如宏块级控制命令所示。 如果 bConfigBitstreamRaw 为 1,则此成员必须为零。

对于 bConfigResidDiffAccelerator,加速器支持的首选值为 1。

bConfigResidDiffAcceleratorbConfigResidDiffHost 等于 1 时,可以基于宏块在主机和加速器之间共享残差解码。 这被视为比 bConfigResidDiffAccelerator 等于 1 且 bConfigResidDiffHost 等于零时更高级别的加速器功能。

bConfigHostInverseScan

指示是在主机还是加速器上执行转换域块处理的反向扫描。 值为 1 表示将在主机上执行转换域块的反向扫描,并且将针对任何转换系数发送绝对索引。 值为零表示将在加速器上执行反向扫描。 如果 bConfigResidDiffAccelerator 为零或 bConfig4GroupedCoefs 为 1,则此成员必须为零。

如果 bConfigResidDiffAccelerator 为 1,则支持加速器的首选值为 1。

bConfigSpecificIDCT

指示对主机外 IDCT 使用特定 IDCT 方法。 值为 1 表示使用ITU-T 建议 H.263 附件 W 中指定的 IDCT。 值为零表示任何符合的 IDCT 都可用于主机外 IDCT。 (除零和 1 以外的值保留供将来使用。)

如果 bConfigResidDiffAccelerator 为零,则此成员必须为零 (仅指示基于主机的残差解码) 。

注意 ITU-T 建议 H.263 的附件 W 不符合 MPEG-2 更正 2 的 IDCT 要求,因此 bConfigSpecificIDCT 不得与 MPEG-2 视频一起使用。
 

bConfig4GroupedCoefs

值为 1 表示将使用 DXVA_TCoef4Group 结构而不是 DXVA_TCoefSingle 结构发送主机外 IDCT 的转换系数。 如果 bConfigResidDiffAccelerator 为零或 bConfigHostInverseScan 为 1,则为零。

如果 bConfigResidDiffAccelerator 为 1,则支持加速器的首选值为零。

注解

对于某些类型的位流,强制每个宏块控制命令缓冲区中的宏块控制命令保持光栅顺序,这大大增加了必须处理的所需缓冲区数,或者需要对控件信息进行主机重新排序。 因此,支持任意顺序对解码过程有利。 例如,如果每个缓冲区内需要光栅扫描顺序,则 H.261 CIF 分辨率解码可能需要每个图片 36 个宏块控制缓冲区 (H.263 附件 K 的任意切片排序和矩形切片模式具有更严重影响,可能需要大量缓冲区。)

要求

要求
Header dxva.h (包括 Dxva.h)

另请参阅

DXVA_MBctrl_I_HostResidDiff_1

DXVA_MBctrl_I_OffHostIDCT_1

DXVA_MBctrl_P_HostResidDiff_1

DXVA_MBctrl_P_OffHostIDCT_1

DXVA_TCoef4Group

DXVA_TCoefSingle