D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC-Struktur (d3d12video.h)
Stellt die Steuerelementelemente auf Bildebene für den zugeordneten EncodeFrame-Befehl für die HEVC-Codierung dar.
Syntax
typedef struct D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC {
D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC_FLAGS Flags;
D3D12_VIDEO_ENCODER_FRAME_TYPE_HEVC FrameType;
UINT slice_pic_parameter_set_id;
UINT PictureOrderCountNumber;
UINT TemporalLayerIndex;
UINT List0ReferenceFramesCount;
UINT *pList0ReferenceFrames;
UINT List1ReferenceFramesCount;
UINT *pList1ReferenceFrames;
UINT ReferenceFramesReconPictureDescriptorsCount;
D3D12_VIDEO_ENCODER_REFERENCE_PICTURE_DESCRIPTOR_HEVC *pReferenceFramesReconPictureDescriptors;
UINT List0RefPicModificationsCount;
UINT *pList0RefPicModifications;
UINT List1RefPicModificationsCount;
UINT *pList1RefPicModifications;
UINT QPMapValuesCount;
INT8 *pRateControlQPMap;
} D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC;
Member
Flags
Eine bitweise OR-Kombination von Werten aus der D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC_FLAGS-Enumeration , die Konfigurationsflags für den zu codierenden Frame angibt.
FrameType
Ein Wert aus der D3D12_VIDEO_ENCODER_FRAME_TYPE_HEVC-Enumeration , die den Bildtyp angibt. Stellen Sie sicher, dass die codecspezifischen Flags den angegebenen Typ unterstützen. Diese Auswahl muss mit der vom Host festgelegten GOP-Strukturkonfiguration synchronisiert werden. Beachten Sie, dass der GOP in der Anzeigereihenfolge definiert ist und diese Auswahl des Bildtyps dem GOP folgen muss, jedoch in der Codierungsreihenfolge.
slice_pic_parameter_set_id
Ein UINT , der den Wert angibt, der in den Sliceheadern des aktuellen Frames verwendet werden soll, um auf den PPS zu verweisen.
PictureOrderCountNumber
Ein UINT , der die aktuelle Frameanzeigereihenfolge angibt.
TemporalLayerIndex
Ein UINT , der die Bildebenennummer in der temporalen Hierarchie angibt. Überprüfen Sie die maximale Anzahl von Ebenen in D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC.
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_HEVC verfügbar gemacht wurde.
pList0ReferenceFrames
Ein Zeiger auf ein UINT-Array , das die Liste vergangener 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_HEVC verfügbar gemacht wurde.
pList1ReferenceFrames
Ein Zeiger auf ein UINT-Array , das die Liste der zukünftigen 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.
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 Listen "pList0ReferenceFrames " und "pList1ReferenceFrames " ordnen die Indizes aus vergangenen/zukünftigen Verweisen in dieses Deskriptorenarray zu.
Dieses Array von Deskriptoren ordnet wiederum ein Referenzbild für diesen Frame einem Ressourcenindex im rekonstruierten Bildarray D3D12_VIDEO_ENCODER_PICTURE_CONTROL_DESC zu. ReferenceFrames. Darüber hinaus gibt er für jedes Referenzbild die Codierungs- und Anzeigereihenfolgenummer an und gibt an, ob es sich um einen Langzeitbezug handelt.
Die Größe dieses Arrays stimmt immer mit D3D12_VIDEO_ENCODER_PICTURE_CONTROL_DESC überein. ReferenceFrames.NumTextures für den zugeordnetenEncodeFrame-Befehl .
List0RefPicModificationsCount
Ein UINT , der die Anzahl der Elemente in pList0RefPicModifications angibt.
pList0RefPicModifications
Ein Zeiger auf ein UINT-Array , das Änderungsbefehle für die L0-Liste enthält.
List1RefPicModificationsCount
Ein UINT , der die Anzahl der Elemente in pList1RefPicModifications angibt.
pList1RefPicModifications
Ein Zeiger auf ein UINT-Array , das Änderungsbefehle für die L1-Liste enthält.
QPMapValuesCount
Ein UINT , der die Anzahl der elemente angibt, die in pRateControlQPMap vorhanden sind. 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 mithilfe der aktuellen Auflösung und D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOLUTION_SUPPORT_LIMITS berechnet werden . QPMapRegionPixelsSize , das die quadratischen Bereichsgrößen vermittelt.
Hinweise
In den folgenden Tabellen sind die erwarteten VPS-, SPS- und PPS-Werte für die HEVC-Codierung aufgeführt.
Level_idc-Zuordnungen für HEVC
D3D12-Ebene | Erwartete general_level_idc | Notizen |
---|---|---|
D3D12_VIDEO_ENCODER_LEVELS_HEVC_1 | 30 | Entspricht 3 * Enumerationsstufe 2 Ziffernsuffix (10) |
D3D12_VIDEO_ENCODER_LEVELS_HEVC_2 | 60 | Entspricht 3 * Enumerationsebene 2 Ziffernsuffix (20) |
D3D12_VIDEO_ENCODER_LEVELS_HEVC_21 | 63 | Entspricht 3 * Enumerationsstufe 2 Ziffernsuffix (21) |
D3D12_VIDEO_ENCODER_LEVELS_HEVC_3 | 90 | Entspricht 3 * Enumerationsebene 2 Ziffernsuffix (30) |
D3D12_VIDEO_ENCODER_LEVELS_HEVC_31 | 93 | Entspricht 3 * Enumerationsstufe 2 Ziffernsuffix (31) |
D3D12_VIDEO_ENCODER_LEVELS_HEVC_4 1 | 20 | Entspricht 3 * Enumerationsebene 2 Ziffernsuffix (40) |
D3D12_VIDEO_ENCODER_LEVELS_HEVC_41 1 | 23 | Entspricht 3 * Enumerationsstufe 2 Ziffernsuffix (41) |
D3D12_VIDEO_ENCODER_LEVELS_HEVC_5 1 | 50 | Entspricht 3 * Enumerationsstufe 2 Ziffernsuffix (50) |
D3D12_VIDEO_ENCODER_LEVELS_HEVC_51 1 | 53 | Entspricht 3 * Enumerationsstufe 2 Ziffernsuffix (51) |
D3D12_VIDEO_ENCODER_LEVELS_HEVC_52 1 | 56 | Entspricht 3 * Enumerationsstufe 2 Ziffernsuffix (52) |
D3D12_VIDEO_ENCODER_LEVELS_HEVC_6 1 | 80 | Entspricht 3 * Enumerationsstufe 2 Ziffernsuffix (60) |
D3D12_VIDEO_ENCODER_LEVELS_HEVC_61 1 | 83 | Entspricht 3 * Enumerationsstufe 2 Ziffernsuffix (61) |
D3D12_VIDEO_ENCODER_LEVELS_HEVC_62 1 | 86 | Entspricht 3 * Enumerationsstufe 2 Ziffernsuffix (62) |
HEVC Video Parameter Set expected values
Syntax-Element | Erwarteter Standardwert | Notizen |
---|---|---|
vps_video_parameter_set_id | Benutzerspezifisch | Keine |
vps_base_layer_internal_flag | 0 | Keine |
vps_base_layer_available_flag | 0 | Keine |
vps_max_layers_minus1 | 0 | Keine |
vps_max_sub_layers_minus1 | 0 | Keine |
vps_temporal_id_nesting_flag | 1 | Keine |
vps_reserved_ffff_16bits | 0xFFFF | Keine |
general_profile_space | 0 | Keine |
general_tier_flag | 1 für "Hoher Tarif", "0" für "Main"-Tarif | Keine |
general_profile_idc | D3D12_VIDEO_ENCODER_PROFILE_HEVC Enumerationswert + 1 | Keine |
general_profile_compatibility_flag[general_profile_space] | 1 | Keine |
general_progressive_source_flag | 1 | Keine |
general_interlaced_source_flag | 0 | Keine |
general_non_packed_constraint_flag | 1 | Keine |
general_frame_only_constraint_flag | 1 | Keine |
general_reserved_zero_44bits | 44-Bit-Nullen | Keine |
general_level_idc | Weitere Informationen finden Sie in der obigen Tabelle. | Keine |
vps_sub_layer_ordering_info_present_flag | 0 | Keine |
vps_max_dec_pic_buffering_minus1[0] | (MaxReferenceFramesInDPB/vorherige Referenzframes/ + 1 /zusätzlicher aktueller Frame recon pic/) - 1/*minus1 für header/; | Keine |
vps_max_num_reorder_pics[0] | 0, wenn keine B-Frames. vps_max_dec_pic_buffering_minus1 andernfalls. | Keine |
vps_max_latency_increase_plus1[0] | 1 | Keine |
vps_max_layer_id | 0 | Keine |
vps_num_layer_sets_minus1 | 0 | Keine |
vps_timing_info_present_flag | 0 | Keine |
vps_extension_flag | 0 | Keine |
HEVC Sequence Parameter Set expected values
Syntax-Element | Erwarteter Standardwert | Notizen | |
---|---|---|---|
sps_video_parameter_set_id | Benutzerspezifisch | Keine | |
sps_max_sub_layers_minus1 | Identisch mit dem zugehörigen VPS | Keine | |
sps_temporal_id_nesting_flag | Identisch mit dem zugehörigen VPS | Keine | |
general_profile_space | 0 | Keine | |
general_tier_flag | 1 für "Hoher Tarif", "0" für "Main"-Tarif | Keine | |
general_profile_idc | D3D12_VIDEO_ENCODER_PROFILE_HEVC Enumerationswert + 1 | Keine | |
general_profile_compatibility_flag[general_profile_space] | 1 | Keine | |
general_progressive_source_flag | 1 | Keine | |
general_interlaced_source_flag | 0 | Keine | |
general_non_packed_constraint_flag | 1 | Keine | |
general_frame_only_constraint_flag | 1 | Keine | |
general_reserved_zero_44bits | 44-Bit-Nullen | Keine | |
general_level_idc | Weitere Informationen finden Sie in der obigen Tabelle. | Keine | |
chroma_format_idc | 1 | 4.2.0 für NV12 und P010 | |
pic_width_in_luma_samples | std::ceil(sequenceTargetResolution.Width / SubregionBlockPixelsSize)) * SubregionBlockPixelsSize | Verwenden Sie die aktuelle Frameauflösung für D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOLUTION_SUPPORT_LIMITS. SubregionBlockPixelsSize | |
pic_height_in_luma_samples | std::ceil(sequenceTargetResolution.Height / SubregionBlockPixelsSize)) * SubregionBlockPixelsSize | Verwenden Sie die aktuelle Frameauflösung für D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOLUTION_SUPPORT_LIMITS. SubregionBlockPixelsSize | |
conformance_window_flag | 0, wenn die Auflösung an SubregionBlockPixelsSize ausgerichtet ist, andernfalls 1 | Keine | |
conf_win_left_offset | 0 | Nur, wenn conformance_windows_flag = 1 | |
conf_win_right_offset | (sps.pic_width_in_luma_samples – encodeResolution.Width) >> 1 | Nur, wenn conformance_windows_flag = 1 | |
conf_win_top_offset | 0 | Nur, wenn conformance_windows_flag = 1 | |
conf_win_bottom_offset | (sps.pic_height_in_luma_samples : encodeResolution.Height) >> 1 | Nur, wenn conformance_windows_flag = 1 | |
bit_depth_luma_minus8 | 0 für NV12, 2 für P010 | Keine | |
bit_depth_luma_minus8 | 0 für NV12, 2 für P010 | Keine | |
log2_max_pic_order_cnt_lsb_minus4 | Basierend auf D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE_HEVC | Keine | |
sps_sub_layer_ordering_info_present_flag | Identisch mit dem zugehörigen VPS | Keine | |
sps_max_dec_pic_buffering_minus1 | Identisch mit dem zugehörigen VPS | Keine | |
sps_max_num_reorder_pics | Identisch mit dem zugehörigen VPS | Keine | |
sps_max_latency_increase_plus1 | Identisch mit dem zugehörigen VPS | Keine | |
log2_min_luma_coding_block_size_minus3 | std::log2(minCuSize) - 3) | Beispiel: MinCUSize=8 für D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_CUSIZE_8x8 | |
log2_diff_max_min_luma_coding_block_size | std::log2(maxCuSize) - std::log2(minCuSize)) | Beispiel: MaxCUSize=16 für D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_CUSIZE_16x16 | |
log2_min_transform_block_size_minus2 | std::log2(minTuSize) - 2) | Beispiel: MinTuSize=4 für D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_TUSIZE_4x4 | |
log2_diff_max_min_transform_block_size | std::log2(maxTuSize) - std::log2(minTuSize)) | Beispiel: MaxTuSize=16 für D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_TUSIZE_16x16 | |
max_transform_hierarchy_depth_inter | Basierend auf D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC | Keine | |
max_transform_hierarchy_depth_inter | Basierend auf D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC | Keine | |
scaling_list_enabled_flag | 0 | Keine | |
amp_enabled_flag | Basierend auf D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_USE_ASYMETRIC_MOTION_PARTITION | Keine | |
sample_adaptive_offset_enabled_flag | Basierend auf D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_ENABLE_SAO_FILTER | Keine | |
pcm_enabled_flag | 0 | Keine | |
num_short_term_ref_pic_sets | 0 | Keine | |
long_term_ref_pics_present_flag | Basierend auf D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_ENABLE_LONG_TERM_REFERENCES | Keine | |
num_long_term_ref_pics_sps | 0 | Keine | |
sps_temporal_mvp_enabled_flag | 0 | Keine | |
strong_intra_smoothing_enabled_flag | 0 | Keine | |
vui_parameters_present_flag | 0 | Keine | |
sps_extension_flag | 0 | Keine |
HEVC Picture Parameter Set expected values
Syntax-Element | Erwarteter Standardwert | Notizen |
---|---|---|
pps_pic_parameter_set_id | Benutzerspezifisch | Keine |
pps_seq_parameter_set_id | Benutzerspezifisch | Keine |
dependent_slice_segments_enabled_flag | 0 | Keine |
output_flag_present_flag | 0 | Keine |
num_extra_slice_header_bits | 0 | Keine |
sign_data_hiding_enabled_flag | 0 | Keine |
cabac_init_present_flag | 1 | Keine |
num_ref_idx_lx_default_active_minus1[0] | std::max(static_cast<INT>(pictureControl.List0ReferenceFramesCount) - 1, 0)) | Keine |
num_ref_idx_lx_default_active_minus1[1] | std::max(static_cast<INT>(pictureControl.List1ReferenceFramesCount) - 1, 0)) | Keine |
init_qp_minus26 | 0 | Keine |
constrained_intra_pred_flag | Basierend auf D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_USE_CONSTRAINED_INTRAPREDICTION | Keine |
transform_skip_enabled_flag | Basierend auf D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_ENABLE_TRANSFORM_SKIPPING | Keine |
cu_qp_delta_enabled_flag | 1 | Keine |
diff_cu_qp_delta_depth | 0 | Keine |
pps_cb_qp_offset | 0 | Keine |
pps_cr_qp_offset | 0 | Keine |
pps_slice_chroma_qp_offsets_present_flag | 1 | Keine |
weighted_pred_flag | 0 | Keine Unterstützung für gewichtete Vorhersage in der API |
weighted_bipred_flag | 0 | Keine Unterstützung für gewichtete Vorhersage in der API |
transquant_bypass_enabled_flag | 0 | Keine |
tiles_enabled_flag | 0 | Keine |
entropy_coding_sync_enabled_flag | 0 | Keine |
pps_loop_filter_across_slices_enabled_flag | Basierend auf D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_DISABLE_LOOP_FILTER_ACROSS_SLICES | Keine |
deblocking_filter_control_present_flag | 1 | Keine |
deblocking_filter_override_enabled_flag | 0 | Keine |
pps_deblocking_filter_disabled_flag | 0 | Keine |
pps_beta_offset_div2 | 0 | Keine |
pps_tc_offset_div2 | 0 | Keine |
pps_scaling_list_data_present_flag | 0 | Keine |
lists_modification_present_flag | 1, wenn das Senden von D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC Änderungen auflistet. Andernfalls auf 0 festgelegt. | Keine |
log2_parallel_merge_level_minus2 | 0 | Keine |
slice_segment_header_extension_present_flag | 0 | Keine |
pps_extension_flag | 0 | Keine |
Anforderungen
Unterstützte Mindestversion (Client) | Windows Build 22000 |
Unterstützte Mindestversion (Server) | Windows Build 22000 |
Kopfzeile | d3d12video.h |