Condividi tramite


struttura D3D12DDI_VIDEO_ENCODER_AV1_PICTURE_CONTROL_CODEC_DATA_0095 (d3d12umddi.h)

La struttura D3D12DDI_VIDEO_ENCODER_AV1_PICTURE_CONTROL_CODEC_DATA_0095 è una struttura di configurazione completa che contiene tutti i parametri necessari per controllare la codifica di un'immagine AV1 (frame).

Sintassi

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;

Members

Flags

Enumerazione D3D12DDI_VIDEO_ENCODER_AV1_PICTURE_CONTROL_0095_FLAGS che specifica i flag per il frame da codificare.

FrameType

Enumerazione D3D12DDI_VIDEO_ENCODER_AV1_FRAME_TYPE_0095 che specifica il tipo di frame da codificare.

CompoundPredictionType

Enumerazione D3D12DDI_VIDEO_ENCODER_AV1_COMP_PREDICTION_TYPE_0095 che specifica il tipo di stima composta da utilizzare. Correlato alla sintassi di AV1 reference_select.

InterpolationFilter

Enumerazione D3D12DDI_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS_0095 che specifica il filtro di interpolazione da usare per la stima tra il frame corrente. Correlati alla sintassi interpolation_filter.

FrameRestorationConfig

Struttura D3D12DDI_VIDEO_ENCODER_AV1_RESTORATION_CONFIG_0095 che specifica la configurazione di ripristino dei fotogrammi da utilizzare.

TxMode

Enumerazione D3D12DDI_VIDEO_ENCODER_AV1_TX_MODE_0095 che specifica la modalità di trasformazione da utilizzare.

SuperResDenominator

Indica la configurazione per la risoluzione con privilegi avanzati. Deve essere maggiore o uguale a D3D12_VIDEO_ENCODER_AV1_SUPERRES_DENOM_MIN (come definito dallo standard codec AV1) quando è abilitata la risoluzione con privilegi avanzati.

OrderHint

Sintassi frame corrente order_hint AV1. OrderHint deve essere sempre passato anche quando non codifica l'hint dell'ordine nel bitstream AV1 e deve riflettere l'ordine di visualizzazione del frame.

PictureIndex

Indice immagine univoco per questo frame che verrà usato per identificarlo in modo univoco come riferimento per i fotogrammi futuri. Questo parametro non è correlato in alcun modo alla sintassi standard AV1, ma viene semplicemente usata per il rilevamento dell'implementazione del client dell'API D3D.

Il client API deve inizializzare questo valore a 0 per il primo D3D12DDI_VIDEO_ENCODER_AV1_FRAME_TYPE_0095_KEY_FRAME e incrementarlo di uno in ogni fotogramma successivo fino al successivo D3D12DDI_VIDEO_ENCODER_AV1_FRAME_TYPE_0095_KEY_FRAME, quando deve essere reimpostato su zero e seguire lo stesso processo.

OrderHint non può essere usato a questo scopo perché ha un intervallo massimo di [0..2^(OrderHintBitsMinus1+1)], che può essere eseguito il wrapping e non funziona come identificatore univoco dei frame e dei relativi riferimenti.

TemporalLayerIndexPlus1

Indice del livello temporale immagine più uno. Il valore zero indica che la scalabilità temporale non viene usata. Questo valore deve essere compreso nell'intervallo [0..D3D12DDI_VIDEO_ENCODER_AV1_CODEC_CONFIGURATION_SUPPORT_0095. MaxTemporalLayers].

SpatialLayerIndexPlus1

Indice del livello spaziale immagine più uno. Il valore zero indica che la scalabilità spaziale non viene usata. Questo valore deve essere compreso nell'intervallo [0..D3D12DDI_VIDEO_ENCODER_AV1_CODEC_CONFIGURATION_SUPPORT_0095.MaxSpatialLayers].

ReferenceFramesReconPictureDescriptors[8]

Matrice di strutture di D3D12DDI_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_DESCRIPTOR_0095 che descrive lo snapshot dello stato corrente del completamento (ad esempio fotogrammi non utilizzati dal frame corrente, ma usati da frame futuri e così via) buffer DPB mantenuto in D3D12DDI_VIDEO_ENCODER_PICTURE_CONTROL_DESC_0082_0. ReferenceFrame. Gli indici di riferimento (ad esempio last, altref e così via) vengono mappati da riferimenti passati/futuri in questa matrice di descrittori. Il codec AV1 consente fino a 8 riferimenti nel DPB.

