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 que le frame soit encodé.
FrameType
Énumération D3D12DDI_VIDEO_ENCODER_AV1_FRAME_TYPE_0095 qui spécifie le type d’image encodé.
CompoundPredictionType
Énumération D3D12DDI_VIDEO_ENCODER_AV1_COMP_PREDICTION_TYPE_0095 qui spécifie le type de prédiction composé à utiliser. Associé à 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. Associé à la syntaxe interpolation_filter.
FrameRestorationConfig
Structure D3D12DDI_VIDEO_ENCODER_AV1_RESTORATION_CONFIG_0095 qui spécifie la configuration de restauration d’images à 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 de frame actuelle order_hint AV1. OrderHint doit toujours être passé même si vous ne codez pas l’indicateur d’ordre dans le flux binaire AV1 et qu’il doit refléter l’ordre d’affichage du cadre.
PictureIndex
Index d’image unique pour ce cadre qui sera utilisé pour l’identifier de manière unique comme référence pour les images futures. Ce paramètre n’est lié d’aucune façon à la syntaxe standard AV1, mais 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’une sur chaque image suivante jusqu’au D3D12DDI_VIDEO_ENCODER_AV1_FRAME_TYPE_0095_KEY_FRAMEsuivant, 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 être encapsulé et ne fonctionne pas 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 se trouver 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 l’extensibilité 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 D3D12DDI_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_DESCRIPTOR_0095 qui décrit l’instantané d’état actuel de l’intégralité (c’est-à-dire, y compris les images qui ne sont pas utilisées par l’image actuelle, mais utilisées par les images futures, etc.) mémoire tampon DPB conservée dans D3D12DDI_VIDEO_ENCODER_PICTURE_CONTROL_DESC_0082_0. RéférenceFrames. 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 permet jusqu’à 8 références dans le DPB.
Ce tableau de descripteurs, à son tour, mappe une image de référence pour ce cadre en index de ressource 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 de référence i, ReferenceIndices[i] indique un index compris entre [0..7] dans ReferenceFramesReconPictureDescriptors où le type de référence i-th frame 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.
L’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 le dernier |
1 | Last2 | Descripteur DPB pour Last2 |
2 | Last3 | Descripteur DPB pour Last3 |
3 | Doré | 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 d’élément AV1 primary_ref_frame dans uncompressed_header(). 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. La plage autorisée est [0..7] et les valeurs correspondent comme suit :
Valeur PrimaryRefFrame | Valeur de syntaxe AV1 (primary_ref_frame) | Image de référence sélectionnée |
---|---|---|
0 | 0 | Dernier |
1 | 1 | Last2 |
2 | 2 | Last3 |
3 | 3 | Doré |
4 | 4 | Bwdref |
5 | 5 | Altref |
6 | 6 | Altref2 |
7 | 7 (PRIMARY_REF_NONE) | Aucun |
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
Structure D3D12DDI_VIDEO_ENCODER_AV1_CDEF_CONFIG_0095 qui spécifie les paramètres de filtrage de l’amélioration directionnelle 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 d’images aux valeurs alignées les plus proches.
pRateControlQPMap
Tableau contenant, dans l’ordre d’analyse de ligne/colonne, les valeurs de mappage 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 actuelle et D3D12DDI_VIDEO_ENCODER_RESOLUTION_SUPPORT_LIMITS_0080_2. QPMapRegionPixelsSize transmettant 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 le frame actuel.
CustomSegmentsMap
Utilisé uniquement lorsque D3D12DDI_VIDEO_ENCODER_AV1_PICTURE_CONTROL_0095_FLAG_ENABLE_FRAME_SEGMENTATION_CUSTOM est défini pour le frame actuel. Structure D3D12DDI_VIDEO_ENCODER_AV1_SEGMENTATION_MAP_0095 qui spécifie la carte de segmentation personnalisée à utiliser si CustomSegmentation.UpdateMap est définie. Sinon, la carte de segments est héritée du cadre de référence.
Remarques
Attentes de gestion DPB
Voici le contrat que le client d’API et le pilote doivent respecter 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 av1)
- Pour toutes les entrées de tableau dans ReferenceFramesReconPictureDescriptors, ReconstructedPictureResourceIndex doit être définie sur D3D12_VIDEO_ENCODER_AV1_INVALID_DPB_RESOURCE_INDEX
- Les valeurs de ReferenceIndices[7] sont indistinctes, car n’importe quelle valeur [0..7] pointe vers un emplacement DPB inutilisé dans ReferenceFramesReconPictureDescriptors comme point ci-dessus.
-
D3D12DDI_VIDEO_ENCODE_REFERENCE_FRAMES_0082_0 sera renseigné comme suit :
- NumTexture2Ds = 0
- ppTexture2Ds = NULL
- pSubresources = NULL
Lors de l’encodage d’un type de frame 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 quelle ReferenceFramesReconPictureDescriptors emplacements DPB les images encodées actuelles sont placées après l’exécution de l’encodage. Cette valeur doit correspondre exactement à ce que le client d’API code pour refresh_frame_flags élément de syntaxe AV1 dans l’en-tête d’image associé pour le cadre actuel.
Les entrées de tableau dans ReferenceFramesReconPictureDescriptors pour l’image actuelle suivent exactement ce que RefreshFrameFlags indiqué pour l’image précédente.
Par exemple : si RefreshFrameFlags indique que l’image N actuelle est placée dans les emplacements 2, 3 et 6, puis dans le prochain appel encodeFrame pour le frame N+1, le paramètre ReconstructedPictureResourceIndex dans les entrées ReferenceFramesReconPictureDescriptors[1], ReferenceFramesReconPictureDescriptors[2], ReferenceFramesReconPictureDescriptors[5] doit pointer vers l’image n reconstruite dans D3D12DDI_VIDEO_ENCODE_REFERENCE_FRAMES_0080.
Notez que cela inclut la prise en compte RefreshFrameFlags=0xFF pour D3D12DDI_VIDEO_ENCODER_AV1_FRAME_TYPE_0095_KEY_FRAME également, en marquant toutes les ReferenceFramesReconPictureDescriptors entrées pointant vers l’image reconstruite du cadre KEY.
Si une image (non clé) ne sera pas marquée avec D3D12DDI_VIDEO_ENCODER_PICTURE_CONTROL_FLAG_0080_USED_AS_REFERENCE_PICTURE, leur RefreshFrameFlags doit être zéro pour indiquer cela.
Les valeurs de 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 le code client d’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.
Si ReferenceFramesReconPictureDescriptors[ReferenceIndices[i]]. ReconstructedPictureResourceIndex == D3D12_VIDEO_ENCODER_AV1_INVALID_DPB_RESOURCE_INDEX
- Cela indique que l’i-ième image de référence ne sera pas utilisée pour le cadre actuel et doit être ignorée.
Sinon (ReferenceFramesReconPictureDescriptors valides [ReferenceIndices[i]]. ReconstructedPictureResourceIndex)
- Cela indique que l’i-ième 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 sera renseigné 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 = { compact array (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 texture uniquement] pSubresources = { tableau compact (aucune entrée Null) contenant l’index de sous-source 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 d’image sans références, mais sans effacer le DPB (par exemple. INTRA_ONLY)
PrimaryRefFrame doit être 7 (PRIMARY_REF_NONE)
RefreshFrameFlags doit être défini en conséquence pour indiquer sur quelle ReferenceFramesReconPictureDescriptors emplacements DPB les images encodées actuelles sont placées après l’exécution de l’encodage. Cette valeur doit correspondre exactement à ce que le client d’API code pour refresh_frame_flags élément de syntaxe AV1 dans l’en-tête d’image associé pour le cadre actuel.
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 de ReferenceIndices[7] sont ignorées, car la trame intra seule n’utilise aucune référence.
D3D12DDI_VIDEO_ENCODE_REFERENCE_FRAMES_0080 contient l’instantané DPB et sera rempli comme suit :
- NumTexture2Ds = {number of valeurs uniques de ReferenceFramesReconPictureDescriptors.ReconstructedPictureResourceIndex[j] != D3D12_VIDEO_ENCODER_AV1_INVALID_DPB_RESOURCE_INDEX for j in {0..7} }
- ppTexture2Ds = { compact array (aucune entrée null) contenant l’image reconstruite à partir des images précédemment encodées référencées par ReferenceFramesReconPictureDescriptors.ReconstructedPictureResourceIndex[j] for j in {0..7} }
- [Mode Tableau de texture uniquement] pSubresources = { compact array (aucune entrée Null) contenant l’index de sous-source du tableau de textures des images précédemment encodées référencées par ReferenceFramesReconPictureDescriptors.ReconstructedPictureResourceIndex[j] for j dans {0..7} }
Pour plus d’informations, consultez encodage vidéo D3D12 AV1.
Exigences
Exigence | Valeur |
---|---|
client minimum pris en charge | Windows 11, version 24H2 (WDDM 3.2) |
d’en-tête | d3d12umddi.h |