D3D12DDI_VIDEO_ENCODER_AV1_PICTURE_CONTROL_CODEC_DATA_0095 结构 (d3d12umddi.h)

D3D12DDI_VIDEO_ENCODER_AV1_PICTURE_CONTROL_CODEC_DATA_0095 结构是一个全面的配置结构,其中包含用于控制 AV1 图片 (帧) 编码所需的所有参数。

语法

typedef struct D3D12DDI_VIDEO_ENCODER_AV1_PICTURE_CONTROL_CODEC_DATA_0095 {
  D3D12DDI_VIDEO_ENCODER_AV1_PICTURE_CONTROL_0095_FLAGS           Flags;
  D3D12DDI_VIDEO_ENCODER_AV1_FRAME_TYPE_0095                      FrameType;
  D3D12DDI_VIDEO_ENCODER_AV1_COMP_PREDICTION_TYPE_0095            CompoundPredictionType;
  D3D12DDI_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS_0095           InterpolationFilter;
  D3D12DDI_VIDEO_ENCODER_AV1_RESTORATION_CONFIG_0095              FrameRestorationConfig;
  D3D12DDI_VIDEO_ENCODER_AV1_TX_MODE_0095                         TxMode;
  UINT                                                            SuperResDenominator;
  UINT                                                            OrderHint;
  UINT                                                            PictureIndex;
  UINT                                                            TemporalLayerIndexPlus1;
  UINT                                                            SpatialLayerIndexPlus1;
  D3D12DDI_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_DESCRIPTOR_0095    ReferenceFramesReconPictureDescriptors[8];
  UINT                                                            ReferenceIndices[7];
  UINT                                                            PrimaryRefFrame;
  UINT                                                            RefreshFrameFlags;
  D3D12DDI_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_CONFIG_0095        LoopFilter;
  D3D12DDI_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_DELTA_CONFIG_0095  LoopFilterDelta;
  D3D12DDI_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_CONFIG_0095       Quantization;
  D3D12DDI_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_DELTA_CONFIG_0095 QuantizationDelta;
  D3D12DDI_VIDEO_ENCODER_AV1_CDEF_CONFIG_0095                     CDEF;
  UINT                                                            QPMapValuesCount;
  INT16                                                           *pRateControlQPMap;
  D3D12DDI_VIDEO_ENCODER_AV1_SEGMENTATION_CONFIG_0095             CustomSegmentation;
  D3D12DDI_VIDEO_ENCODER_AV1_SEGMENTATION_MAP_0095                CustomSegmentsMap;
} D3D12DDI_VIDEO_ENCODER_AV1_PICTURE_CONTROL_CODEC_DATA_0095;

成员

Flags

一个D3D12DDI_VIDEO_ENCODER_AV1_PICTURE_CONTROL_0095_FLAGS枚举,指定要编码的帧的标志。

FrameType

指定要编码的帧类型的 D3D12DDI_VIDEO_ENCODER_AV1_FRAME_TYPE_0095 枚举。

CompoundPredictionType

指定要使用的复合预测类型的 D3D12DDI_VIDEO_ENCODER_AV1_COMP_PREDICTION_TYPE_0095 枚举。 与 AV1 语法reference_select相关。

InterpolationFilter

一个D3D12DDI_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS_0095枚举,指定用于当前帧间预测的内插筛选器。 与语法interpolation_filter相关。

FrameRestorationConfig

指定要使用的帧还原配置的 D3D12DDI_VIDEO_ENCODER_AV1_RESTORATION_CONFIG_0095 结构。

TxMode

一个D3D12DDI_VIDEO_ENCODER_AV1_TX_MODE_0095枚举,指定要使用的转换模式。

SuperResDenominator