Questa matrice di descrittori, a sua volta, esegue il mapping di un'immagine di riferimento per questo frame in un indice di risorse nella matrice di immagini ricostruite D3D12DDI_VIDEO_ENCODER_PICTURE_CONTROL_DESC_0082_0.ReferenceFrames.

Le dimensioni di questa matrice corrispondono sempre D3D12_VIDEO_ENCODER_PICTURE_CONTROL_DESC. ReferenceFrames.NumTextures per il comando EncodeFrame associato.

ReferenceIndices[7]

Corrisponde alla sintassi ref_frame_idx[i] AV1. Per un tipo di riferimento i, ReferenceIndices[i] indica un indice compreso tra [0..7] in ReferenceFramesReconPictureDescriptors in cui il tipo di riferimento i-th frame corrente viene archiviato nel DPB. In altre parole ReferenceFramesReconPictureDescriptors[ReferenceIndices[i]] contiene il descrittore DPB per il tipo di riferimento i-th.

La voce i-th di ReferenceIndices[] corrisponde a ogni tipo di riferimento come indicato di seguito.

Indice i Tipo di riferimento ReferenceFramesReconPictureDescriptors[ReferenceIndices[i]]
0 Last (Ultimo) Descrittore DPB per ultimo
1 Ultima 2 Descrittore DPB per Last2
2 Last3 Descrittore DPB per Last3
3 Dorato Descrittore DPB per Golden
4 Bwdref Descrittore DPB per Bwdref
5 Altref Descrittore DPB per Altref
6 Altref2 Descrittore DPB per Altref2

PrimaryRefFrame

Corrisponde alla sintassi degli elementi AV1 primary_ref_frame in uncompressed_header(). Specifica il frame di riferimento che contiene i valori CDF e altri stati che devono essere caricati all'inizio del frame. L'intervallo consentito è [0..7] e i valori corrispondono come segue:

Valore PrimaryRefFrame Valore della sintassi AV1 (primary_ref_frame) Frame di riferimento selezionato
0 0 Last (Ultimo)
1 1 Ultima 2
2 2 Last3
3 3 Dorato
4 4 Bwdref
5 5 Altref
6 6 Altref2
7 7 (PRIMARY_REF_NONE) Nessuno

RefreshFrameFlags

Corrisponde all'elemento della sintassi refresh_frame_flags AV1.

LoopFilter

Struttura D3D12DDI_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_CONFIG_0095 che specifica i parametri di filtro del ciclo da utilizzare.

LoopFilterDelta

Struttura D3D12DDI_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_DELTA_CONFIG_0095 che specifica i parametri differenziali del filtro ciclo da usare.

Quantization

Struttura D3D12DDI_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_CONFIG_0095 che specifica i parametri di quantizzazione da utilizzare.

QuantizationDelta

Struttura D3D12DDI_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_DELTA_CONFIG_0095 che specifica i parametri delta di quantizzazione da utilizzare.

CDEF

Struttura D3D12DDI_VIDEO_ENCODER_AV1_CDEF_CONFIG_0095 che specifica i parametri CDEF (Constrained Directional Enhancement Filtering) da usare.

QPMapValuesCount

Contiene il numero di elementi presenti in pRateControlQPMap. Questo valore deve corrispondere al numero di blocchi di codifica nel frame, arrotondando la risoluzione dei fotogrammi ai valori allineati più vicini.

pRateControlQPMap

Matrice contenente, nell'ordine di analisi di riga/colonna, i valori del mapping QP da usare in ogni area quadrata per questo frame. Le dimensioni della mappa QP possono essere calcolate usando la risoluzione corrente e D3D12DDI_VIDEO_ENCODER_RESOLUTION_SUPPORT_LIMITS_0080_2. QPMapRegionPixelsSize che trasmette le dimensioni dell'area quadrata. L'intervallo per i valori QP delta è [-255; 255].

CustomSegmentation

