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,将使用宏块控制命令缓冲区发送图片数据。 如果 ConfigResidDiffHost 或 ConfigResidDiffAccelerator 为 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。 如果 ConfigResidDiffHost 和 ConfigResidDiffAccelerator 为 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) |