D3D12DDI_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_MARKING_OPERATION_0082_0 構造体 (d3d12umddi.h)

D3D12DDI_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_MARKING_OPERATION_0082_0構造体は、参照図の変更をメモリ操作として、操作識別子と操作に必要な関連パラメーターのタプルとして記述します。

構文

typedef struct D3D12DDI_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_MARKING_OPERATION_0082_0 {
  UCHAR memory_management_control_operation;
  UINT  difference_of_pic_nums_minus1;
  UINT  long_term_pic_num;
  UINT  long_term_frame_idx;
  UINT  max_long_term_frame_idx_plus1;
} D3D12DDI_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_MARKING_OPERATION_0082_0;

メンバー

memory_management_control_operation

参照図のマーキング状態に影響を与えるために適用するコントロール操作。 有効な操作値は次のとおりです。

説明
0 構文要素ループmemory_management_control_operation終了します。
1 短期的な参照画像を "参照用に未使用" としてマークします。
2 長期的な参照画像を "参照用に未使用" としてマークします。
3 短期参照画像を "長期参照に使用" としてマークし、それに長期的なフレーム インデックスを割り当てます。
4 最大長期フレーム インデックスを指定し、長期的なフレーム インデックスが最大値より大きいすべての長期参照図を "参照用に未使用" としてマークします。
5 すべての参照図を "参照用に未使用" としてマークし、 MaxLongTermFrameIdx 変数を "長期フレーム インデックスなし" に設定します。
6 現在の図を "長期参照に使用" としてマークし、それに長期的なフレーム インデックスを割り当てます。

difference_of_pic_nums_minus1

このメンバーは、3 または 1 に等しい memory_management_control_operation を使用して、短期の参照図に長期的なフレーム インデックスを割り当てるか、短期的な参照図を "参照用に使用されていません" としてマークします。 関連付けられた memory_management_control_operation がデコード プロセスによって処理される場合、 difference_of_pic_nums_minus1 から派生した結果のピクチャ番号は、"参照用" としてマークされた参照図のいずれかに割り当てられ、以前に長期フレーム インデックスに割り当てられない図番号である必要があります。

long_term_pic_num

このメンバーは、 memory_management_control_operation 2 に等しいと共に使用され、長期的な参照画像を "参照用に使用されていません" としてマークします。 関連付けられた memory_management_control_operation がデコード プロセスによって処理される場合、 long_term_pic_num は、現在 "長期参照に使用" としてマークされている参照図のいずれかに割り当てられている長期的な図番号と等しい必要があります。

long_term_frame_idx

このメンバーは、 図に 長期的なフレーム インデックスを割り当てるために、3 または 6 に等しいmemory_management_control_operationと共に使用されます。 関連付けられた memory_management_control_operation がデコード プロセスによって処理される場合、 long_term_frame_idx の値は 0 ~ MaxLongTermFrameIdx の範囲である必要があります。

max_long_term_frame_idx_plus1

値から 1 を引いた値は、(max_long_term_frame_idx_plus1の別の値を受け取るまで) 長期的な参照画像に対して許可される長期的なフレーム インデックスの最大値を指定します。 max_long_term_frame_idx_plus1の値は、0 ~ max_num_ref_framesの範囲にする必要があります。

注釈

変数 MaxLongTermFrameIdx は次のように派生します。

  • max_long_term_frame_idx_plus1が 0 の場合、MaxLongTermFrameIdx は "長期フレーム インデックスなし" に設定されます。
  • max_long_term_frame_idx_plus1が 0 より大きい場合、MaxLongTermFrameIdxmax_long_term_frame_idx_plus1 - 1 に等しく設定されます。

現在のフレームを短期的な参照としてマークする操作は、対応する PictureOrderCountNumberFrameDecodingOrderNumber 値が関連付けられたピクチャ コントロール構造体で示される、D3D12DDI_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_FLAGS_0080構造体に存在するフラグによって与えられます。

変数 max_num_ref_frames は、報告された最大デコード画像バッファー (DPB) 容量によって示されます。

瞬間デコーダー更新 (IDR) フレームを長期参照としてマークする場合、提案される明示的なメカニズムは、まず、IDR フレームに対して EncodeFrame を呼び出すときに D3D12DDI_VIDEO_ENCODER_PICTURE_CONTROL_FLAG_0080_USED_AS_REFERENCE_PICTUREを設定し、後でメモリ管理操作 '3' を使用して長期参照フレームに昇格し、短期参照画像を "長期参照に使用" としてマークし、割り当てることです。長期的なフレーム インデックスを作成します。

または、IDR フレームをエンコードし 、adaptive_ref_pic_marking_mode_flag = 1 を設定する場合、ドライバーはクライアントが H264 スライス ヘッダー long_term_reference_flag を設定しようとしていると想定し、 EncodeFrame 呼び出しの出力ビットストリームで行います。

画像マーキング プロセスの詳細については、H.264 仕様、セクション 8.2.5.4「アダプティブ メモリ制御デコードされた参照画像マーキング プロセス」を参照してください。

一般的な情報については、「 D3D12 ビデオ エンコード 」を参照してください。

要件

要件
サポートされている最小のクライアント Windows 11 (WDDM 3.0)
Header d3d12umddi.h

こちらもご覧ください

D3D12DDI_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_0082_0

PFND3D12DDI_VIDEO_ENCODE_FRAME_0082_0