structure D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC (d3d12video.h)
Représente les éléments de contrôle au niveau de l’image pour la commande EncodeFrame associée pour l’encodage HEVC.
Syntaxe
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;
Membres
Flags
Combinaison OR au niveau du bit de valeurs de l’énumération D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC_FLAGS spécifiant des indicateurs de configuration pour le cadre encodé.
FrameType
Valeur de l’énumération D3D12_VIDEO_ENCODER_FRAME_TYPE_HEVC spécifiant le type d’image. Assurez-vous que les indicateurs spécifiques au codec prennent en charge le type spécifié. Cette sélection doit être synchronisée avec la configuration de structure goP définie par l’hôte. Notez que le GOP est défini dans l’ordre d’affichage et que cette sélection du type d’image doit suivre le GOP, mais dans l’ordre d’encodage.
slice_pic_parameter_set_id
UINT spécifiant la valeur à utiliser dans les en-têtes de segment de l’image actuelle pour référencer le PPS.
PictureOrderCountNumber
UINT spécifiant l’ordre d’affichage du cadre actuel.
TemporalLayerIndex
UINT spécifiant le numéro de couche d’image dans la hiérarchie temporelle. Vérifiez le nombre maximal de couches dans D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC.
List0ReferenceFramesCount
UINT spécifiant le nombre de références d’image passées à utiliser pour cette image. Cette valeur doit être cohérente avec ce qui a été exposé dans D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC.
pList0ReferenceFrames
Pointeur vers un tableau UINT spécifiant la liste des trames de référence d’images passées à utiliser pour cette image. Chaque valeur entière de ce tableau s’indexe en pReferenceFramesReconPictureDescriptors pour référencer les images conservées dans le DPB.
List1ReferenceFramesCount
UINT spécifiant le nombre de références d’images futures à utiliser pour cette image. Cette valeur doit être cohérente avec ce qui a été exposé dans D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC.
pList1ReferenceFrames
Pointeur vers un tableau UINT spécifiant la liste des futurs cadres de référence de trame à utiliser pour cette image. Chaque valeur entière de ce tableau s’indexe en pReferenceFramesReconPictureDescriptors pour référencer les images conservées dans le DPB.
ReferenceFramesReconPictureDescriptorsCount
UINT spécifiant le nombre d’entrées dans pReferenceFramesReconPictureDescriptors.
pReferenceFramesReconPictureDescriptors
Pointeur vers un tableau UINT qui décrit l’état actuel de la mémoire tampon DPB conservée dans D3D12_VIDEO_ENCODER_PICTURE_CONTROL_DESC. ReferenceFrames. Les pList0ReferenceFrames et pList1ReferenceFrames répertorient les index mappés des références passées/futures dans ce tableau de descripteurs.
Ce tableau de descripteurs, à son tour, mappe une image de référence pour ce cadre dans un index de ressources dans le tableau d’images reconstruit D3D12_VIDEO_ENCODER_PICTURE_CONTROL_DESC. ReferenceFrames. En outre, pour chaque image de référence, il indique l’encodage et le numéro de commande d’affichage et s’il s’agit d’une référence à long terme.
La taille de ce tableau correspond toujours à D3D12_VIDEO_ENCODER_PICTURE_CONTROL_DESC. ReferenceFrames.NumTextures pour la commande EncodeFrame associée.
List0RefPicModificationsCount
UINT spécifiant le nombre d’éléments dans pList0RefPicModifications.
pList0RefPicModifications
Pointeur vers un tableau UINT contenant des commandes de modification pour la liste L0.
List1RefPicModificationsCount
UINT spécifiant le nombre d’éléments dans pList1RefPicModifications.
pList1RefPicModifications
Pointeur vers un tableau UINT contenant des commandes de modification pour la liste L1.
QPMapValuesCount
UINT spécifiant le nombre d’éléments présents dans pRateControlQPMap. Cela doit correspondre au nombre de blocs de codage dans l’image, arrondissant la résolution d’images aux valeurs alignées les plus proches.
pRateControlQPMap
Pointeur vers un tableau d’Int8 contenant, dans l’ordre d’analyse ligne/colonne, les valeurs de carte QP à utiliser sur chaque région carrée pour ce cadre. Les dimensions de la carte QP peuvent être calculées à l’aide de la résolution et de la D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOLUTION_SUPPORT_LIMITS actuelles. QPMapRegionPixelsSize qui transmet les tailles de région carrées.
Notes
Les tableaux suivants répertorient les valeurs VPS, SPS et PPS attendues pour l’encodage HEVC.
mappages Level_idc pour HEVC
Niveau D3D12 | General_level_idc attendu | Notes |
---|---|---|
D3D12_VIDEO_ENCODER_LEVELS_HEVC_1 | 30 | Correspond à 3 * suffixe de niveau d’énumération à 2 chiffres (10) |
D3D12_VIDEO_ENCODER_LEVELS_HEVC_2 | 60 | Correspond à 3 * suffixe de niveau d’énumération à 2 chiffres (20) |
D3D12_VIDEO_ENCODER_LEVELS_HEVC_21 | 63 | Correspond à 3 * suffixe de niveau d’énumération à 2 chiffres (21) |
D3D12_VIDEO_ENCODER_LEVELS_HEVC_3 | 90 | Correspond à 3 * suffixe de niveau d’énumération à 2 chiffres (30) |
D3D12_VIDEO_ENCODER_LEVELS_HEVC_31 | 93 | Correspond à 3 * suffixe de niveau d’énumération à 2 chiffres (31) |
D3D12_VIDEO_ENCODER_LEVELS_HEVC_4 1 | 20 | Correspond à 3 * suffixe de niveau d’énumération à 2 chiffres (40) |
D3D12_VIDEO_ENCODER_LEVELS_HEVC_41 1 | 23 | Correspond à 3 * suffixe de niveau d’énumération à 2 chiffres (41) |
D3D12_VIDEO_ENCODER_LEVELS_HEVC_5 1 | 50 | Correspond à 3 * suffixe de niveau d’énumération à 2 chiffres (50) |
D3D12_VIDEO_ENCODER_LEVELS_HEVC_51 1 | 53 | Correspond à 3 * suffixe à 2 chiffres de niveau d’énumération (51) |
D3D12_VIDEO_ENCODER_LEVELS_HEVC_52 1 | 56 | Correspond à 3 * suffixe de niveau d’énumération à 2 chiffres (52) |
D3D12_VIDEO_ENCODER_LEVELS_HEVC_6 1 | 80 | Correspond à 3 * suffixe de niveau d’énumération à 2 chiffres (60) |
D3D12_VIDEO_ENCODER_LEVELS_HEVC_61 1 | 83 | Correspond à 3 * suffixe de niveau d’énumération à 2 chiffres (61) |
D3D12_VIDEO_ENCODER_LEVELS_HEVC_62 1 | 86 | Correspond à 3 * suffixe de niveau d’énumération à 2 chiffres (62) |
HEVC Video Parameter Set valeurs attendues
Élément Syntax | Valeur par défaut attendue | Notes |
---|---|---|
vps_video_parameter_set_id | Spécifique à l’utilisateur | None |
vps_base_layer_internal_flag | 0 | None |
vps_base_layer_available_flag | 0 | None |
vps_max_layers_minus1 | 0 | None |
vps_max_sub_layers_minus1 | 0 | None |
vps_temporal_id_nesting_flag | 1 | None |
vps_reserved_ffff_16bits | 0xFFFF | None |
general_profile_space | 0 | None |
general_tier_flag | 1 pour le niveau supérieur, 0 pour le niveau principal | None |
general_profile_idc | D3D12_VIDEO_ENCODER_PROFILE_HEVC valeur d’énumération + 1 | None |
general_profile_compatibility_flag[general_profile_space] | 1 | None |
general_progressive_source_flag | 1 | None |
general_interlaced_source_flag | 0 | None |
general_non_packed_constraint_flag | 1 | None |
general_frame_only_constraint_flag | 1 | None |
general_reserved_zero_44bits | Zéros 44 bits | None |
general_level_idc | Consultez le tableau ci-dessus | None |
vps_sub_layer_ordering_info_present_flag | 0 | None |
vps_max_dec_pic_buffering_minus1[0] | (MaxReferenceFramesInDPB/previous reference frames/ + 1 /additional current frame recon pic/) - 1/*moins1 pour l’en-tête/; | None |
vps_max_num_reorder_pics[0] | 0 si aucune trame B. vps_max_dec_pic_buffering_minus1 sinon. | None |
vps_max_latency_increase_plus1[0] | 1 | None |
vps_max_layer_id | 0 | None |
vps_num_layer_sets_minus1 | 0 | None |
vps_timing_info_present_flag | 0 | None |
vps_extension_flag | 0 | None |
Valeurs attendues de l’ensemble de paramètres de séquence HEVC
Élément Syntax | Valeur par défaut attendue | Notes | |
---|---|---|---|
sps_video_parameter_set_id | Spécifique à l’utilisateur | None | |
sps_max_sub_layers_minus1 | Identique à dans vps associé | None | |
sps_temporal_id_nesting_flag | Identique à dans vps associé | None | |
general_profile_space | 0 | None | |
general_tier_flag | 1 pour le niveau supérieur, 0 pour le niveau principal | None | |
general_profile_idc | D3D12_VIDEO_ENCODER_PROFILE_HEVC valeur d’énumération + 1 | None | |
general_profile_compatibility_flag[general_profile_space] | 1 | None | |
general_progressive_source_flag | 1 | None | |
general_interlaced_source_flag | 0 | None | |
general_non_packed_constraint_flag | 1 | None | |
general_frame_only_constraint_flag | 1 | None | |
general_reserved_zero_44bits | Zéros 44 bits | None | |
general_level_idc | Consultez le tableau ci-dessus | None | |
chroma_format_idc | 1 | 4.2.0 pour NV12 et P010 | |
pic_width_in_luma_samples | std::ceil(sequenceTargetResolution.Width / Sous-régionBlockPixelsSize)) * Sous-régionBlockPixelsSize | Utilisez la résolution d’images actuelle pour D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOLUTION_SUPPORT_LIMITS. Sous-régionBlockPixelsSize | |
pic_height_in_luma_samples | std::ceil(sequenceTargetResolution.Height / Sous-régionBlockPixelsSize)) * Sous-régionBlockPixelsSize | Utilisez la résolution d’images actuelle pour D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOLUTION_SUPPORT_LIMITS. Sous-régionBlockPixelsSize | |
conformance_window_flag | 0 si la résolution est alignée sur Sous-régionBlockPixelsSize, 1 sinon | None | |
conf_win_left_offset | 0 | Uniquement si conformance_windows_flag = 1 | |
conf_win_right_offset | (sps.pic_width_in_luma_samples - encodeResolution.Width) >> 1 | Uniquement si conformance_windows_flag = 1 | |
conf_win_top_offset | 0 | Uniquement si conformance_windows_flag = 1 | |
conf_win_bottom_offset | (sps.pic_height_in_luma_samples - encodeResolution.Height) >> 1 | Uniquement si conformance_windows_flag = 1 | |
bit_depth_luma_minus8 | 0 pour NV12, 2 pour P010 | None | |
bit_depth_luma_minus8 | 0 pour NV12, 2 pour P010 | None | |
log2_max_pic_order_cnt_lsb_minus4 | Basé sur D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE_HEVC | None | |
sps_sub_layer_ordering_info_present_flag | Identique à dans vps associé | None | |
sps_max_dec_pic_buffering_minus1 | Identique à dans vps associé | None | |
sps_max_num_reorder_pics | Identique à dans vps associé | None | |
sps_max_latency_increase_plus1 | Identique à dans vps associé | None | |
log2_min_luma_coding_block_size_minus3 | std::log2(minCuSize) - 3) | Par exemple MinCUSize=8 pour D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_CUSIZE_8x8 | |
log2_diff_max_min_luma_coding_block_size | std::log2(maxCuSize) - std::log2(minCuSize)) | Par exemple MaxCUSize=16 pour D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_CUSIZE_16x16 | |
log2_min_transform_block_size_minus2 | std::log2(minTuSize) - 2) | Par exemple MinTuSize=4 pour D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_TUSIZE_4x4 | |
log2_diff_max_min_transform_block_size | std::log2(maxTuSize) - std::log2(minTuSize)) | Par exemple MaxTuSize=16 pour D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_TUSIZE_16x16 | |
max_transform_hierarchy_depth_inter | Basé sur D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC | None | |
max_transform_hierarchy_depth_inter | Basé sur D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC | None | |
scaling_list_enabled_flag | 0 | None | |
amp_enabled_flag | Basé sur D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_USE_ASYMETRIC_MOTION_PARTITION | None | |
sample_adaptive_offset_enabled_flag | Basé sur D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_ENABLE_SAO_FILTER | None | |
pcm_enabled_flag | 0 | None | |
num_short_term_ref_pic_sets | 0 | None | |
long_term_ref_pics_present_flag | Basé sur D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_ENABLE_LONG_TERM_REFERENCES | None | |
num_long_term_ref_pics_sps | 0 | None | |
sps_temporal_mvp_enabled_flag | 0 | None | |
strong_intra_smoothing_enabled_flag | 0 | None | |
vui_parameters_present_flag | 0 | None | |
sps_extension_flag | 0 | None |
Valeurs attendues de l’ensemble de paramètres d’image HEVC
Élément Syntax | Valeur par défaut attendue | Notes |
---|---|---|
pps_pic_parameter_set_id | Spécifique à l’utilisateur | None |
pps_seq_parameter_set_id | Spécifique à l’utilisateur | None |
dependent_slice_segments_enabled_flag | 0 | None |
output_flag_present_flag | 0 | None |
num_extra_slice_header_bits | 0 | None |
sign_data_hiding_enabled_flag | 0 | None |
cabac_init_present_flag | 1 | None |
num_ref_idx_lx_default_active_minus1[0] | std::max(static_cast<INT>(pictureControl.List0ReferenceFramesCount) - 1, 0)) | None |
num_ref_idx_lx_default_active_minus1[1] | std::max(static_cast<INT>(pictureControl.List1ReferenceFramesCount) - 1, 0)) | None |
init_qp_minus26 | 0 | None |
constrained_intra_pred_flag | Basé sur D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_USE_CONSTRAINED_INTRAPREDICTION | None |
transform_skip_enabled_flag | Basé sur D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_ENABLE_TRANSFORM_SKIPPING | None |
cu_qp_delta_enabled_flag | 1 | None |
diff_cu_qp_delta_depth | 0 | None |
pps_cb_qp_offset | 0 | None |
pps_cr_qp_offset | 0 | None |
pps_slice_chroma_qp_offsets_present_flag | 1 | None |
weighted_pred_flag | 0 | Aucune prise en charge de la prédiction pondérée dans l’API |
weighted_bipred_flag | 0 | Aucune prise en charge de la prédiction pondérée dans l’API |
transquant_bypass_enabled_flag | 0 | None |
tiles_enabled_flag | 0 | None |
entropy_coding_sync_enabled_flag | 0 | None |
pps_loop_filter_across_slices_enabled_flag | Basé sur D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_DISABLE_LOOP_FILTER_ACROSS_SLICES | None |
deblocking_filter_control_present_flag | 1 | None |
deblocking_filter_override_enabled_flag | 0 | None |
pps_deblocking_filter_disabled_flag | 0 | None |
pps_beta_offset_div2 | 0 | None |
pps_tc_offset_div2 | 0 | None |
pps_scaling_list_data_present_flag | 0 | None |
lists_modification_present_flag | 1 si l’envoi d’D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC répertorie les modifications. Sinon, définissez sur 0. | None |
log2_parallel_merge_level_minus2 | 0 | None |
slice_segment_header_extension_present_flag | 0 | None |
pps_extension_flag | 0 | None |
Spécifications
Client minimal pris en charge | Windows Build 22000 |
Serveur minimal pris en charge | Windows Build 22000 |
En-tête | d3d12video.h |