共用方式為


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

表示超解析度的組態。 啟用超解析度時,必須大於或等於 D3D12_VIDEO_ENCODER_AV1_SUPERRES_DENOM_MIN(如AV1編解碼器標準所定義)。

OrderHint

目前的框架order_hint AV1 語法。 OrderHint 必須一律傳遞,即使未在 AV1 位數據流中撰寫順序提示,也必須反映畫面的顯示順序。

PictureIndex

此圖文框的唯一圖片索引,將用來唯一識別為未來畫面格的參考。 此參數與 AV1 標準語法沒有任何關聯,但只用於 D3D API 用戶端實作追蹤。

API 用戶端應該將第一個 D3D12DDI_VIDEO_ENCODER_AV1_FRAME_TYPE_0095_KEY_FRAME 的這個值初始化為 0,並在每個後續畫面上將其遞增一個,直到下一個 D3D12DDI_VIDEO_ENCODER_AV1_FRAME_TYPE_0095_KEY_FRAME為止,當它應該重設為零,並遵循相同的程式。

OrderHint 無法用於此目的,因為它的 [0..2^(OrderHintBitsMinus1+1)]範圍上限,可以包裝,而且無法做為框架及其參考的唯一標識碼。

TemporalLayerIndexPlus1

圖片時態層索引加上一個。 值為零表示未使用時態延展性。 此值必須介於 [0..D3D12DDI_VIDEO_ENCODER_AV1_CODEC_CONFIGURATION_SUPPORT_0095範圍內。MaxTemporalLayers]。

SpatialLayerIndexPlus1

圖片空間圖層索引加上一個。 值為零表示未使用空間延展性。 此值必須位於 [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。 參考索引(即 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-th 參考類型儲存在 DPB 中。 換句話說,ReferenceFramesReconPictureDescriptors[ReferenceIndices[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 對應值。 您可以使用目前的解析度來計算 QP 地圖維度,並 D3D12DDI_VIDEO_ENCODER_RESOLUTION_SUPPORT_LIMITS_0080_2。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 編解碼器標準 bitstream 語法)
    • 針對 ReferenceFramesReconPictureDescriptors中的所有數位專案,重新建構的PictureResourceIndex 必須設定為 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. 使用參考編碼框架類型時(即SWITCH/INTER):

    • PrimaryRefFrame 指定哪些參考框架包含 CDF 值和其他必須在框架開頭載入的狀態。

    • RefreshFrameFlags 必須據此設定,以指出在編碼執行之後,哪些 ReferenceFramesReconPictureDescriptors DPB 位置上放置目前編碼的畫面重建圖片。 此值必須完全符合 API 用戶端在目前畫面的相關聯圖片標頭中,refresh_frame_flags AV1 語法元素的程式代碼。

    • ReferenceFramesReconPictureDescriptors 中的陣列專案, 目前框架的陣列專案將完全符合上一個框架所指示的 refreshFrameFlags

      • 例如:如果 RefreshFrameFlags 指出目前的框架 N 會放在位置 2、3 和 6 中,則在下一個 EncodeFrame 呼叫框架 N+1, ReferenceFramesReconPictureDescriptors[1], ReferenceFramesReconPictureDescriptors[2], ReferenceFramesReconPictureDescriptors[5] 參數中的專案 参数,D3D12DDI_VIDEO_ENCODE_REFERENCE_FRAMES_0080

      • 請注意,這包括考慮 RefreshFrameFlags=0xFF D3D12DDI_VIDEO_ENCODER_AV1_FRAME_TYPE_0095_KEY_FRAME,方法是標記指向 KEY 畫面格重建圖片的所有 ReferenceFramesReconPictureDescriptors 專案。

      • 如果 (非主要畫面格) 圖片不會標示為 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 語法定義,不需要數位專案值是唯一的。

    • 如果 ReferenceFramesReconPictureDescriptors[ReferenceIndices[i]]。 重新建構的PictureResourceIndex == D3D12_VIDEO_ENCODER_AV1_INVALID_DPB_RESOURCE_INDEX

      • 這表示參考圖片 i-th 不會用於目前的畫面,而且必須忽略。
    • 否則 (Valid 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] != {0..7} } 中 j D3D12_VIDEO_ENCODER_AV1_INVALID_DPB_RESOURCE_INDEX
      • ppTexture2Ds = { compact array (no null entries) 包含從先前編碼的畫面重建的圖片,這些圖片將用作參考 }
      • [僅限紋理陣列模式] pSubresources = { compact array (no null entries) 包含先前編碼框架中紋理陣列的子資源索引,這些索引將用作參考 }
  3. 在沒有參考的情況下編碼框架類型時,但不清除 DPB (亦即。INTRA_ONLY)

    • PrimaryRefFrame 必須是 7 (PRIMARY_REF_NONE)

    • RefreshFrameFlags 必須據此設定,以指出在編碼執行之後,哪些 ReferenceFramesReconPictureDescriptors DPB 位置上放置目前編碼的畫面重建圖片。 此值必須完全符合 API 用戶端在目前畫面的相關聯圖片標頭中,refresh_frame_flags AV1 語法元素的程式代碼。

    • ReferenceFramesReconPictureDescriptors 中的陣列專案, 目前框架的陣列專案將完全符合上一個畫面格所指示的 RefreshFrameFlags。

    • ReferenceIndices[7] 中的值會被忽略,因為僅限內部框架不會使用任何參考。

    • D3D12DDI_VIDEO_ENCODE_REFERENCE_FRAMES_0080 包含 DPB 快照集,並將填入為:

      • NumTexture2Ds = {ReferenceFramesReconPictureDescriptors的唯一 值數目 。重新建構的PictureResourceIndex[j] != {0.7} } 中 j D3D12_VIDEO_ENCODER_AV1_INVALID_DPB_RESOURCE_INDEX
      • ppTexture2Ds = { compact array (no null entries) 包含來自 ReferenceFramesReconPictureDescriptors所參照之先前編碼畫面的重建圖片。重新建構的PictureResourceIndex[j] for j in {0..7} }
      • [僅限紋理陣列模式] pSubresources = { compact array (no null entries) 包含先前由 ReferenceFramesReconPictureDescriptors 所參照之紋理陣列的子資源索引。RebuildedPictureResourceIndex[j] for j in {0..7} } 中 j 所参照的子資源索引。

如需詳細資訊,請參閱 D3D12 AV1 視訊編碼

要求

要求 價值
最低支援的用戶端 Windows 11 版本 24H2 (WDDM 3.2)
標頭 d3d12umddi.h

另請參閱

D3D12DDI_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_0082_0