Partager via


structure D3D12DDI_VIDEO_ENCODER_AV1_PICTURE_CONTROL_CODEC_DATA_0095 (d3d12umddi.h)

La structure D3D12DDI_VIDEO_ENCODER_AV1_PICTURE_CONTROL_CODEC_DATA_0095 est une structure de configuration complète qui contient tous les paramètres nécessaires pour contrôler l’encodage d’une image AV1 (frame).

Syntaxe

typedef struct D3D12DDI_VIDEO_ENCODER_AV1_PICTURE_CONTROL_CODEC_DATA_0095 {
  D3D12DDI_VIDEO_ENCODER_AV1_PICTURE_CONTROL_0095_FLAGS           Flags;
  D3D12DDI_VIDEO_ENCODER_AV1_FRAME_TYPE_0095                      FrameType;
  D3D12DDI_VIDEO_ENCODER_AV1_COMP_PREDICTION_TYPE_0095            CompoundPredictionType;
  D3D12DDI_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS_0095           InterpolationFilter;
  D3D12DDI_VIDEO_ENCODER_AV1_RESTORATION_CONFIG_0095              FrameRestorationConfig;
  D3D12DDI_VIDEO_ENCODER_AV1_TX_MODE_0095                         TxMode;
  UINT                                                            SuperResDenominator;
  UINT                                                            OrderHint;
  UINT                                                            PictureIndex;
  UINT                                                            TemporalLayerIndexPlus1;
  UINT                                                            SpatialLayerIndexPlus1;
  D3D12DDI_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_DESCRIPTOR_0095    ReferenceFramesReconPictureDescriptors[8];
  UINT                                                            ReferenceIndices[7];
  UINT                                                            PrimaryRefFrame;
  UINT                                                            RefreshFrameFlags;
  D3D12DDI_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_CONFIG_0095        LoopFilter;
  D3D12DDI_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_DELTA_CONFIG_0095  LoopFilterDelta;
  D3D12DDI_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_CONFIG_0095       Quantization;
  D3D12DDI_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_DELTA_CONFIG_0095 QuantizationDelta;
  D3D12DDI_VIDEO_ENCODER_AV1_CDEF_CONFIG_0095                     CDEF;
  UINT                                                            QPMapValuesCount;
  INT16                                                           *pRateControlQPMap;
  D3D12DDI_VIDEO_ENCODER_AV1_SEGMENTATION_CONFIG_0095             CustomSegmentation;
  D3D12DDI_VIDEO_ENCODER_AV1_SEGMENTATION_MAP_0095                CustomSegmentsMap;
} D3D12DDI_VIDEO_ENCODER_AV1_PICTURE_CONTROL_CODEC_DATA_0095;

Membres

Flags

Énumération D3D12DDI_VIDEO_ENCODER_AV1_PICTURE_CONTROL_0095_FLAGS qui spécifie les indicateurs pour le frame à encoder.

FrameType

Énumération D3D12DDI_VIDEO_ENCODER_AV1_FRAME_TYPE_0095 qui spécifie le type de frame encodé.

CompoundPredictionType

Énumération D3D12DDI_VIDEO_ENCODER_AV1_COMP_PREDICTION_TYPE_0095 qui spécifie le type de prédiction composé à utiliser. Lié à la syntaxe AV1 reference_select.

InterpolationFilter

Énumération D3D12DDI_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS_0095 qui spécifie le filtre d’interpolation à utiliser pour la prédiction inter sur l’image actuelle. Lié à la syntaxe interpolation_filter.

FrameRestorationConfig

Structure D3D12DDI_VIDEO_ENCODER_AV1_RESTORATION_CONFIG_0095 qui spécifie la configuration de restauration de trame à utiliser.

TxMode

Énumération D3D12DDI_VIDEO_ENCODER_AV1_TX_MODE_0095 qui spécifie le mode de transformation à utiliser.

SuperResDenominator

Indique la configuration de la super résolution. Doit être supérieur ou égal à D3D12_VIDEO_ENCODER_AV1_SUPERRES_DENOM_MIN (tel que défini par la norme de codec AV1) lorsque la super résolution est activée.

OrderHint

Syntaxe du frame actuel order_hint AV1. OrderHint doit toujours être passé même si l’indicateur d’ordre n’est pas codé dans le flux binaire AV1, et il doit refléter l’ordre d’affichage du frame.

PictureIndex

Index d’image unique pour ce cadre qui sera utilisé pour l’identifier de manière unique en tant que référence pour les images futures. Ce paramètre n’est en aucun cas lié à la syntaxe standard AV1, mais il est simplement utilisé pour le suivi de l’implémentation du client d’API D3D à la place.

