Partager via


D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264 structure (d3d12video.h)

Représente les éléments de contrôle au niveau de l’image pour la commande EncodeFrame associée pour l’encodage H.264.

Syntaxe

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;

Membres

Flags

Combinaison or au niveau du bit de valeurs de l’énumération D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_FLAGS spécifiant des indicateurs de configuration pour le frame encodé.

FrameType

Valeur de l’énumération D3D12_VIDEO_ENCODER_FRAME_TYPE_H264 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.

pic_parameter_set_id

UINT spécifiant la valeur à utiliser dans les en-têtes de tranche du frame actuel pour référencer le PPS.

idr_pic_id

Lorsque FrameType** est D3D12_VIDEO_ENCODER_FRAME_TYPE_H264_IDR_FRAME, un UINT indiquant l’identificateur du frame IDR à utiliser dans tous les en-têtes de tranches présents dans le frame.

PictureOrderCountNumber

UINT spécifiant l’ordre d’affichage actuel de l’image.

FrameDecodingOrderNumber

UINT spécifiant l’ordre de décodage de trame avec une sémantique, comme indiqué par l’en-tête de tranche frame_num élément de syntaxe qui s’incrémente après chaque image de référence.

TemporalLayerIndex

UINT spécifiant le numéro de couche image dans la hiérarchie temporelle. Vérifiez le nombre maximal de couches dans D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264.

List0ReferenceFramesCount

UINT spécifiant le nombre de références d’images passées à utiliser pour ce frame. Cette valeur doit être cohérente avec ce qui a été exposé dans D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264.

pList0ReferenceFrames

Pointeur vers un tableau UINT spécifiant la liste des cadres de référence de frame précédents à utiliser pour ce frame. Chaque valeur entière de ce tableau s’indexe dans pReferenceFramesReconPictureDescriptors pour référencer des images conservées dans le DPB.

List1ReferenceFramesCount

UINT spécifiant le nombre de références de trame futures à utiliser pour ce frame. Cette valeur doit être cohérente avec ce qui a été exposé dans D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264.

pList1ReferenceFrames

Pointeur vers un tableau UINT spécifiant la liste des futurs cadres de référence de trame à utiliser pour ce frame. Chaque valeur entière de ce tableau s’indexe dans pReferenceFramesReconPictureDescriptors pour référencer des 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 listes pList0ReferenceFrames et pList1ReferenceFrames répertorient les index à partir de références passées/futures dans ce tableau de descripteurs.

Ce tableau de descripteurs mappe à son tour une image de référence pour ce cadre dans un index de ressources dans le tableau d’images reconstruits D3D12_VIDEO_ENCODER_PICTURE_CONTROL_DESC. ReferenceFrames. En outre, pour chaque image de référence, elle indique le numéro d’ordre d’encodage et d’affichage, et indique 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.

adaptive_ref_pic_marking_mode_flag

UCHAR définissant un mode sémantique pour la gestion des références de trame.

adaptive_ref_pic_marking_mode_flag valeur Mode de marquage d’image de référence spécifié
0 1
Mode de marquage d’image de référence de fenêtre glissante : mode de marquage fournissant un mécanisme premier entré premier sorti pour les images de référence à court terme. Mode de marquage d’image de référence adaptatif : mode de marquage d’image de référence fournissant des éléments de syntaxe pour spécifier le marquage des images de référence comme « inutilisées pour référence » et pour affecter des index de trame à long terme.

RefPicMarkingOperationsCommandsCount

UINT spécifiant le nombre d’images de référence marquant les opérations associées à l’image actuelle. Nécessite que adaptive_ref_pic_marking_mode_flag soit défini sur 1.

pRefPicMarkingOperationsCommands

Pointeur vers un tableau de structures D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_MARKING_OPERATION représentant la liste des images de référence marquant les opérations associées au frame actuel. Les opérations décrites dans cette liste doivent être reflétées dans les descripteurs DPB en conséquence pendant la session d’encodage.

List0RefPicModificationsCount

UINT spécifiant le nombre d’éléments dans pList0RefPicModifications.

pList0RefPicModifications

Pointeur vers un tableau de structures D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_LIST_MODIFICATION_OPERATION représentant la liste des opérations de modification de liste d’images de référence pour la liste pList0ReferenceFrames .

List1RefPicModificationsCount

UINT spécifiant le nombre d’éléments dans pList1RefPicModifications.

pList1RefPicModifications

Pointeur vers un tableau de structures D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_LIST_MODIFICATION_OPERATION représentant la liste des opérations de modification de liste d’images de référence pour la liste pList1ReferenceFrames .

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 de trame aux valeurs alignées les plus proches.

pRateControlQPMap

Pointeur vers un tableau d’Int8 contenant, dans l’ordre d’analyse de ligne/colonne, les valeurs de mappage QP à utiliser sur chaque région carrée pour ce frame. 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

Notez que si le cadre actuel est marqué comme image de référence, la sortie doit contenir l’image reconstruite ainsi que le flux de bits pour que l’hôte la place dans les commandes futures dans la liste de références d’images reconstruites. Notez qu’il peut y avoir des limitations pour que certains types de frame soient marqués comme références, case activée prise en charge des fonctionnalités avant de définir ces valeurs.

Les tableaux suivants répertorient les valeurs SPS et PPS attendues pour l’encodage H264.

mappages Level_idc pour H264