Struttura D3D12DDI_VIDEO_ENCODER_AV1_SEGMENTATION_CONFIG_0095 che specifica i parametri di segmentazione personalizzati da usare. Usato solo quando D3D12DDI_VIDEO_ENCODER_AV1_PICTURE_CONTROL_0095_FLAG_ENABLE_FRAME_SEGMENTATION_CUSTOM è impostato per il frame corrente.

CustomSegmentsMap

Usato solo quando D3D12DDI_VIDEO_ENCODER_AV1_PICTURE_CONTROL_0095_FLAG_ENABLE_FRAME_SEGMENTATION_CUSTOM è impostato per il frame corrente. Struttura D3D12DDI_VIDEO_ENCODER_AV1_SEGMENTATION_MAP_0095 che specifica la mappa di segmentazione personalizzata da usare se CustomSegmentation.UpdateMap è impostato. In caso contrario, la mappa segmento viene ereditata dal frame di riferimento.

Commenti

Aspettative di gestione DPB

Di seguito è riportato il contratto del client API e il driver deve essere conforme all'uso di questa API:

  1. Quando si codifica D3D12DDI_VIDEO_ENCODER_AV1_FRAME_TYPE_0095_KEY_FRAME:

    • PrimaryRefFrame deve essere 7 (PRIMARY_REF_NONE)
    • RefreshFrameFlags deve essere 0xFF (conforme alla sintassi bitstream standard del codec AV1)
    • Per tutte le voci di matrice in ReferenceFramesReconPictureDescriptors, è necessario impostare Su D3D12_VIDEO_ENCODER_AV1_INVALID_DPB_RESOURCE_INDEX
    • I valori in ReferenceIndices[7] sono indistinti come qualsiasi valore [0..7] punta a uno slot DPB inutilizzato in ReferenceFramesReconPictureDescriptors come per il punto precedente.
    • D3D12DDI_VIDEO_ENCODE_REFERENCE_FRAMES_0082_0 verranno compilati come:
      • NumTexture2Ds = 0
      • ppTexture2Ds = NULL
      • pSubresources = NULL
  2. Quando si codifica un tipo di frame con riferimenti (ad esempio. SWITCH/INTER:

    • PrimaryRefFrame specifica quale frame di riferimento contiene i valori CDF e altri stati che devono essere caricati all'inizio del frame.

    • RefreshFrameFlags deve essere impostato di conseguenza per indicare in quali intervalli ReferenceFramesReconPictureDescriptors DPB verrà posizionata l'immagine ricostruita con codifica corrente dopo l'esecuzione della codifica. Questo valore deve corrispondere esattamente a ciò che il client API codice per refresh_frame_flags elemento sintassi AV1 nell'intestazione dell'immagine associata per il frame corrente.

    • Le voci della matrice in ReferenceFramesReconPictureDescriptors per il frame corrente seguiranno esattamente ciò che RefreshFrameFlags indicato per il frame precedente.

      • Ad esempio: se RefreshFrameFlags indica che il frame N corrente verrà inserito negli slot 2, 3 e 6, quindi nella chiamata CodificaFrame successiva per frame N+1, il parametro ReconstructedPictureResourceIndex nelle voci ReferenceFramesReconPictureDescriptors[1], ReferenceFramesReconPictureDescriptors[2], ReferenceFramesReconPictureDescriptors[5] deve puntare a cornice N immagine ricostruita in D3D12DDI_VIDEO_ENCODE_REFERENCE_FRAMES_ 0080.

      • Si noti che include l'opzione RefreshFrameFlags=0xFF per D3D12DDI_VIDEO_ENCODER_AV1_FRAME_TYPE_0095_KEY_FRAME , contrassegnando anche tutte le voci ReferenceFramesReconPictureDescriptors che puntano all'immagine ricostruita della cornice KEY.

      • Se un'immagine (non fotogramma chiave) non verrà contrassegnata con D3D12DDI_VIDEO_ENCODER_PICTURE_CONTROL_FLAG_0080_USED_AS_REFERENCE_PICTURE, i relativi refreshframeFlag devono essere zero per indicare questo.

    • I valori in ReferenceIndices[7] si trovano all'interno di [0..7] e puntano agli slot DPB in ReferenceFramesReconPictureDescriptors.

    • I valori di ReferenceIndices[7] devono corrispondere esattamente ai codici client dell'API nell'intestazione dell'immagine per ref_frame_idx.

    • In base alla definizione della sintassi AV1 di ref_frame_idx non è necessario che i valori di voce della matrice siano univoci.

    • Se ReferenceFramesReconPictureDescriptors[ReferenceIndices[i]]. RicostruzionePictureResourceIndex == D3D12_VIDEO_ENCODER_AV1_INVALID_DPB_RESOURCE_INDEX

      • Ciò indica che l'immagine di riferimento i-th non verrà usata per la cornice corrente e deve essere ignorata.
    • In caso contrario ( ReferenceFramesReconPictureDescriptors[ReferenceIndices[i]]. RicostruzionePictureResourceIndex)

      • Ciò indica che il riferimento i-th farà riferimento allo slot DPB ReferenceIndices[i] e l'immagine ricostruita da usare è D3D12DDI_VIDEO_ENCODE_REFERENCE_FRAMES_0080. ppTexture2Ds[ReferenceFramesReconPictureDescriptors[ReferenceIndices[i]].RicostruzionePictureResourceIndex]
    • D3D12DDI_VIDEO_ENCODE_REFERENCE_FRAMES_0080 verranno compilati come:

      • NumTexture2Ds = {numero di valori univoci di ReferenceFramesReconPictureDescriptors.RicostruiscePictureResourceIndex[j] != D3D12_VIDEO_ENCODER_AV1_INVALID_DPB_RESOURCE_INDEX per j in {0..7} }
      • ppTexture2Ds = { matrice compatta (nessuna voce Null) contenente l'immagine ricostruita dai fotogrammi codificati in precedenza che verranno usati come riferimenti }
      • [Solo modalità matrice trama] pSubresources = { matrice compatta (nessuna voce Null) contenente l'indice di sottoresource della matrice di trama dai frame codificati in precedenza che verranno usati come riferimenti }
  3. Quando si codifica un tipo di frame senza riferimenti, ma senza cancellare il DPB (ad esempio. INTRA_ONLY)

    • PrimaryRefFrame deve essere 7 (PRIMARY_REF_NONE)

    • RefreshFrameFlags deve essere impostato di conseguenza per indicare in quali intervalli ReferenceFramesReconPictureDescriptors DPB verrà posizionata l'immagine ricostruita con codifica corrente dopo l'esecuzione della codifica. Questo valore deve corrispondere esattamente a ciò che il client API codice per refresh_frame_flags elemento sintassi AV1 nell'intestazione dell'immagine associata per il frame corrente.

    • Le voci della matrice in ReferenceFramesReconPictureDescriptors per il frame corrente seguiranno esattamente ciò che RefreshFrameFlags indicato per il frame precedente.

    • I valori in ReferenceIndices[7] vengono ignorati perché il frame intra-only non usa riferimenti.

    • D3D12DDI_VIDEO_ENCODE_REFERENCE_FRAMES_0080 contiene lo snapshot DPB e verrà compilato come:

      • NumTexture2Ds = {numero di valori univoci di ReferenceFramesReconPictureDescriptors.RicostruzionePictureResourceIndex[j] != D3D12_VIDEO_ENCODER_AV1_INVALID_DPB_RESOURCE_INDEX per j in {0..7} }
      • ppTexture2Ds = { compact array (nessuna voce Null) contenente l'immagine ricostruita dai fotogrammi codificati in precedenza indicati da ReferenceFramesReconPictureDescriptors.RicostruitoPictureResourceIndex[j] per j in {0..7} }
      • [Solo modalità matrice trama] pSubresources = { compact array (nessuna voce Null) contenente l'indice subresource della matrice di trama dai frame con codifica precedentemente indicati da ReferenceFramesReconPictureDescriptors.RicostruitoPictureResourceIndex[j] per j in {0..7} }

Per altre informazioni, vedere Codifica video D3D12 AV1 .

Requisiti

Requisito Valore
Client minimo supportato Windows 11 versione 24H2 (WDDM 3.2)
Intestazione d3d12umddi.h

Vedi anche

D3D12DDI_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_0082_0