D3D11_VIDEO_DECODER_CONFIG 结构 (d3d11.h)

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

语法

typedef struct D3D11_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_VIDEO_DECODER_CONFIG;

成员

guidConfigBitstreamEncryption

如果使用 D3D11CryptoSession 机制加密位流数据缓冲区,则应将此 GUID 设置为零。 如果未应用加密,则值 DXVA_NoEncrypt。 如果 ConfigBitstreamRaw 为 0,则必须 DXVA_NoEncrypt该值。

guidConfigMBcontrolEncryption

如果使用 D3D11CryptoSession 机制加密宏块控制数据缓冲区,则应将此 GUID 设置为零。 如果未应用加密,则值 DXVA_NoEncrypt。 如果 ConfigBitstreamRaw 为 1,则必须 DXVA_NoEncrypt该值。

guidConfigResidDiffEncryption

如果使用 D3D11CryptoSession 机制加密残差解码数据缓冲区,则应将此 GUID 设置为零。 如果未应用加密,则值 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,则内部宏块的空间域块将作为 8 位带符号整数值发送,相对于常量引用值为 2^ (BPP–1) 。
  • 如果 ConfigIntraResidUnsigned 为 1,则内部宏块的空间域块将作为相对于常量引用值为 0 的 8 位无符号整数值发送。
如果 ConfigResidDiffHost 为 1 且 ConfigSpatialResid8 为 0,则主机将使用 16 位带符号样本为非内部宏块和预测 (非内部) 宏块中的数据发送残差空间域块,其格式取决于 ConfigIntraResidUnsigned 的值:
  • 如果 ConfigIntraResidUnsigned 为 0,则宏块内部的空间域块将作为 16 位带符号整数值发送,相对于常量引用值为 2^ (BPP–1) 。
  • 如果 ConfigIntraResidUnsigned 为 1,则宏块内部的空间域块将作为相对于常量引用值为 0 的 16 位无符号整数值发送。
如果 ConfigResidDiffHost 为 0, 则 ConfigSpatialResid8 必须为 0。

对于内部图片,如果每像素 (BPP) 位为 8,则必须使用 8 位样本发送空间域块;如果 BPP > 8,则使用 16 位样本。 如果 ConfigIntraResidUnsigned 为 0,则相对于 BPP–1) 的常量引用值为 2^ (,这些样本将作为带符号整数值发送,如果 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,则内部宏块的空间域残差数据块将作为 16 位有符号整数值发送,相对于常量引用值为 2^ (BPP–1) 。
  • 在非内部图片中,如果 ConfigSpatialResid8 为 1,则内部宏块的空间域残差数据块将作为 8 位带符号整数值发送,相对于常量引用值为 2^ (BPP–1) 。
  • 在内部图片中,如果 BPP 为 8,则无论 ConfigSpatialResid8 的值如何,宏块内部的空间域残差差数据块将作为 8 位有符号整数值发送,相对于常量引用值为 2^ (BPP–1) 。
如果 ConfigResidDiffHost 为 1 且 ConfigIntraResidUnsigned 为 1,则必须按如下所示发送内部宏块的空间域残差数据块:
  • 在非内部图片中,如果 ConfigSpatialResid8 为 0,则内部宏块的空间域残差数据块必须作为相对于常量引用值 0 的 16 位无符号整数值发送。
  • 在非内部图片中,如果 ConfigSpatialResid8 为 1,则内部宏块的空间域残差数据块将作为相对于常量引用值 0 的 8 位无符号整数值发送。
  • 在内部图片中,如果 BPP 为 8,则无论 ConfigSpatialResid8 的值如何,宏块内部的空间域残差差数据块都以 8 位无符号整数值(相对于常量引用值 0)发送。
成员的值必须为 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 Corrigendum 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 [桌面应用 |UWP 应用]
最低受支持的服务器 Windows Server 2012 [桌面应用 |UWP 应用]
标头 d3d11.h

另请参阅

Direct3D 11 视频结构