Niveau D3D12 Level_idc attendus Notes
D3D12_VIDEO_ENCODER_LEVELS_H264_1 10 None
D3D12_VIDEO_ENCODER_LEVELS_H264_1b 11 SPS.constraint_set3 doit être 1
D3D12_VIDEO_ENCODER_LEVELS_H264_11 11 None
D3D12_VIDEO_ENCODER_LEVELS_H264_12 12 None
D3D12_VIDEO_ENCODER_LEVELS_H264_13 13 None
D3D12_VIDEO_ENCODER_LEVELS_H264_2 20 None
D3D12_VIDEO_ENCODER_LEVELS_H264_21 21 None
D3D12_VIDEO_ENCODER_LEVELS_H264_22 22 None
D3D12_VIDEO_ENCODER_LEVELS_H264_3 30 None
D3D12_VIDEO_ENCODER_LEVELS_H264_31 31 None
D3D12_VIDEO_ENCODER_LEVELS_H264_32 32 None
D3D12_VIDEO_ENCODER_LEVELS_H264_4 40 None
D3D12_VIDEO_ENCODER_LEVELS_H264_41 41 None
D3D12_VIDEO_ENCODER_LEVELS_H264_42 42 None
D3D12_VIDEO_ENCODER_LEVELS_H264_5 50 None
D3D12_VIDEO_ENCODER_LEVELS_H264_51 51 None
D3D12_VIDEO_ENCODER_LEVELS_H264_52 52 None
D3D12_VIDEO_ENCODER_LEVELS_H264_6 60 Aucun
D3D12_VIDEO_ENCODER_LEVELS_H264_61 61 None
D3D12_VIDEO_ENCODER_LEVELS_H264_62 62 None

Valeurs attendues du jeu de paramètres de séquence H264

Élément Syntax Valeur par défaut attendue Notes
profile_idc Valeur d’énumération de H264_PROFILE_MAIN/H264_PROFILE_HIGH/H264_PROFILE_HIGH10 None
constraint_set0_flag 0 None
constraint_set1_flag 0 None
constraint_set2_flag 0 None
constraint_set3_flag 0 1 si vous utilisez D3D12_VIDEO_ENCODER_LEVELS_H264_1b
constraint_set4_flag 0 None
constraint_set5_flag 0 None
reserved_zero_2bits 0 None
level_idc Consultez le tableau ci-dessus pour connaître les niveaux H264 None
seq_parameter_set_id Spécifique à l’utilisateur None
chroma_format_idc 1 Pour une utilisation avec les formats P010 ou NV12 YUV 4.2.0 uniquement
bit_depth_luma_minus8 0 pour NV12, 2 pour P010 None
qpprime_y_zero_transform_bypass_flag 0 None
seq_scaling_matrix_present_flag 0 None
log2_max_frame_num_minus4 Identique à dans D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE_H264 None
pic_order_cnt_type Identique à dans D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE_H264 Seuls les modes 0 et 2 pris en charge dans cette API
log2_max_pic_order_cnt_lsb_minus4 Identique à dans D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE_H264 Uniquement si pic_order_cnt_type == 0
max_num_ref_frames Nombre maximal d’images de référence utilisées dans la session d’encodage None
gaps_in_frame_num_value_allowed_flag 0 None
pic_width_in_mbs_minus1 std::ceil(sequenceTargetResolution.Width / 16.0)) - 1; None
pic_height_in_map_units_minus1 std::ceil(sequenceTargetResolution.Height / 16.0)) - 1; None
frame_mbs_only_flag 0 Aucune prise en charge entrelacs
direct_8x8_inference_flag Basé sur D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_FLAG_USE_ADAPTIVE_8x8_TRANSFORM None
frame_cropping_flag 0 ou 1 selon que la résolution d’encodage est 16 alignée ou non None
frame_cropping_rect_left_offset 0 Uniquement si frame_cropping_flag = 1
frame_cropping_rect_right_offset ((pic_width_in_mbs_minus1+1) * 16 - sequenceTargetResolution.Width) / 2 Uniquement si frame_cropping_flag = 1
frame_cropping_rect_top_offset ((pic_height_in_map_units_minus1+1) * 16 - sequenceTargetResolution.Height) / 2 Uniquement si frame_cropping_flag = 1
frame_cropping_rect_bottom_offset 0 Uniquement si frame_cropping_flag = 1
vui_paramenters_present_flag 0 None

Valeurs attendues du jeu de paramètres d’image H264

Élément Syntax Valeur par défaut attendue Notes
pic_parameter_set_id Spécifique à l’utilisateur None
seq_parameter_set_id Spécifique à l’utilisateur None
entropy_coding_mode_flag Basé sur D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_FLAG_ENABLE_CABAC_ENCODING None
pic_order_present_flag 0 Prise en charge uniquement pour pic_cnt_type = 0, 2
num_slice_groups_minus1 0 None
num_ref_idx_l1_active_minus1 std::max(static_cast<INT>(pictureControl.List0ReferenceFramesCount) - 1, 0) None
num_ref_idx_l0_active_minus1 std::max(static_cast<INT>(pictureControl.List1ReferenceFramesCount) - 1, 0) None
weighted_pred_flag 0 None
weighted_bipred_idc 0 None
pic_init_qp_minus26 0 None
pic_init_qs_minus26 0 None
chroma_qp_index_offset 0 None
deblocking_filter_control_present_flag 1 None
constrained_intra_pred_flag Basé sur D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_FLAG_USE_CONSTRAINED_INTRAPREDICTION None
redundant_pic_cnt_present_flag 0 None
transform_8x8_mode_flag Basé sur D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_FLAG_USE_ADAPTIVE_8x8_TRANSFORM Uniquement si vous utilisez des profils élevés
pic_scaling_matrix_present_flag 0 None
second_chroma_qp_index_offset 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