D3D12DDI_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_MARKING_OPERATION_0082_0-Struktur (d3d12umddi.h)

Die D3D12DDI_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_MARKING_OPERATION_0082_0-Struktur beschreibt Änderungen in den Referenzbildern als Speichervorgänge als Tupel eines Vorgangsbezeichners und zugeordneter Parameter, die für den Vorgang erforderlich sind.

Syntax

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;

Member

memory_management_control_operation

Der Steuerelementvorgang, der angewendet werden soll, um den Markierungszustand des Referenzbilds zu beeinflussen. Es folgen gültige Vorgangswerte.

Wert BESCHREIBUNG
0 Beenden sie memory_management_control_operation Syntaxelementschleife.
1 Markieren Sie ein kurzfristiges Referenzbild als "nicht als Referenz verwendet".
2 Markieren Sie ein Langfristiges Referenzbild als "nicht als Referenz verwendet".
3 Markieren Sie ein kurzfristiges Referenzbild als "für langfristige Referenz verwendet", und weisen Sie ihm einen langfristigen Frameindex zu.
4 Geben Sie den maximalen langfristigen Frameindex an, und markieren Sie alle langfristigen Referenzbilder mit langfristigen Frameindizes, die größer als den Maximalwert sind, als "nicht als Referenz verwendet".
5 Markieren Sie alle Referenzbilder als "als Referenz nicht verwendet", und legen Sie die MaxLongTermFrameIdx-Variable auf "keine langfristigen Frameindizes" fest.
6 Markieren Sie das aktuelle Bild als "für langfristige Referenz verwendet", und weisen Sie ihm einen langfristigen Frameindex zu.

difference_of_pic_nums_minus1

Dieses Element wird mit memory_management_control_operation gleich 3 oder 1 verwendet, um einem kurzfristigen Referenzbild einen langfristigen Frameindex zuzuweisen oder ein kurzfristiges Referenzbild als "nicht verwendet" zu markieren. Wenn die zugeordnete memory_management_control_operation durch den Decodierungsprozess verarbeitet wird, ist die resultierende Bildnummer, die von difference_of_pic_nums_minus1 abgeleitet wird, eine Bildnummer, die einem der als "referenziert" gekennzeichneten Referenzbilder zugewiesen ist und zuvor nicht einem langfristigen Frameindex zugeordnet ist.

long_term_pic_num

Dieses Element wird mit memory_management_control_operation gleich 2 verwendet, um ein Langfristiges Referenzbild als "nicht zur Referenz" zu markieren. Wenn die zugeordnete memory_management_control_operation durch den Decodierungsprozess verarbeitet wird, muss long_term_pic_num gleich einer langfristigen Bildnummer entsprechen, die einem der Referenzbilder zugewiesen ist, die derzeit als "für langfristige Referenz verwendet" gekennzeichnet ist.

long_term_frame_idx

Dieses Element wird mit memory_management_control_operation gleich 3 oder 6 verwendet, um einem Bild einen langfristigen Frameindex zuzuweisen. Wenn die zugeordnete memory_management_control_operation durch den Decodierungsprozess verarbeitet wird, muss der Wert von long_term_frame_idx im Bereich von 0 bis MaxLongTermFrameIdx liegen, einschließlich.

max_long_term_frame_idx_plus1

Der Wert minus 1 gibt den maximalen Wert des langfristigen Frameindexes an, der für langfristige Referenzbilder zulässig ist (bis zum Erhalt eines anderen Werts von max_long_term_frame_idx_plus1). Der Wert der max_long_term_frame_idx_plus1 muss im Bereich von 0 bis einschließlich max_num_ref_frames liegen.

Hinweise

Die Variable MaxLongTermFrameIdx wird wie folgt abgeleitet:

  • Wenn max_long_term_frame_idx_plus1 gleich 0 ist, wird MaxLongTermFrameIdx gleich "keine langfristigen Frameindizes" festgelegt.
  • Wenn max_long_term_frame_idx_plus1 größer als 0 ist, wird MaxLongTermFrameIdx gleich max_long_term_frame_idx_plus1 − 1 festgelegt.

Der Vorgang des Markierens des aktuellen Frames als Kurzzeitbezug wird durch ein Flag in der D3D12DDI_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_FLAGS_0080-Struktur mit den entsprechenden PictureOrderCountNumber - und FrameDecodingOrderNumber-Werten angegeben, die in der zugehörigen Bildsteuerelementstruktur angegeben sind.

Die Variable max_num_ref_frames wird durch die maximale DPB-Kapazität (Decoded Picture Buffer) angegeben.

Beachten Sie, dass der vorgeschlagene explizite Mechanismus zum Markieren eines IdR-Frames (Instantaneous Decoder Refresh) als Langzeitreferenz zuerst als kurzfristige Referenz gekennzeichnet ist, indem D3D12DDI_VIDEO_ENCODER_PICTURE_CONTROL_FLAG_0080_USED_AS_REFERENCE_PICTURE beim Aufrufen von EncodeFrame für den IDR-Frame festgelegt und später mithilfe des Speicherverwaltungsvorgangs "3" als langfristiger Referenzrahmen herunterstreckt wird, um ein kurzfristiges Referenzbild als "für langfristige Referenz verwendet" zu markieren und einen zuzuweisen. Langfristiger Frameindex.

Wenn Sie einen IDR-Frame codieren und adaptive_ref_pic_marking_mode_flag = 1 festlegen, geht der Treiber alternativ davon aus, dass der Client versucht, den H264-Sliceheader long_term_reference_flag festzulegen, und dies im Ausgabebitstream für den EncodeFrame-Aufruf .

Weitere Informationen zum Prozess der Bildmarkierung finden Sie in der H.264-Spezifikation, Abschnitt 8.2.5.4 "Adaptive Memory Control Decoded Reference Picture Marking Process".

Allgemeine Informationen finden Sie unter D3D12-Videocodierung .

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 11 (WDDM 3.0)
Kopfzeile d3d12umddi.h

Weitere Informationen

D3D12DDI_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_0082_0

PFND3D12DDI_VIDEO_ENCODE_FRAME_0082_0