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 構文です。 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 まで後続のフレームごとに 1 ずつインクリメントする必要があります。この値は 0 にリセットされ、同じプロセスに従う必要があります。
OrderHint は、フレームとその参照の [0..2^(OrderHintBitsMinus1+1)]
一意の識別子として動作せず、ラップできる最大範囲があるため、この目的には使用できません。
TemporalLayerIndexPlus1
画像テンポラル レイヤー インデックスに 1 を加えたもの。 値 0 は、一時的なスケーラビリティが使用されていないことを示します。 この値は、[0.. の範囲内である必要があります。D3D12DDI_VIDEO_ENCODER_AV1_CODEC_CONFIGURATION_SUPPORT_0095。MaxTemporalLayers]。
SpatialLayerIndexPlus1
画像空間レイヤー インデックスに 1 を加えたもの。 値 0 は、空間スケーラビリティが使用されていないことを示します。 この値は、[0..D3D12DDI_VIDEO_ENCODER_AV1_CODEC_CONFIGURATION_SUPPORT_0095.MaxSpatialLayers] の範囲内である必要があります。
ReferenceFramesReconPictureDescriptors[8]
完全な (つまり、現在のフレームで使用されていないが、将来のフレームで使用されるフレームを含む) DPB バッファーの現在の状態スナップショットを記述するD3D12DDI_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_DESCRIPTOR_0095構造体の配列は、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] は、現在のフレーム i 番目の参照型が DPB に格納されている ReferenceFramesReconPictureDescriptors への [0..7] 間のインデックスを示します。 つまり 、ReferenceFramesReconPictureDescriptors[ReferenceIndices[i]] には、i 番目の参照型の DPB 記述子が含まれています。
ReferenceIndices[] の i 番目のエントリは、次のように各参照型に対応します。
インデックス i | 参照の種類 | ReferenceFramesReconPictureDescriptors[ReferenceIndices[i]] |
---|---|---|
0 | Last (最後へ) | 最後の DPB 記述子 |
1 | Last2 | Last2 の DPB 記述子 |
2 | Last3 | Last3 の DPB 記述子 |
3 | 黄金 | ゴールデンの 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
使用する制約付き方向拡張フィルター処理 (CDEF) パラメーターを指定する D3D12DDI_VIDEO_ENCODER_AV1_CDEF_CONFIG_0095 構造体。
QPMapValuesCount
pRateControlQPMap に存在する要素の数を格納します。 この値は、フレーム内のコーディング ブロックの数と一致し、フレーム解像度を最も近いアライン値に切り上げる必要があります。
pRateControlQPMap
行/列スキャン順序で、このフレームの各 2 乗領域で使用する QP マップ値を含む配列。 QP マップ ディメンションは、現在の解像度と D3D12DDI_VIDEO_ENCODER_RESOLUTION_SUPPORT_LIMITS_0080_2を使用して計算できます。QPMapRegionPixelsSize は、2 乗領域のサイズを伝えます。 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 が設定されている場合にのみ使用されます。 CustomSegmentation.UpdateMap が設定されている場合に使用するカスタム セグメント化マップを指定するD3D12DDI_VIDEO_ENCODER_AV1_SEGMENTATION_MAP_0095構造体。 それ以外の場合、セグメント マップは参照フレームから継承されます。
注釈
DPB Management の期待値
API クライアントとドライバーがこの API を使用するときに準拠する必要があるコントラクトを次に示します。
D3D12DDI_VIDEO_ENCODER_AV1_FRAME_TYPE_0095_KEY_FRAMEエンコードする場合:
- PrimaryRefFrame は 7 である必要があります (PRIMARY_REF_NONE)
- RefreshFrameFlags を0xFFする必要があります (AV1 コーデックの標準ビットストリーム構文に準拠)
- ReferenceFramesReconPictureDescriptors 内のすべての配列エントリについて、再構築されたPictureResourceIndex を D3D12_VIDEO_ENCODER_AV1_INVALID_DPB_RESOURCE_INDEX に設定する必要があります
- ReferenceIndices[7] の値は、上記の点に従って ReferenceFramesReconPictureDescriptors の未使用の DPB スロットを指す値 [0..7] は無効です。
- D3D12DDI_VIDEO_ENCODE_REFERENCE_FRAMES_0082_0 は次のように入力されます。
- NumTexture2Ds = 0
- ppTexture2Ds = NULL
- pSubresources = NULL
参照を使用してフレームの種類をエンコードする場合 (つまり、SWITCH/INTER):
PrimaryRefFrame は、フレームの先頭に読み込む必要がある CDF 値とその他の状態を含む参照フレームを指定します。
RefreshFrameFlags は、エンコード実行後に現在エンコードされたフレーム再構築画像が配置される ReferenceFramesReconPictureDescriptors DPB スロットを示すために、適宜設定する必要があります。 この値は、現在のフレームの関連付けられた画像ヘッダー内の AV1 構文要素refresh_frame_flags API クライアントがコーディングする内容と正確に一致する必要があります。
現在のフレームの ReferenceFramesReconPictureDescriptors の配列エントリは、前のフレームで 示された RefreshFrameFlags に正確に従います。
たとえば、RefreshFrameFlags が現在のフレーム N がスロット 2 に配置されることを示している場合、 3 と 6、フレーム N+1 の次の EncodeFrame 呼び出しでは、エントリ ReferenceFramesReconPictureDescriptors[1]、ReferenceFramesReconPictureDescriptors[2]、ReferenceFramesReconPictureDescriptors[5] パラメーターのエントリ内の再構築されたPictureResourceIndex パラメーターが、D3D12DDI_VIDEO_ENCODE_REFERENCE_FRAMES_のフレーム N の再構築された画像を指している必要があります0080。
これには、KEY フレームの再構築された画像を指すすべての ReferenceFramesReconPictureDescriptors エントリをマークすることで、D3D12DDI_VIDEO_ENCODER_AV1_FRAME_TYPE_0095_KEY_FRAMEの RefreshFrameFlags=0xFF の検討も含まれます。
(キー フレーム以外の) 図が D3D12DDI_VIDEO_ENCODER_PICTURE_CONTROL_FLAG_0080_USED_AS_REFERENCE_PICTUREでマークされない場合は、 RefreshFrameFlags が 0 である必要があります。
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]]。 再構築されたPictureResourceIndex)
- これは、参照 i 番目が DPB スロット ReferenceIndices[i] を指し示し、使用する再構築された画像が D3D12DDI_VIDEO_ENCODE_REFERENCE_FRAMES_0080されることを示します。ppTexture2Ds[ReferenceFramesReconPictureDescriptors[ReferenceIndices[i]]。再構築されたPictureResourceIndex]
D3D12DDI_VIDEO_ENCODE_REFERENCE_FRAMES_0080 は次のように入力されます。
- NumTexture2Ds = { ReferenceFramesReconPictureDescriptors の一意の値の数。ReconstructedPictureResourceIndex[j] != D3D12_VIDEO_ENCODER_AV1_INVALID_DPB_RESOURCE_INDEX for j in {0..7} }
- ppTexture2Ds = { 参照として使用される以前にエンコードされたフレームから再構築された画像を含むコンパクト配列 (null エントリなし)
- [テクスチャ配列モードのみ] pSubresources = { 参照として使用される以前にエンコードされたフレームからのテクスチャ配列のサブリソース インデックスを含むコンパクト配列 (null エントリなし)
参照なしで、DPB をクリアせずにフレームの種類をエンコードする場合 (つまり、INTRA_ONLY)
PrimaryRefFrame は 7 である必要があります (PRIMARY_REF_NONE)
RefreshFrameFlags は、エンコード実行後に現在エンコードされたフレーム再構築画像が配置される ReferenceFramesReconPictureDescriptors DPB スロットを示すために、適宜設定する必要があります。 この値は、現在のフレームの関連付けられた画像ヘッダー内の AV1 構文要素refresh_frame_flags API クライアントがコーディングする内容と正確に一致する必要があります。
現在のフレームの ReferenceFramesReconPictureDescriptors の配列エントリは、前のフレームで示された RefreshFrameFlags に正確に従います。
ReferenceIndices[7] の値は、内部専用フレームでは参照が使用されないため無視されます。
D3D12DDI_VIDEO_ENCODE_REFERENCE_FRAMES_0080 DPB スナップショットが含まれており、次のように入力されます。
- NumTexture2Ds = {ReferenceFramesReconPictureDescriptors の一意の値の数。再構築されたPictureResourceIndex[j] != D3D12_VIDEO_ENCODER_AV1_INVALID_DPB_RESOURCE_INDEX for j in {0..7} }
- ppTexture2Ds = { referenceFramesReconPictureDescriptors によって参照される以前にエンコードされたフレームから再構築された画像を含むコンパクト配列 (null エントリなし)。{0..7} } の j に対する再構築されたPictureResourceIndex[j]
- [テクスチャ配列モードのみ]pSubresources = { referenceFramesReconPictureDescriptors によって参照される以前にエンコードされたフレームのテクスチャ配列のサブリソース インデックスを含むコンパクト配列 (null エントリなし)。{0..7} } の j に対する再構築されたPictureResourceIndex[j]
詳細については、「 D3D12 AV1 ビデオ エンコード 」を参照してください。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 11 バージョン 24H2 (WDDM 3.2) |
Header | d3d12umddi.h |