D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264-Struktur (d3d12video.h)
Stellt die Steuerelementelemente auf Bildebene für den zugeordneten EncodeFrame-Befehl für die H.264-Codierung dar.
Syntax
typedef struct D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264 {
D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_FLAGS Flags;
D3D12_VIDEO_ENCODER_FRAME_TYPE_H264 FrameType;
UINT pic_parameter_set_id;
UINT idr_pic_id;
UINT PictureOrderCountNumber;
UINT FrameDecodingOrderNumber;
UINT TemporalLayerIndex;
UINT List0ReferenceFramesCount;
UINT *pList0ReferenceFrames;
UINT List1ReferenceFramesCount;
UINT *pList1ReferenceFrames;
UINT ReferenceFramesReconPictureDescriptorsCount;
D3D12_VIDEO_ENCODER_REFERENCE_PICTURE_DESCRIPTOR_H264 *pReferenceFramesReconPictureDescriptors;
UCHAR adaptive_ref_pic_marking_mode_flag;
UINT RefPicMarkingOperationsCommandsCount;
D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_MARKING_OPERATION *pRefPicMarkingOperationsCommands;
UINT List0RefPicModificationsCount;
D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_LIST_MODIFICATION_OPERATION *pList0RefPicModifications;
UINT List1RefPicModificationsCount;
D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_LIST_MODIFICATION_OPERATION *pList1RefPicModifications;
UINT QPMapValuesCount;
INT8 *pRateControlQPMap;
} D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264;
Member
Flags
Eine bitweise OR-Kombination von Werten aus der D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_FLAGS Enumeration, die Konfigurationsflags für den zu codierenden Frame angibt.
FrameType
Ein Wert aus der D3D12_VIDEO_ENCODER_FRAME_TYPE_H264 Enumeration, die den Bildtyp angibt. Stellen Sie sicher, dass die Codec-spezifischen Flags den angegebenen Typ unterstützen. Diese Auswahl muss mit der vom Host festgelegten GOP-Strukturkonfiguration synchronisiert werden. Beachten Sie, dass das GOP in der Anzeigereihenfolge definiert ist und diese Auswahl des Bildtyps dem GOP folgen muss, jedoch in Codierungsreihenfolge.
pic_parameter_set_id
Ein UINT , der den Wert angibt, der in den Sliceheadern des aktuellen Frames verwendet werden soll, um auf das PPS zu verweisen.
idr_pic_id
Wenn FrameType** D3D12_VIDEO_ENCODER_FRAME_TYPE_H264_IDR_FRAME ist, gibt ein UINT den Bezeichner des IDR-Frames an, der in allen im Frame vorhandenen Slices-Headern verwendet werden soll.
PictureOrderCountNumber
Ein UINT , der die aktuelle Frameanzeigereihenfolge angibt.
FrameDecodingOrderNumber
Ein UINT , der die Framedecodierungsreihenfolge mit Semantik angibt, wie durch den Sliceheader frame_num Syntaxelement angegeben, das nach jedem Referenzbild inkrementiert wird.
TemporalLayerIndex
Ein UINT , der die Anzahl der Bildebenen in der temporalen Hierarchie angibt. Überprüfen Sie die maximale Anzahl von Ebenen in D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264.
List0ReferenceFramesCount
Ein UINT , der die Anzahl vergangener Frameverweise angibt, die für diesen Frame verwendet werden sollen. Dieser Wert sollte mit dem übereinstimmen, was in D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264 verfügbar gemacht wurde.
pList0ReferenceFrames
Ein Zeiger auf ein UINT-Array , das die Liste der bisherigen Frameverweisframes angibt, die für diesen Frame verwendet werden sollen. Jeder ganzzahlige Wert in diesem Array indizes in pReferenceFramesReconPictureDescriptors , um auf bilder zu verweisen, die im DPB gespeichert sind.
List1ReferenceFramesCount
Ein UINT , der die Anzahl zukünftiger Frameverweise angibt, die für diesen Frame verwendet werden sollen. Dieser Wert sollte mit dem übereinstimmen, was in D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264 verfügbar gemacht wurde.
pList1ReferenceFrames
Ein Zeiger auf ein UINT-Array , das die Liste der zukünftigen Frame-Referenzframes angibt, die für diesen Frame verwendet werden sollen. Jeder ganzzahlige Wert in diesem Array indizes in pReferenceFramesReconPictureDescriptors , um auf bilder zu verweisen, die im DPB gespeichert sind.
ReferenceFramesReconPictureDescriptorsCount
Ein UINT , der die Anzahl der Einträge in pReferenceFramesReconPictureDescriptors angibt.
pReferenceFramesReconPictureDescriptors
Ein Zeiger auf ein UINT-Array , das den aktuellen Zustand des DPB-Puffers beschreibt, der in D3D12_VIDEO_ENCODER_PICTURE_CONTROL_DESC. ReferenceFrames. Die Listenindizes pList0ReferenceFrames und pList1ReferenceFrames werden aus vergangenen/zukünftigen Verweisen in diesem Deskriptorenarray zugeordnet.
Dieses Array von Deskriptoren ordnet wiederum ein Referenzbild für diesen Frame einem Ressourcenindex im Array für rekonstruierte Bilder D3D12_VIDEO_ENCODER_PICTURE_CONTROL_DESC zu. ReferenceFrames. Darüber hinaus gibt es für jedes Referenzbild die Codierungs- und Anzeigereihennummer an und gibt an, ob es sich um einen langfristigen Verweis handelt.
Die Größe dieses Arrays entspricht immer D3D12_VIDEO_ENCODER_PICTURE_CONTROL_DESC. ReferenceFrames.NumTextures für den zugeordnetenEncodeFrame-Befehl .
adaptive_ref_pic_marking_mode_flag
Eine UCHAR , die einen semantischen Modus für die Frameverweisbehandlung definiert.
adaptive_ref_pic_marking_mode_flag Wert | Referenzbildmarkierungsmodus angegeben |
---|---|
0 | 1 |
Gleitender Fensterreferenz-Bildmarkierungsmodus: Ein Markierungsmodus, der einen First-In-First-Out-Mechanismus für kurzfristige Referenzbilder bereitstellt. | Adaptiver Referenzbildmarkierungsmodus: Ein Referenzbildmarkierungsmodus, der Syntaxelemente bereitstellt, um die Markierung von Referenzbildern als "nicht zur Referenz" anzugeben und langfristige Frameindizes zuzuweisen. |
RefPicMarkingOperationsCommandsCount
Ein UINT , der die Anzahl der Dem aktuellen Frame zugeordneten Markierungsvorgänge für Verweisbilder angibt. Erfordert, dass adaptive_ref_pic_marking_mode_flag auf 1 festgelegt ist.
pRefPicMarkingOperationsCommands
Ein Zeiger auf ein Array von D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_MARKING_OPERATION Strukturen, die die Liste der Mit dem aktuellen Frame zugeordneten Verweisbildermarkierungsvorgänge darstellen. Die in dieser Liste beschriebenen Vorgänge müssen während der Codierungssitzung entsprechend in den DPB-Deskriptoren angezeigt werden.
List0RefPicModificationsCount
Ein UINT , der die Anzahl der Elemente in pList0RefPicModifications angibt.
pList0RefPicModifications
Ein Zeiger auf ein Array von D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_LIST_MODIFICATION_OPERATION Strukturen, die die Liste der Änderungsvorgänge für die Referenzbildliste für die Liste pList0ReferenceFrames darstellen.
List1RefPicModificationsCount
Ein UINT , der die Anzahl der Elemente in pList1RefPicModifications angibt.
pList1RefPicModifications
Ein Zeiger auf ein Array von D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_LIST_MODIFICATION_OPERATION Strukturen, die die Liste der Änderungsvorgänge für die Referenzbildliste für die Liste pList1ReferenceFrames darstellen.
QPMapValuesCount
Ein UINT , der die Anzahl der in pRateControlQPMap vorhandenen Elemente angibt. Dies sollte der Anzahl der Codierungsblöcke im Frame entsprechen, wodurch die Frameauflösung auf die am nächsten ausgerichteten Werte aufgerundet wird.
pRateControlQPMap
Ein Zeiger auf ein Array von Int8 , das in der Reihenfolge der Zeilen-/Spaltenüberprüfung die QP-Zuordnungswerte enthält, die für jeden quadratischen Bereich für diesen Frame verwendet werden sollen. Die QP-Kartendimensionen können mit der aktuellen Auflösung und D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOLUTION_SUPPORT_LIMITS berechnet werden . QPMapRegionPixelsSize vermittelt die quadratischen Regionsgrößen.
Hinweise
Beachten Sie, dass die Ausgabe, wenn der aktuelle Frame als Referenzbild markiert ist, das rekonstruierte Bild zusammen mit dem Bitstrom enthalten muss, damit der Host es in zukünftigen Befehlen in der Referenzliste für rekonstruierte Bilder platzieren kann. Beachten Sie, dass es möglicherweise Einschränkungen für einige Frametypen gibt, die als Verweise gekennzeichnet werden sollen. Überprüfen Sie die Featureunterstützung, bevor Sie diese Werte festlegen.
In den folgenden Tabellen sind die erwarteten SPS- und PPS-Werte für die H264-Codierung aufgeführt.
Level_idc Zuordnungen für H264
D3D12-Ebene | Erwartete level_idc | Notizen |
---|---|---|
D3D12_VIDEO_ENCODER_LEVELS_H264_1 | 10 | Keine |
D3D12_VIDEO_ENCODER_LEVELS_H264_1b | 11 | SPS.constraint_set3 muss 1 sein |
D3D12_VIDEO_ENCODER_LEVELS_H264_11 | 11 | Keine |
D3D12_VIDEO_ENCODER_LEVELS_H264_12 | 12 | Keine |
D3D12_VIDEO_ENCODER_LEVELS_H264_13 | 13 | Keine |
D3D12_VIDEO_ENCODER_LEVELS_H264_2 | 20 | Keine |
D3D12_VIDEO_ENCODER_LEVELS_H264_21 | 21 | Keine |
D3D12_VIDEO_ENCODER_LEVELS_H264_22 | 22 | Keine |
D3D12_VIDEO_ENCODER_LEVELS_H264_3 | 30 | Keine |
D3D12_VIDEO_ENCODER_LEVELS_H264_31 | 31 | Keine |
D3D12_VIDEO_ENCODER_LEVELS_H264_32 | 32 | Keine |
D3D12_VIDEO_ENCODER_LEVELS_H264_4 | 40 | Keine |
D3D12_VIDEO_ENCODER_LEVELS_H264_41 | 41 | Keine |
D3D12_VIDEO_ENCODER_LEVELS_H264_42 | 42 | Keine |
D3D12_VIDEO_ENCODER_LEVELS_H264_5 | 50 | Keine |
D3D12_VIDEO_ENCODER_LEVELS_H264_51 | 51 | Keine |
D3D12_VIDEO_ENCODER_LEVELS_H264_52 | 52 | Keine |
D3D12_VIDEO_ENCODER_LEVELS_H264_6 | 60 | Keiner |
D3D12_VIDEO_ENCODER_LEVELS_H264_61 | 61 | Keine |
D3D12_VIDEO_ENCODER_LEVELS_H264_62 | 62 | Keine |
H264 Sequence Parameter Set expected values
Syntaxelement | Erwarteter Standardwert | Notizen |
---|---|---|
profile_idc | Enumerationswert H264_PROFILE_MAIN/H264_PROFILE_HIGH/H264_PROFILE_HIGH10 | Keine |
constraint_set0_flag | 0 | Keine |
constraint_set1_flag | 0 | Keine |
constraint_set2_flag | 0 | Keine |
constraint_set3_flag | 0 | 1 bei Verwendung von D3D12_VIDEO_ENCODER_LEVELS_H264_1b |
constraint_set4_flag | 0 | Keine |
constraint_set5_flag | 0 | Keine |
reserved_zero_2bits | 0 | Keine |
level_idc | Siehe Tabelle oben für H264-Ebenen | Keine |
seq_parameter_set_id | Benutzerspezifisch | Keine |
chroma_format_idc | 1 | Nur für die Verwendung mit den Formaten P010 oder NV12 YUV 4.2.0 |
bit_depth_luma_minus8 | 0 für NV12, 2 für P010 | Keine |
qpprime_y_zero_transform_bypass_flag | 0 | Keine |
seq_scaling_matrix_present_flag | 0 | Keine |
log2_max_frame_num_minus4 | Identisch mit D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE_H264 | Keine |
pic_order_cnt_type | Identisch mit D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE_H264 | Nur Die Modi 0 und 2 werden in dieser API unterstützt. |
log2_max_pic_order_cnt_lsb_minus4 | Identisch mit D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE_H264 | Nur, wenn pic_order_cnt_type == 0 |
max_num_ref_frames | Maximale Anzahl von Referenzbildern, die in der Codierungssitzung verwendet werden | Keine |
gaps_in_frame_num_value_allowed_flag | 0 | Keine |
pic_width_in_mbs_minus1 | std::ceil(sequenceTargetResolution.Width / 16.0)) - 1; | Keine |
pic_height_in_map_units_minus1 | std::ceil(sequenceTargetResolution.Height / 16.0)) - 1; | Keine |
frame_mbs_only_flag | 0 | Keine Interlaceunterstützung |
direct_8x8_inference_flag | Basierend auf D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_FLAG_USE_ADAPTIVE_8x8_TRANSFORM | Keine |
frame_cropping_flag | 0 oder 1, je nachdem, ob die Codierungsauflösung 16 ausgerichtet ist oder nicht | Keine |
frame_cropping_rect_left_offset | 0 | Nur wenn frame_cropping_flag = 1 |
frame_cropping_rect_right_offset | ((pic_width_in_mbs_minus1+1) * 16 - sequenceTargetResolution.Width) / 2 | Nur, wenn frame_cropping_flag = 1 |
frame_cropping_rect_top_offset | ((pic_height_in_map_units_minus1+1) * 16 - sequenceTargetResolution.Height) / 2 | Nur, wenn frame_cropping_flag = 1 |
frame_cropping_rect_bottom_offset | 0 | Nur, wenn frame_cropping_flag = 1 |
vui_paramenters_present_flag | 0 | Keine |
H264 Picture Parameter Set expected values (H264 Picture Parameter Set expected values)
Syntax-Element | Erwarteter Standardwert | Notizen |
---|---|---|
pic_parameter_set_id | Benutzerspezifisch | Keine |
seq_parameter_set_id | Benutzerspezifisch | Keine |
entropy_coding_mode_flag | Basierend auf D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_FLAG_ENABLE_CABAC_ENCODING | Keine |
pic_order_present_flag | 0 | Nur Unterstützung für pic_cnt_type = 0, 2 |
num_slice_groups_minus1 | 0 | Keine |
num_ref_idx_l1_active_minus1 | std::max(static_cast<INT>(pictureControl.List0ReferenceFramesCount) - 1, 0) | Keine |
num_ref_idx_l0_active_minus1 | std::max(static_cast<INT>(pictureControl.List1ReferenceFramesCount) - 1, 0) | Keine |
weighted_pred_flag | 0 | Keine |
weighted_bipred_idc | 0 | Keine |
pic_init_qp_minus26 | 0 | Keine |
pic_init_qs_minus26 | 0 | Keine |
chroma_qp_index_offset | 0 | Keine |
deblocking_filter_control_present_flag | 1 | Keine |
constrained_intra_pred_flag | Basierend auf D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_FLAG_USE_CONSTRAINED_INTRAPREDICTION | Keine |
redundant_pic_cnt_present_flag | 0 | Keine |
transform_8x8_mode_flag | Basierend auf D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_FLAG_USE_ADAPTIVE_8x8_TRANSFORM | Nur bei Verwendung von High-Profilen |
pic_scaling_matrix_present_flag | 0 | Keine |
second_chroma_qp_index_offset | 0 | Keine |
Anforderungen
Unterstützte Mindestversion (Client) | Windows Build 22000 |
Unterstützte Mindestversion (Server) | Windows Build 22000 |
Kopfzeile | d3d12video.h |