Le client d’API doit initialiser cette valeur à 0 pour la première D3D12DDI_VIDEO_ENCODER_AV1_FRAME_TYPE_0095_KEY_FRAME et l’incrémenter d’un sur chaque image suivante jusqu’au D3D12DDI_VIDEO_ENCODER_AV1_FRAME_TYPE_0095_KEY_FRAME suivant, quand elle doit être réinitialisée à zéro et suivre le même processus.

OrderHint ne peut pas être utilisé à cet effet, car il a une plage maximale de [0..2^(OrderHintBitsMinus1+1)], qui peut encapsuler et ne pas fonctionner comme identificateur unique des images et de leurs références.

TemporalLayerIndexPlus1

Index de couche temporelle d’image plus un. La valeur zéro indique l’extensibilité temporelle non utilisée. Cette valeur doit être comprise dans la plage [0..D3D12DDI_VIDEO_ENCODER_AV1_CODEC_CONFIGURATION_SUPPORT_0095. MaxTemporalLayers].

SpatialLayerIndexPlus1

Index de couche spatiale d’image plus un. La valeur zéro indique que la scalabilité spatiale n’est pas utilisée. Cette valeur doit se trouver dans la plage [0..D3D12DDI_VIDEO_ENCODER_AV1_CODEC_CONFIGURATION_SUPPORT_0095.MaxSpatialLayers].

ReferenceFramesReconPictureDescriptors[8]

Tableau de structures de D3D12DDI_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_DESCRIPTOR_0095 qui décrit l’instantané d’état actuel de la mémoire tampon DPB complète (y compris les images qui ne sont pas utilisées par l’image actuelle, mais utilisées par les images futures, etc.) conservée dans D3D12DDI_VIDEO_ENCODER_PICTURE_CONTROL_DESC_0082_0. ReferenceFrames. Les index de référence (par exemple, last, altref, etc.) sont mappés à partir de références passées/futures dans ce tableau de descripteurs. Le codec AV1 autorise jusqu’à 8 références dans le DPB.

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 reconstruites D3D12DDI_VIDEO_ENCODER_PICTURE_CONTROL_DESC_0082_0.ReferenceFrames.

La taille de ce tableau correspond toujours à D3D12_VIDEO_ENCODER_PICTURE_CONTROL_DESC. ReferenceFrames.NumTextures pour la commande EncodeFrame associée.

ReferenceIndices[7]

Correspond à la syntaxe ref_frame_idx[i] AV1. Pour un type référence i, ReferenceIndices[i] indique un index entre [0..7] dans ReferenceFramesReconPictureDescriptors où le type de référence frame i-th actuel est stocké dans le DPB. En d’autres termes , ReferenceFramesReconPictureDescriptors[ReferenceIndices[i]] contient le descripteur DPB pour le type de référence i-th.

La i-ième entrée de ReferenceIndices[] correspond à chaque type de référence comme suit.

Index i Type de référence ReferenceFramesReconPictureDescriptors[ReferenceIndices[i]]
0 Dernier Descripteur DPB pour last
1 Last2 Descripteur DPB pour Last2
2 Last3 Descripteur DPB pour Last3
3 Golden Descripteur DPB pour Golden
4 Bwdref Descripteur DPB pour Bwdref
5 Altref Descripteur DPB pour Altref
6 Altref2 Descripteur DPB pour Altref2

PrimaryRefFrame

Correspond à la syntaxe de l’élément AV1 primary_ref_frame dans uncompressed_header(). Spécifie la trame de référence qui contient les valeurs CDF et les autres états qui doivent être chargés au début de l’image. La plage autorisée est [0..7] et les valeurs correspondent comme suit :

Valeur PrimaryRefFrame Valeur de syntaxe AV1 (primary_ref_frame) Cadre de référence sélectionné
0 0 Dernier
1 1 Last2
2 2 Last3
3 3 Golden
4 4 Bwdref
5 5 Altref
6 6 Altref2
7 7 (PRIMARY_REF_NONE) None

RefreshFrameFlags

Correspond à l’élément de syntaxe REFRESH_FRAME_FLAGS AV1.

LoopFilter

Structure D3D12DDI_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_CONFIG_0095 qui spécifie les paramètres de filtre de boucle à utiliser.

LoopFilterDelta

Structure D3D12DDI_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_DELTA_CONFIG_0095 qui spécifie les paramètres delta du filtre de boucle à utiliser.

Quantization

Structure D3D12DDI_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_CONFIG_0095 qui spécifie les paramètres de quantisation à utiliser.

QuantizationDelta

Structure D3D12DDI_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_DELTA_CONFIG_0095 qui spécifie les paramètres delta de quantisation à utiliser.

