D3D11_1DDI_VIDEO_DECODER_CONFIG结构 (d3d10umddi.h)

介绍 Microsoft DirectX 视频加速(DXVA)Microsoft Direct3D 11 解码器设备的配置。

语法

typedef struct D3D11_1DDI_VIDEO_DECODER_CONFIG {
  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;
} D3D11_1DDI_VIDEO_DECODER_CONFIG;

成员

guidConfigBitstreamEncryption

定义位流数据缓冲区的加密协议类型。 如果未应用加密,则该值 DXVA_NoEncrypt(在 Dxva.h 中定义的 GUID 名称)。 如果 ConfigBitstreamRaw 为 0,则必须 DXVA_NoEncrypt该值。

如果设置为 D3DWDDM2_0DDI_DECODER_ENCRYPTION_HW_CENC,则表示以下参数将传入 VideoDecoderBeginFrame 调用:

含义
pContentKey 指向 D3DWDDM2_0DDI_VIDEO_DECODER_BEGIN_FRAME_CRYPTO_SESSION 结构的指针,指示用于解密帧的 CryptoSession 和关键信息。
ContentKeySize 设置为 D3DWDDM2_0DDI_VIDEO_DECODER_BEGIN_FRAME_CRYPTO_SESSION 结构的大小。

guidConfigMBcontrolEncryption

定义宏块控制数据缓冲区的加密协议类型。 如果未应用加密,则该值 DXVA_NoEncrypt(在 Dxva.h 中定义的 GUID 名称)。 如果 ConfigBitstreamRaw 为 1,则必须 DXVA_NoEncrypt该值。

guidConfigResidDiffEncryption

定义用于对数据缓冲区进行残差解码的加密协议类型(包含空间域数据或用于基于加速器的反离散余弦转换 [IDCT] 的转换域系数集的缓冲区)。 如果未应用加密,则该值 DXVA_NoEncrypt(在 Dxva.h 中定义的 GUID 名称)。 如果 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,则宏块的空间域块将作为 8 位有符号整数值发送,相对于常量引用值为 2^(BPP–1)。
  • 如果 ConfigIntraResidUnsigned 为 1,则宏块的空间域块将作为 8 位无符号整数值发送到相对于常量引用值为 0 的 0。

如果 ConfigResidDiffHost 为 1,ConfigSpatialResid8 为 0, 主机将使用 16 位带符号样本为非宏块发送非内部宏块的残差空间域块,并在预测(非内部)图片中发送残差空间域数据块,格式取决于 ConfigIntraResidUnsigned

  • 如果 ConfigIntraResidUnsigned 为 0,则宏块内空间域块作为 16 位有符号整数值发送,相对于常量引用值为 2^(BPP–1)。
  • 如果 ConfigIntraResidUnsigned 为 1,则相对于常量引用值为 0 的 16 位无符号整数值,将宏块的空间域块作为 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,主机无需进行此类剪辑。

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

ConfigSpatialResidInterleaved

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

ConfigIntraResidUnsigned

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

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

  • 在非内部图片中,如果 ConfigSpatialResid8 为 0,则相对于常量引用值为 2^(BPP–1)的 16 位有符号整数值,将宏块的空间域残差数据块作为 16 位有符号整数值发送。
  • 在非内部图片中,如果 ConfigSpatialResid8 为 1,则会将宏块的空间域残差数据块作为 8 位有符号整数值发送,相对于常量引用值为 2^(BPP–1)。
  • 在图中,如果 BPP 为 8,则无论 ConfigSpatialResid8 的值如何,宏块的空间域残差数据块都作为 8 位有符号整数值作为 8 位有符号整数值发送。

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

  • 在非内部图片中,如果 ConfigSpatialResid8 为 0,则必须将宏块的空间域残差数据块作为 16 位无符号整数值发送到相对于常量引用值 0。
  • 在非内部图片中,如果 ConfigSpatialResid8 为 1,则相对于常量引用值为 0 的 8 位无符号整数值,将宏块的空间域残差数据块作为 8 位无符号整数值发送。
  • 在图中,如果 BPP 为 8,则无论 ConfigSpatialResid8 的值如何,宏块的空间域残差数据块都作为 8 位无符号整数值作为 8 位无符号整数值发送。

除非 ConfigResidDiffHost 为 1,否则成员的值必须为 0。

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 8
支持的最低服务器 Windows Server 2012
标头 d3d10umddi.h (包括 D3d10umddi.h)

另请参阅

D3DWDDM2_0DDI_VIDEO_DECODER_BEGIN_FRAME_CRYPTO_SESSION

DXVA_TCoef4Group

DXVA_TCoefSingle