指示超分辨率的配置。 启用超级分辨率时,必须大于 或等于 AV1 编解码器标准) 定义的 D3D12_VIDEO_ENCODER_AV1_SUPERRES_DENOM_MIN (。

OrderHint

当前帧order_hint AV1 语法。 即使不在 AV1 位流中编码顺序提示,也必须始终传递 OrderHint,并且它必须反映帧的显示顺序。

PictureIndex

此帧的唯一图片索引,用于将其唯一标识为未来帧的引用。 此参数与 AV1 标准语法没有任何关系,而仅用于 D3D API 客户端实现跟踪。

对于第一个 D3D12DDI_VIDEO_ENCODER_AV1_FRAME_TYPE_0095_KEY_FRAME,API 客户端应在 0 处初始化此值,并在每个后续帧上按 1 递增该值,直到下一 个D3D12DDI_VIDEO_ENCODER_AV1_FRAME_TYPE_0095_KEY_FRAME,此时应将其重置为零并遵循相同的过程。

OrderHint 不能用于此目的,因为它的最大范围 [0..2^(OrderHintBitsMinus1+1)]是 ,它可以环绕,不能用作帧及其引用的唯一标识符。

TemporalLayerIndexPlus1

图片时态层索引加 1。 值为零表示未使用临时可伸缩性。 此值必须在 [0.. 范围内。D3D12DDI_VIDEO_ENCODER_AV1_CODEC_CONFIGURATION_SUPPORT_0095。MaxTemporalLayers]。

SpatialLayerIndexPlus1

图片空间层索引加 1。 值为零表示未使用空间可伸缩性。 此值必须在 [0..D3D12DDI_VIDEO_ENCODER_AV1_CODEC_CONFIGURATION_SUPPORT_0095.MaxSpatialLayers] 范围内。

ReferenceFramesReconPictureDescriptors[8]

描述完整 ( 的当前状态快照的D3D12DDI_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_DESCRIPTOR_0095结构数组。包括当前帧未使用但由未来帧使用的帧等,) DPB 缓冲区保留在D3D12DDI_VIDEO_ENCODER_PICTURE_CONTROL_DESC_0082_0中。ReferenceFrames。 引用索引 (ie。last、altref 等) 从过去/将来引用映射到此描述符数组中。 AV1 编解码器允许 DPB 中最多 8 个引用。

此描述符数组反过来会将此帧的参考图片映射到重新构造的图片数组D3D12DDI_VIDEO_ENCODER_PICTURE_CONTROL_DESC_0082_0.ReferenceFrames 中的资源索引。

此数组的大小始终与D3D12_VIDEO_ENCODER_PICTURE_CONTROL_DESC匹配。关联的 EncodeFrame 命令的 ReferenceFrames.NumTextures。

ReferenceIndices[7]

对应于 ref_frame_idx[i] AV1 语法。 对于引用类型 i,ReferenceIndices[i] 指示 [0..7] 到 ReferenceFramesReconPictureDescriptors 之间的索引,其中当前帧 i 引用类型存储在 DPB 中。 换句话说 ,ReferenceFramesReconPictureDescriptors[ReferenceIndices[i]] 包含第 i 个引用类型的 DPB 描述符。

ReferenceIndices[] 的第 i 个条目对应于每个引用类型,如下所示。

索引 i 引用类型 ReferenceFramesReconPictureDescriptors[ReferenceIndices[i]]
0 上一个 Last 的 DPB 描述符
1 Last2 Last2 的 DPB 描述符
2 Last3 Last3 的 DPB 描述符
3 Golden 的 DPB 描述符
4 Bwdref Bwdref 的 DPB 描述符
5 Altref Altref 的 DPB 描述符
6 Altref2 Altref2 的 DPB 描述符

PrimaryRefFrame

对应于 uncompressed_header () 中的 AV1 元素语法primary_ref_frame。 指定哪个参考帧包含 CDF 值,以及必须在帧开头加载的其他状态。 允许的范围是 [0..7],值对应如下:

PrimaryRefFrame 值 AV1 语法值 (primary_ref_frame) 已选择参考框架
0 0 上一个
1 1 Last2
2 2 Last3
3 3
4 4 Bwdref
5 5 Altref
6 6 Altref2
7 7 (PRIMARY_REF_NONE)

RefreshFrameFlags

对应于 refresh_frame_flags AV1 语法元素。

LoopFilter

指定要使用的循环筛选器参数 的D3D12DDI_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_CONFIG_0095 结构。

LoopFilterDelta

一个D3D12DDI_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_DELTA_CONFIG_0095结构,用于指定要使用的循环筛选器增量参数。

Quantization

指定要使用的量化参数的 D3D12DDI_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_CONFIG_0095 结构。

QuantizationDelta

指定要使用的量化增量参数的 D3D12DDI_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_DELTA_CONFIG_0095 结构。

CDEF

一种D3D12DDI_VIDEO_ENCODER_AV1_CDEF_CONFIG_0095结构,指定要使用的受约束方向增强筛选 (CDEF) 参数。

QPMapValuesCount

包含 pRateControlQPMap 中存在的元素数。 此值必须与帧中的编码块数匹配,从而将帧分辨率向上舍入到最接近的对齐值。

pRateControlQPMap

数组,按行/列扫描顺序包含要用于此帧的每个平方区域上的 QP 映射值。 可以使用当前分辨率和 D3D12DDI_VIDEO_ENCODER_RESOLUTION_SUPPORT_LIMITS_0080_2计算 QP 地图维度。QPMapRegionPixelsSize 表示平方区域大小。 Delta QP 值的范围为 [-255;255].

CustomSegmentation

一个D3D12DDI_VIDEO_ENCODER_AV1_SEGMENTATION_CONFIG_0095结构,用于指定要使用的自定义分段参数。 仅在为当前帧设置 D3D12DDI_VIDEO_ENCODER_AV1_PICTURE_CONTROL_0095_FLAG_ENABLE_FRAME_SEGMENTATION_CUSTOM 时才使用。

CustomSegmentsMap

仅在为当前帧设置 D3D12DDI_VIDEO_ENCODER_AV1_PICTURE_CONTROL_0095_FLAG_ENABLE_FRAME_SEGMENTATION_CUSTOM 时才使用。 一个D3D12DDI_VIDEO_ENCODER_AV1_SEGMENTATION_MAP_0095结构,指定在设置了 CustomSegmentation.UpdateMap 时要使用的自定义分段映射。 否则,段映射将继承自参考帧。

注解

DPB 管理预期

下面是 API 客户端和驱动程序在使用此 API 时必须遵循的协定:

  1. 编码 D3D12DDI_VIDEO_ENCODER_AV1_FRAME_TYPE_0095_KEY_FRAME时:

    • PrimaryRefFrame 必须为 7 (PRIMARY_REF_NONE)
    • RefreshFrameFlags 必须0xFF (符合 AV1 编解码器标准位流语法)
    • 对于 ReferenceFramesReconPictureDescriptors 中的所有数组条目,必须将 ReconstructedPictureResourceIndex 设置为 D3D12_VIDEO_ENCODER_AV1_INVALID_DPB_RESOURCE_INDEX
    • ReferenceIndices[7] 中的值是模糊的,因为根据上述点,任何值 [0..7] 都将指向 ReferenceFramesReconPictureDescriptors 中未使用的 DPB 槽。
    • D3D12DDI_VIDEO_ENCODE_REFERENCE_FRAMES_0082_0 将填充为:
      • NumTexture2Ds = 0
      • ppTexture2Ds = NULL
      • pSubresources = NULL
  2. 使用引用对帧类型进行编码时, (ie。SWITCH/INTER) :

    • PrimaryRefFrame 指定哪个引用帧包含 CDF 值和必须在帧开头加载的其他状态。

    • 必须相应地设置 RefreshFrameFlags,以指示在编码执行后将放置当前编码的帧重建图片的 DPB 槽上的 ReferenceFramesReconPictureDescriptors DPB 槽。 此值必须与 API 客户端将为当前帧的关联图片标头中的 refresh_frame_flags AV1 语法元素编写的内容完全匹配。

    • 当前帧的 ReferenceFramesReconPictureDescriptors 中的数组条目将完全遵循为上一帧指示的 RefreshFrameFlag。

      • 例如:如果 RefreshFrameFlags 指示当前帧 N 将放置在槽 2 中, 3 和 6,然后在下一帧 N+1 的 EncodeFrame 调用中,Entries ReferenceFramesReconPictureDescriptors[1]、ReferenceFramesReconPictureDescriptors[2]、ReferenceFramesReconPictureDescriptors[5] 参数必须指向 D3D12DDI_VIDEO_ENCODE_REFERENCE_FRAMES_0080

      • 请注意,这包括通过标记指向关键帧重建图片的所有 ReferenceFramesReconPictureDescriptors 条目来考虑为D3D12DDI_VIDEO_ENCODER_AV1_FRAME_TYPE_0095_KEY_FRAME设置 RefreshFrameFlags=0xFF。

      • 如果 (非关键帧) 图片不会标记为 D3D12DDI_VIDEO_ENCODER_PICTURE_CONTROL_FLAG_0080_USED_AS_REFERENCE_PICTURE,则其 RefreshFrameFlags 必须为零才能指示这一点。

    • ReferenceIndices[7] 中的值位于 [0..7] 内,并指向 ReferenceFramesReconPictureDescriptors 中的 DPB 槽。

    • ReferenceIndices[7] 的值必须与ref_frame_idx图片标头中的 API 客户端代码完全匹配。

    • 根据 ref_frame_idx AV1 语法定义,数组条目值不要求唯一。

    • If ReferenceFramesReconPictureDescriptors[ReferenceIndices[i]]。 ReconstructedPictureResourceIndex == D3D12_VIDEO_ENCODER_AV1_INVALID_DPB_RESOURCE_INDEX

      • 这表示参考图片 i 不会用于当前帧,必须忽略。
    • 否则, (有效的 ReferenceFramesReconPictureDescriptors[ReferenceIndices[i]]。 ReconstructedPictureResourceIndex)

      • 这表示引用 i 将指向 DPB 槽 ReferenceIndices[i] ,并且要使用的重建图片 D3D12DDI_VIDEO_ENCODE_REFERENCE_FRAMES_0080ppTexture2Ds[ReferenceFramesReconPictureDescriptors[ReferenceIndices[i]]。ReconstructedPictureResourceIndex]
    • D3D12DDI_VIDEO_ENCODE_REFERENCE_FRAMES_0080 将填充为:

      • NumTexture2Ds = { ReferenceFramesReconPictureDescriptors 的唯一值数。ReconstructedPictureResourceIndex[j] != D3D12_VIDEO_ENCODER_AV1_INVALID_DPB_RESOURCE_INDEX for j in {0..7} }
      • ppTexture2Ds = { compact array (没有空条目) 包含将用作引用的先前编码帧中重建的图片 }
      • [仅限纹理数组模式] pSubresources = { compact array (没有 null 条目,) 包含将用作引用的先前编码帧中的纹理数组的子资源索引 }
  3. 在没有引用但未清除 DPB (ie 的情况下对帧类型进行编码时。INTRA_ONLY)

    • PrimaryRefFrame 必须为 7 (PRIMARY_REF_NONE)

    • 必须相应地设置 RefreshFrameFlags,以指示在编码执行后将放置当前编码的帧重建图片的 DPB 槽上的 ReferenceFramesReconPictureDescriptors DPB 槽。 此值必须与 API 客户端将为当前帧的关联图片标头中的 refresh_frame_flags AV1 语法元素编写的内容完全匹配。

    • 当前帧的 ReferenceFramesReconPictureDescriptors 中的数组条目将完全遵循为上一帧指示的 RefreshFrameFlag。

    • ReferenceIndices[7] 中的值将被忽略,因为仅限内部的帧不使用任何引用。

    • D3D12DDI_VIDEO_ENCODE_REFERENCE_FRAMES_0080 包含 DPB 快照,并将填充为:

      • NumTexture2Ds = {ReferenceFramesReconPictureDescriptors的唯一值数。ReconstructedPictureResourceIndex[j] != D3D12_VIDEO_ENCODER_AV1_INVALID_DPB_RESOURCE_INDEX for j in {0..7} }
      • ppTexture2Ds = { compact array (无 null 条目,) 包含 ReferenceFramesReconPictureDescriptors 引用的先前编码帧中重建的图片。 {0..7} 中为 j 的重建图片ResourceIndex[j]
      • [仅限纹理数组模式] pSubresources = { compact array (没有 null 条目) 包含 由 ReferenceFramesReconPictureDescriptors 引用的先前编码帧的纹理数组的子资源索引。 {0..7} 中为 j 的重建图片ResourceIndex[j]

有关详细信息,请参阅 D3D12 AV1 视频编码

要求

要求
最低受支持的客户端 Windows 11 版本 24H2 (WDDM 3.2)
标头 d3d12umddi.h

另请参阅

D3D12DDI_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_0082_0