DXVA2_ConfigPictureDecode 结构 (dxva2api.h)

描述 DXVA 解码器设备的配置。

语法

typedef struct _DXVA2_ConfigPictureDecode {
  GUID   guidConfigBitstreamEncryption;
  GUID   guidConfigMBcontrolEncryption;
  GUID   guidConfigResidDiffEncryption;
  UINT   ConfigBitstreamRaw;
  UINT   ConfigMBcontrolRasterOrder;
  UINT   ConfigResidDiffHost;
  UINT   ConfigSpatialResid8;
  UINT   ConfigResid8Subtraction;
  UINT   ConfigSpatialHost8or9Clipping;
  UINT   ConfigSpatialResidInterleaved;
  UINT   ConfigIntraResidUnsigned;
  UINT   ConfigResidDiffAccelerator;
  UINT   ConfigHostInverseScan;
  UINT   ConfigSpecificIDCT;
  UINT   Config4GroupedCoefs;
  USHORT ConfigMinRenderTargetBuffCount;
  USHORT ConfigDecoderSpecific;
} DXVA2_ConfigPictureDecode;

成员

guidConfigBitstreamEncryption

定义位流数据缓冲区的加密协议类型。 如果未应用加密,则值DXVA_NoEncrypt。 如果 ConfigBitstreamRaw 为 0,则必须DXVA_NoEncrypt该值。

guidConfigMBcontrolEncryption

定义宏块控制数据缓冲区的加密协议类型。 如果未应用加密,则值DXVA_NoEncrypt。 如果 ConfigBitstreamRaw 为 1,则必须DXVA_NoEncrypt该值。

guidConfigResidDiffEncryption

定义残差解码数据缓冲区的加密协议类型, (包含空间域数据或基于加速器的 IDCT) 转换域系数集的缓冲区。 如果未应用加密,则值DXVA_NoEncrypt。 如果 ConfigBitstreamRaw 为 1,则必须DXVA_NoEncrypt该值。

ConfigBitstreamRaw

指示主机解码器是否发送原始位流数据。 如果值为 1,则图片的数据将在位流缓冲区中作为原始位流内容发送。 如果值为 0,将使用宏块控制命令缓冲区发送图片数据。 如果 ConfigResidDiffHostConfigResidDiffAccelerator 为 1,则该值必须为 0。

ConfigMBcontrolRasterOrder

指定宏块控制命令是按光栅扫描顺序还是按任意顺序排列。 如果值为 1,则每个宏块控制命令缓冲区中的宏块控制命令按光栅扫描顺序排列。 如果值为 0,则顺序是任意的。 对于某些类型的位流,强制光栅顺序会大大增加必须处理的所需宏块控制缓冲区的数量,或者要求对控制信息进行主机重新排序。 因此,支持任意顺序可以更高效。

ConfigResidDiffHost

包含主机剩余差异配置。 如果值为 1,则某些残差解码数据可能会作为空间域中的块从主机发送。 如果值为 0,则不会发送空间域数据。

ConfigSpatialResid8

指示使用基于主机的残差解码时,用于表示预测 (非内部) 图片的残差空间域块的单词大小。

如果 ConfigResidDiffHost 为 1 且 ConfigSpatialResid8 为 1,则主机将为使用 8 位带符号样本的非内部宏块和预测 (非内部) 图片中的内部宏块发送残差空间域块,格式取决于 ConfigIntraResidUnsigned 的值:

  • 如果 ConfigIntraResidUnsigned 为 0,则相对于常量引用值 2^ (BPP-1) ,将内部宏块的空间域块作为 8 位有符号整数值发送。
  • 如果 ConfigIntraResidUnsigned 为 1,则相对于常量引用值 0,宏块内部的空间域块将作为 8 位无符号整数值发送。
如果 ConfigResidDiffHost 为 1 且 ConfigSpatialResid8 为 0,则主机将为使用 16 位带符号样本的非内部宏块和预测 (非内部) 图片中的内部宏块发送残差空间域数据块,其格式取决于 ConfigIntraResidUnsigned 的值:
  • 如果 ConfigIntraResidUnsigned 为 0,则相对于常量引用值 2^ (BPP-1) ,宏块内部的空间域块将作为 16 位有符号整数值发送。
  • 如果 ConfigIntraResidUnsigned 为 1,则相对于常量引用值 0,宏块内部的空间域块将作为 16 位无符号整数值发送。
如果 ConfigResidDiffHost 为 0, 则 ConfigSpatialResid8 必须为 0。

对于内部图片,如果每像素 (BPP) 的位数为 8,则必须使用 8 位样本发送空间域块;如果 BPP > 8,则使用 16 位样本。 如果 ConfigIntraResidUnsigned 为 0,则相对于常量引用值 2^ (BPP–1) ,这些样本将作为带符号整数值发送,如果 ConfigIntraResidUnsigned 为 1,则这些样本将作为相对于常量引用值 0 的无符号整数值发送。

