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 :
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
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 }
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 |