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 語法。 即使未在 AV1 位數據流中撰寫順序提示程序代碼,OrderHint 也必須一律傳遞,而且必須反映畫面的顯示順序。
PictureIndex
此框架的唯一圖片索引,將用來唯一識別為未來畫面格的參考。 此參數與 AV1 標準語法無關,但只用於 D3D API 用戶端實作追蹤。
API 用戶端應該在第一個 D3D12DDI_VIDEO_ENCODER_AV1_FRAME_TYPE_0095_KEY_FRAME 初始化這個值,並在每個後續畫面上將此值遞增一個,直到下一個 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]] 包含 i-th 參考類型的 DPB 描述元。
ReferenceIndices[] 的第 i 個項目對應至每個參考類型,如下所示。
索引 i | 參考型別 | ReferenceFramesReconPictureDescriptors[ReferenceIndices[i]] |
---|---|---|
0 | Last | 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 | Last |
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 時必須符合的合約:
編碼 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
使用參考 (編碼框架類型時。SWITCH/INTER) :
PrimaryRefFrame 會指定哪些參考框架包含CDF值,以及必須在框架開頭載入的其他狀態。
RefreshFrameFlags 必須據以設定,以指出在編碼執行之後,將放置目前編碼畫面重建圖片的 ReferenceFramesReconPictureDescriptors DPB 位置。 此值必須完全符合 API 用戶端在目前畫面的相關聯圖片標頭中,refresh_frame_flags AV1 語法元素的程式代碼。
目前框架的 ReferenceFramesReconPictureDescriptors 中的陣列專案會完全符合上一個畫面格所指出 的 RefreshFrameFlags 。
例如:如果 RefreshFrameFlags 指出目前的框架 N 將會放在位置 2 中, 3 和 6,然後在下一個 Frame N+1 的 EncodeFrame 呼叫中,在 ReferenceFramesReconPictureDescriptors[1]、ReferenceFramesReconPictureDescriptors[2]、ReferenceFramesReconPictureDescriptors[5] 參數中,重新建構的PictureResourceIndex 參數必須指向D3D12DDI_VIDEO_ENCODE_REFERENCE_FRAMES_0080。
請注意,這包括考慮針對D3D12DDI_VIDEO_ENCODER_AV1_FRAME_TYPE_0095_KEY_FRAME的 RefreshFrameFlags=0xFF,方法是標記指向 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 語法定義,不需要數位專案值是唯一的。
If ReferenceFramesReconPictureDescriptors[ReferenceIndices[i]]。 ReconstructedPictureResourceIndex == D3D12_VIDEO_ENCODER_AV1_INVALID_DPB_RESOURCE_INDEX
- 這表示參考圖片 i-th 不會用於目前框架,而且必須忽略。
否則 (有效的 ReferenceFramesReconPictureDescriptors[ReferenceIndices[i]]。 重新建構PictureResourceIndex)
- 這表示參考 i-th 會指向 DPB 位置 ReferenceIndices[i] ,而要使用的重建圖片會 D3D12DDI_VIDEO_ENCODE_REFERENCE_FRAMES_0080。ppTexture2Ds[ReferenceFramesReconPictureDescriptors[ReferenceIndices[i]]。ReconstructedPictureResourceIndex]
D3D12DDI_VIDEO_ENCODE_REFERENCE_FRAMES_0080 會填入為:
- NumTexture2Ds = { ReferenceFramesReconPictureDescriptors 的唯一值數目。在 {0..7} } 中重建PictureResourceIndex[j] != D3D12_VIDEO_ENCODER_AV1_INVALID_DPB_RESOURCE_INDEX for j
- ppTexture2Ds = { compact array (沒有 null 專案,) 包含來自先前編碼之畫面格的重新建構圖片,該畫面將作為參考 }
- [僅限紋理陣列模式] pSubresources = { compact array (沒有 null 專案,) 包含先前編碼之畫面格的子資源索引,這些元素將做為參考 }
在沒有參考的情況下編碼框架類型,但未清除 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] != D3D12_VIDEO_ENCODER_AV1_INVALID_DPB_RESOURCE_INDEX {0..7} } 中的 j
- ppTexture2Ds = { compact array (沒有 null 專案,) 包含 ReferenceFramesReconPictureDescriptors 所參考之先前編碼畫面格的重建圖片。{0..7} } 中 j 的重新建構PictureResourceIndex[j] }
- [僅限紋理陣列模式] pSubresources = { compact array (沒有 null 專案,) 包含 來自 ReferenceFramesReconPictureDescriptors 所參考之先前編碼畫面格之紋理數組的子資源索引。{0..7} } 中 j 的重新建構PictureResourceIndex[j] }
如需詳細資訊,請參閱 D3D12 AV1 視訊編碼 。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows 11 版本 24H2 (WDDM 3.2) |
標頭 | d3d12umddi.h |