CDEF

Une structure D3D12DDI_VIDEO_ENCODER_AV1_CDEF_CONFIG_0095 qui spécifie les paramètres de filtrage d’amélioration directionnel contrainte (CDEF) à utiliser.

QPMapValuesCount

Contient le nombre d’éléments présents dans pRateControlQPMap. Cette valeur 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

Tableau 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 D3D12DDI_VIDEO_ENCODER_RESOLUTION_SUPPORT_LIMITS_0080_2 actuelles. QPMapRegionPixelsSize qui transmet les tailles de région carrées. La plage des valeurs delta QP est [-255 ; 255].

CustomSegmentation

Structure D3D12DDI_VIDEO_ENCODER_AV1_SEGMENTATION_CONFIG_0095 qui spécifie les paramètres de segmentation personnalisés à utiliser. Utilisé uniquement lorsque D3D12DDI_VIDEO_ENCODER_AV1_PICTURE_CONTROL_0095_FLAG_ENABLE_FRAME_SEGMENTATION_CUSTOM est défini pour l’image actuelle.

CustomSegmentsMap

Utilisé uniquement lorsque D3D12DDI_VIDEO_ENCODER_AV1_PICTURE_CONTROL_0095_FLAG_ENABLE_FRAME_SEGMENTATION_CUSTOM est défini pour l’image actuelle. Une structure D3D12DDI_VIDEO_ENCODER_AV1_SEGMENTATION_MAP_0095 qui spécifie la carte de segmentation personnalisée à utiliser si CustomSegmentation.UpdateMap est défini. Sinon, la carte de segments est héritée du cadre de référence.

Remarques

Attentes de gestion DPB

