Partager via


structure D3D12DDI_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_MARKING_OPERATION_0082_0 (d3d12umddi.h)

La structure D3D12DDI_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_MARKING_OPERATION_0082_0 décrit les modifications apportées aux images de référence en tant qu’opérations de mémoire en tant que tuple d’un identificateur d’opération et les paramètres associés nécessaires à l’opération.

Syntaxe

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;

Membres

memory_management_control_operation

Opération de contrôle à appliquer pour affecter l’état de marquage de l’image de référence. Les valeurs d’opération valides suivent.

Valeur Description
0 Terminer memory_management_control_operation boucle d’élément de syntaxe.
1 Marquez une image de référence à court terme comme « inutilisée pour référence ».
2 Marquez une image de référence à long terme comme « inutilisée pour référence ».
3 Marquez une image de référence à court terme comme « utilisée pour la référence à long terme » et affectez-lui un index de trame à long terme.
4 Spécifiez l’index d’image à long terme maximal et marquez toutes les images de référence à long terme dont les index de trame à long terme sont supérieurs à la valeur maximale comme « inutilisées pour référence ».
5 Marquez toutes les images de référence comme « inutilisées pour référence » et définissez la variable MaxLongTermFrameIdx sur « aucun index de trame à long terme ».
6 Marquez l’image actuelle comme « utilisée pour la référence à long terme » et affectez-lui un index de trame à long terme.

difference_of_pic_nums_minus1

Ce membre est utilisé avec memory_management_control_operation égal à 3 ou 1 pour affecter un index de trame à long terme à une image de référence à court terme ou pour marquer une image de référence à court terme comme « inutilisée pour référence ». Lorsque le memory_management_control_operation associé est traité par le processus de décodage, le numéro d’image obtenu dérivé de difference_of_pic_nums_minus1 doit être un numéro d’image attribué à l’une des images de référence marquées comme « utilisées pour référence » et non affectées précédemment à un index de trame à long terme.

long_term_pic_num

Ce membre est utilisé avec memory_management_control_operation égal à 2 pour marquer une image de référence à long terme comme « inutilisée pour référence ». Lorsque le memory_management_control_operation associé est traité par le processus de décodage, long_term_pic_num doit être égal à un numéro d’image à long terme attribué à l’une des images de référence qui est actuellement marquée comme « utilisée pour la référence à long terme ».

long_term_frame_idx

Ce membre est utilisé avec memory_management_control_operation égal à 3 ou 6 pour affecter un index d’image à long terme à une image. Lorsque le memory_management_control_operation associé est traité par le processus de décodage, la valeur de long_term_frame_idx doit être comprise entre 0 et MaxLongTermFrameIdx, inclus.

max_long_term_frame_idx_plus1

La valeur moins 1 spécifie la valeur maximale de l’index de trame à long terme autorisée pour les images de référence à long terme (jusqu’à la réception d’une autre valeur de max_long_term_frame_idx_plus1). La valeur de max_long_term_frame_idx_plus1 doit être comprise entre 0 et max_num_ref_frames inclus.

Remarques

La variable MaxLongTermFrameIdx est dérivée comme suit :

  • Si max_long_term_frame_idx_plus1 est égal à 0, MaxLongTermFrameIdx est défini sur « aucun index de trame à long terme ».
  • Si max_long_term_frame_idx_plus1 est supérieur à 0, MaxLongTermFrameIdx est défini sur max_long_term_frame_idx_plus1 − 1.

L’opération de marquage de l’image actuelle en tant que référence à court terme est donnée par un indicateur présent dans la structure D3D12DDI_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_FLAGS_0080 avec ses valeurs PictureOrderCountNumber et FrameDecodingOrderNumber correspondantes indiquées dans la structure de contrôle d’image associée.

La variable max_num_ref_frames est indiquée par la capacité maximale de mémoire tampon d’images décodées (DPB) signalée.

Notez que pour marquer une image d’actualisation instantanée du décodeur (IDR) comme référence à long terme, le mécanisme explicite proposé consiste d’abord à la marquer comme référence à court terme, en définissant d’abord D3D12DDI_VIDEO_ENCODER_PICTURE_CONTROL_FLAG_0080_USED_AS_REFERENCE_PICTURE lors de l’appel de EncodeFrame pour le frame IDR, puis en la faisant passer pour un cadre de référence à long terme à l’aide de l’opération de gestion de la mémoire « 3 » pour marquer une image de référence à court terme comme « utilisée pour la référence à long terme » et affecter une image de référence à long terme index de trame à long terme pour celui-ci.

Sinon, si vous encodez un frame IDR et définissez adaptive_ref_pic_marking_mode_flag = 1, le pilote suppose que le client tente de définir l’en-tête de tranche H264 long_term_reference_flag et le fait dans le flux de bits de sortie pour l’appel EncodeFrame .

Pour plus d’informations sur le processus de marquage d’image, consultez la spécification H.264, section 8.2.5.4 « Processus de marquage d’image de référence décodé par contrôle de mémoire adaptatif ».

Pour plus d’informations générales, consultez Encodage vidéo D3D12 .

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows 11 (WDDM 3.0)
En-tête d3d12umddi.h

Voir aussi

D3D12DDI_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_0082_0

PFND3D12DDI_VIDEO_ENCODE_FRAME_0082_0