ConfigResid8Subtraction

如果值为 1,则减去而不是添加 8 位差异溢出块。 除非 ConfigSpatialResid8 为 1,否则该值必须为 0。

通过减去差异而不是添加差异,8 位差异解码完全符合视频解码器规范中所需的全部±255 范围值, 因为 +255 不能表示为两个有符号 8 位数字的加法,但±255 范围内的任意数字都可以表示为两个有符号 8 位数字 (+255 = +127 减去 –128) 。

ConfigSpatialHost8or9Clipping

如果值为 1,则必须在主机上将内部宏块的空间域块剪裁到 8 位范围,并且必须将非内部宏块的空间域块剪裁到主机上的 9 位范围。 如果值为 0,则主机无需进行此类剪辑。

除非 ConfigSpatialResid8 为 0 且 ConfigResidDiffHost 为 1,否则该值必须为 0。

ConfigSpatialResidInterleaved

如果值为 1,则必须以与 YUV 格式交错模式匹配的色度交错形式发送任何空间域残差数据。 除非 ConfigResidDiffHost 为 1 且 YUV 格式为 NV12 或 NV21,否则该值必须为 0。

ConfigIntraResidUnsigned

指示使用基于主机的差异解码时表示内部块的剩余差异数据的空间域块的方法。

如果 ConfigResidDiffHost 为 1 且 ConfigIntraResidUnsigned 为 0,则必须按如下所示发送内部宏块的空间域残差数据块:

  • 在非内部图片中,如果 ConfigSpatialResid8 为 0,则内部宏块的空间域残差数据块将作为相对于常量引用值 2^ (BPP-1) 的 16 位有符号整数值发送。
  • 在非内部图片中,如果 ConfigSpatialResid8 为 1,则内部宏块的空间域残差数据块将作为相对于常量引用值 2^ (BPP-1) 的 8 位有符号整数值发送。
  • 在内部图片中,如果 BPP 为 8,则相对于 BPP–1) 常量引用值 2^ (BPP-1 的 8 位带符号整数值发送内部宏块的空间域剩余差异数据块,而不考虑 ConfigSpatialResid8 的值。
如果 ConfigResidDiffHost 为 1 且 ConfigIntraResidUnsigned 为 1,则必须按如下所示发送内部宏块的空间域残差数据块:
  • 在非内部图片中,如果 ConfigSpatialResid8 为 0,则内部宏块的空间域残差数据块必须作为相对于常量引用值 0 的 16 位无符号整数值发送。
  • 在非内部图片中,如果 ConfigSpatialResid8 为 1,则相对于常量引用值 0,内部宏块的空间域残差数据块将作为 8 位无符号整数值发送。
  • 在图内图中,如果 BPP 为 8,则相对于常量引用值 0,无论 ConfigSpatialResid8 的值如何,宏块中的空间域剩余差异数据块都作为 8 位无符号整数值发送。
成员的值必须为 0,除非 ConfigResidDiffHost 为 1。

ConfigResidDiffAccelerator

如果值为 1,则可能会从基于加速器的 IDCT 的主机发送系数数据的转换域块。 如果值为 0,则不会使用基于加速器的 IDCT。 如果 ConfigResidDiffHostConfigResidDiffAccelerator 均为 1,则表示某些残差解码将在主机上和加速器上执行,如宏块级控制命令所示。

如果 ConfigBitstreamRaw 为 1,则该值必须为 0。

ConfigHostInverseScan

如果值为 1,则会在主机上执行转换域块处理的反向扫描,并且将针对任何转换系数发送绝对索引。 如果值为 0,则将在加速器上执行反向扫描。

如果 ConfigResidDiffAccelerator 为 0 或 Config4GroupedCoefs 为 1,则该值必须为 0。

ConfigSpecificIDCT

如果值为 1,则使用ITU-T 建议 H.263 的附件 W 中指定的 IDCT。 如果值为 0,则任何合规的 IDCT 都可用于主机外 IDCT。

H.263 附件不符合 MPEG-2 更正 2 的 IDCT 要求,因此该值不得为 1 才能用于 MPEG-2 视频。

如果 ConfigResidDiffAccelerator 为 0,则该值必须为 0,表示纯基于主机的残差解码。

Config4GroupedCoefs

如果值为 1,则将使用 DXVA_TCoef4Group 结构发送主机外 IDCT 的转换系数。 如果值为 0,则使用 DXVA_TCoefSingle 结构。 如果 ConfigResidDiffAccelerator 为 0 或 ConfigHostInverseScan 为 1,则该值必须为 0。

ConfigMinRenderTargetBuffCount

指定解码器设备一次处理多少帧。

ConfigDecoderSpecific

包含解码器特定的配置信息。

要求

要求
最低受支持的客户端 Windows Vista [仅限桌面应用]
最低受支持的服务器 Windows Server 2008 [仅限桌面应用]
标头 dxva2api.h

另请参阅

DirectX 视频加速 2.0

媒体基础结构