Voici le contrat auquel le client d’API et le pilote doivent se conformer lors de l’utilisation de cette API :

  1. Lors de l’encodage D3D12DDI_VIDEO_ENCODER_AV1_FRAME_TYPE_0095_KEY_FRAME :

    • PrimaryRefFrame doit être 7 (PRIMARY_REF_NONE)
    • RefreshFrameFlags doit être 0xFF (conforme à la syntaxe de flux binaire standard du codec AV1)
    • Pour toutes les entrées de tableau dans ReferenceFramesReconPictureDescriptors, ReconstructedPictureResourceIndex doit être défini sur D3D12_VIDEO_ENCODER_AV1_INVALID_DPB_RESOURCE_INDEX
    • Les valeurs dans ReferenceIndices[7] sont indistinctes, car toute valeur [0..7] pointe vers un emplacement DPB inutilisé dans ReferenceFramesReconPictureDescriptors comme indiqué ci-dessus.
    • D3D12DDI_VIDEO_ENCODE_REFERENCE_FRAMES_0082_0 seront renseignés comme suit :
      • NumTexture2Ds = 0
      • ppTexture2Ds = NULL
      • pSubresources = NULL
  2. Lors de l’encodage d’un type de trame avec des références (par exemple. SWITCH/INTER) :

    • PrimaryRefFrame spécifie le cadre de référence qui contient les valeurs CDF et d’autres états qui doivent être chargés au début de l’image.

    • RefreshFrameFlags doit être défini en conséquence pour indiquer sur quels emplacements DPB ReferenceFramesReconPictureDescriptors l’image reconstruite de cadre encodée actuelle sera placée après l’exécution de l’encodage. Cette valeur doit correspondre exactement à ce que le client d’API codera pour refresh_frame_flags élément de syntaxe AV1 dans l’en-tête d’image associé pour l’image actuelle.

    • Les entrées de tableau dans ReferenceFramesReconPictureDescriptors pour l’image actuelle suivent exactement ce que RefreshFrameFlags a indiqué pour l’image précédente.

      • Par exemple : si RefreshFrameFlags indique que l’image N actuelle sera placée dans les emplacements 2, 3 et 6, puis dans l’appel encodeFrame suivant pour l’image N+1, le paramètre ReconstructedPictureResourceIndex dans les entrées ReferenceFramesReconPictureDescriptors[1], ReferenceFramesReconPictureDescriptors[2], ReferenceFramesReconPictureDescriptors[5] doit pointer vers l’image reconstruite N dans D3D12DDI_VIDEO_ENCODE_REFERENCE_FRAMES_ 0080.

      • Notez que cela inclut la prise en compte de RefreshFrameFlags=0xFF pour D3D12DDI_VIDEO_ENCODER_AV1_FRAME_TYPE_0095_KEY_FRAME , en marquant toutes les entrées ReferenceFramesReconPictureDescriptors pointant vers l’image reconstruite du cadre KEY.

      • Si une image (non clé) n’est pas marquée avec D3D12DDI_VIDEO_ENCODER_PICTURE_CONTROL_FLAG_0080_USED_AS_REFERENCE_PICTURE, leur RefreshFrameFlags doit être égal à zéro pour l’indiquer.

    • Les valeurs dans ReferenceIndices[7] se trouvent dans [0..7] et pointent vers des emplacements DPB dans ReferenceFramesReconPictureDescriptors.

    • Les valeurs de ReferenceIndices[7] doivent correspondre exactement à ce que code le client API dans l’en-tête d’image pour ref_frame_idx.

    • Conformément à la définition de syntaxe AV1 de ref_frame_idx il n’est pas nécessaire que les valeurs d’entrée de tableau soient uniques.

    • If ReferenceFramesReconPictureDescriptors[ReferenceIndices[i]]. ReconstructedPictureResourceIndex == D3D12_VIDEO_ENCODER_AV1_INVALID_DPB_RESOURCE_INDEX

      • Cela indique que l’image de référence i-th ne sera pas utilisée pour le cadre actuel et doit être ignorée.
    • Sinon ( Valid ReferenceFramesReconPictureDescriptors[ReferenceIndices[i]]. ReconstructedPictureResourceIndex)

      • Cela indique que l’i-th de référence pointe vers l’emplacement DPB ReferenceIndices[i] et que l’image reconstruite à utiliser est D3D12DDI_VIDEO_ENCODE_REFERENCE_FRAMES_0080. ppTexture2Ds[ReferenceFramesReconPictureDescriptors[ReferenceIndices[i]].ReconstructedPictureResourceIndex]
    • D3D12DDI_VIDEO_ENCODE_REFERENCE_FRAMES_0080 seront renseignés comme suit :

      • NumTexture2Ds = {nombre de valeurs uniques de ReferenceFramesReconPictureDescriptors.ReconstructedPictureResourceIndex[j] != D3D12_VIDEO_ENCODER_AV1_INVALID_DPB_RESOURCE_INDEX pour j dans {0..7} }
      • ppTexture2Ds = { tableau compact (aucune entrée null) contenant l’image reconstruite à partir des images précédemment encodées qui seront utilisées comme références }
      • [Mode Tableau de textures uniquement] pSubresources = { tableau compact (aucune entrée null) contenant l’index de sous-ressource du tableau de textures à partir des images précédemment encodées qui seront utilisées comme références }
  3. Lors de l’encodage d’un type de trame sans références, mais sans effacer le DPB (c’est-à-dire. INTRA_ONLY)

    • PrimaryRefFrame doit être 7 (PRIMARY_REF_NONE)

    • RefreshFrameFlags doit être défini en conséquence pour indiquer sur quels emplacements DPB ReferenceFramesReconPictureDescriptors l’image reconstruite de cadre encodée actuelle sera placée après l’exécution de l’encodage. Cette valeur doit correspondre exactement à ce que le client d’API codera pour refresh_frame_flags élément de syntaxe AV1 dans l’en-tête d’image associé pour l’image actuelle.

    • Les entrées de tableau dans ReferenceFramesReconPictureDescriptors pour l’image actuelle suivent exactement ce que RefreshFrameFlags a indiqué pour l’image précédente.

    • Les valeurs dans ReferenceIndices[7] sont ignorées, car l’image intra-seule n’utilise aucune référence.

    • D3D12DDI_VIDEO_ENCODE_REFERENCE_FRAMES_0080 contient l’instantané DPB et sera rempli comme suit :

      • NumTexture2Ds = {nombre de valeurs uniques de ReferenceFramesReconPictureDescriptors.ReconstructedPictureResourceIndex[j] != D3D12_VIDEO_ENCODER_AV1_INVALID_DPB_RESOURCE_INDEX pour j dans {0..7} }
      • ppTexture2Ds = { tableau compact (aucune entrée null) contenant l’image reconstruite à partir des images précédemment encodées auxquelles référence ReferenceFramesReconPictureDescriptors.ReconstructedPictureResourceIndex[j] pour j dans {0..7} }
      • [Mode Tableau de textures uniquement] pSubresources = { tableau compact (aucune entrée null) contenant l’index de sous-ressource du tableau de textures à partir des images précédemment encodées auxquelles font référence ReferenceFramesReconPictureDescriptors.ReconstructedPictureResourceIndex[j] pour j dans {0..7} }

Pour plus d’informations, consultez Encodage vidéo D3D12 AV1 .

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows 11, version 24H2 (WDDM 3.2)
En-tête d3d12umddi.h

Voir aussi

D3D12DDI_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_0082_0