Compartilhar via


estrutura D3D12DDI_VIDEO_ENCODER_AV1_PICTURE_CONTROL_CODEC_DATA_0095 (d3d12umddi.h)

A estrutura D3D12DDI_VIDEO_ENCODER_AV1_PICTURE_CONTROL_CODEC_DATA_0095 é uma estrutura de configuração abrangente que contém todos os parâmetros necessários para controlar a codificação de uma imagem AV1 (quadro).

Sintaxe

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;

Membros

Flags

Um D3D12DDI_VIDEO_ENCODER_AV1_PICTURE_CONTROL_0095_FLAGS enumeração que especifica os sinalizadores para o quadro a ser codificado.

FrameType

Uma enumeração D3D12DDI_VIDEO_ENCODER_AV1_FRAME_TYPE_0095 que especifica o tipo de quadro que está sendo codificado.

CompoundPredictionType

Uma enumeração D3D12DDI_VIDEO_ENCODER_AV1_COMP_PREDICTION_TYPE_0095 que especifica o tipo de previsão composta a ser usado. Relacionado à sintaxe AV1 reference_select.

InterpolationFilter

Um D3D12DDI_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS_0095 enumeração que especifica o filtro de interpolação a ser usado para previsão inter no quadro atual. Relacionado à sintaxe interpolation_filter.

FrameRestorationConfig

Uma estrutura D3D12DDI_VIDEO_ENCODER_AV1_RESTORATION_CONFIG_0095 que especifica a configuração de restauração de quadro a ser usada.

TxMode

Uma enumeração D3D12DDI_VIDEO_ENCODER_AV1_TX_MODE_0095 que especifica o modo de transformação a ser usado.

SuperResDenominator

Indica a configuração para super resolução. Precisa ser maior ou igual a D3D12_VIDEO_ENCODER_AV1_SUPERRES_DENOM_MIN (conforme definido pelo padrão de codec AV1) quando a super resolução está habilitada.

OrderHint

Quadro atual order_hint sintaxe AV1. OrderHint deve ser sempre passado mesmo quando não codifica a dica de ordem no bitstream AV1 e deve refletir a ordem de exibição do quadro.

PictureIndex

O índice de imagem exclusivo para esse quadro que será usado para identificá-lo exclusivamente como uma referência para quadros futuros. Esse parâmetro não está relacionado de forma alguma à sintaxe padrão AV1, mas apenas usado para acompanhamento de implementação do cliente da API D3D.

O Cliente de API deve inicializar esse valor em 0 para o primeiro D3D12DDI_VIDEO_ENCODER_AV1_FRAME_TYPE_0095_KEY_FRAME e incrementá-lo em um em cada quadro subsequente até o próximo D3D12DDI_VIDEO_ENCODER_AV1_FRAME_TYPE_0095_KEY_FRAME, quando ele deve ser redefinido para zero e seguir o mesmo processo.

OrderHint não pode ser usado para essa finalidade, pois tem um intervalo máximo de [0..2^(OrderHintBitsMinus1+1)], que pode encapsular e não funcionar como um identificador exclusivo dos quadros e suas referências.

TemporalLayerIndexPlus1

Índice de camada temporal de imagem mais um. Um valor igual a zero indica escalabilidade temporal não usada. Esse valor deve estar dentro do intervalo [0..D3D12DDI_VIDEO_ENCODER_AV1_CODEC_CONFIGURATION_SUPPORT_0095. MaxTemporalLayers].

SpatialLayerIndexPlus1

Índice de camada espacial de imagem mais um. Um valor zero indica que a escalabilidade espacial não é usada. Esse valor deve estar dentro do intervalo [0..D3D12DDI_VIDEO_ENCODER_AV1_CODEC_CONFIGURATION_SUPPORT_0095.MaxSpatialLayers].

ReferenceFramesReconPictureDescriptors[8]

Uma matriz de estruturas D3D12DDI_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_DESCRIPTOR_0095 que descreve o instantâneo de estado atual do completo (ou seja, incluindo quadros que não são usados pelo quadro atual, mas usados por quadros futuros, etc.) buffer de DPB mantido em D3D12DDI_VIDEO_ENCODER_PICTURE_CONTROL_DESC_0082_0. ReferenceFrames. Os índices de referência (ou seja, por último, altref etc. ) mapeiam de referências passadas/futuras para essa matriz de descritores. O codec AV1 permite até 8 referências no BD.

Essa matriz de descritores, por sua vez, mapeia uma imagem de referência para esse quadro em um índice de recursos na matriz de imagens reconstruídas D3D12DDI_VIDEO_ENCODER_PICTURE_CONTROL_DESC_0082_0.ReferenceFrames.

O tamanho dessa matriz sempre corresponde a D3D12_VIDEO_ENCODER_PICTURE_CONTROL_DESC. ReferenceFrames.NumTextures para o comando EncodeFrame associado.

ReferenceIndices[7]

Corresponde à sintaxe ref_frame_idx[i] AV1. Para um tipo de referência i, ReferenceIndices[i] indica um índice entre [0..7] em ReferenceFramesReconPictureDescriptors em que o tipo de referência i-th do quadro atual é armazenado no DPB. Em outras palavras , ReferenceFramesReconPictureDescriptors[ReferenceIndices[i]] contém o descritor DPB para o tipo de referência i-th.

A entrada i-th de ReferenceIndices[] corresponde a cada tipo de referência da seguinte maneira.

Índice i Tipo de referência ReferenceFramesReconPictureDescriptors[ReferenceIndices[i]]
0 Último Descritor do DPB para Last
1 Últimos 2 Descritor do DPB para Last2
2 Último3 Descritor do DPB para Last3
3 Dourado Descritor do DPB para Golden
4 Bwdref Descritor do DPB para Bwdref
5 Altref Descritor do DPB para Altref
6 Altref2 Descritor do DPB para Altref2

PrimaryRefFrame

Corresponde à sintaxe do elemento AV1 primary_ref_frame em uncompressed_header(). Especifica qual quadro de referência contém os valores de CDF e outros estados que devem ser carregados no início do quadro. O intervalo permitido é [0..7] e os valores correspondem da seguinte maneira:

Valor de PrimaryRefFrame Valor da sintaxe AV1 (primary_ref_frame) Quadro de referência selecionado
0 0 Último
1 1 Últimos 2
2 2 Último3
3 3 Dourado
4 4 Bwdref
5 5 Altref
6 6 Altref2
7 7 (PRIMARY_REF_NONE) Nenhum

RefreshFrameFlags

Corresponde ao elemento de sintaxe refresh_frame_flags AV1.

LoopFilter

Uma estrutura D3D12DDI_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_CONFIG_0095 que especifica os parâmetros de filtro de loop a serem usados.

LoopFilterDelta

Uma estrutura D3D12DDI_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_DELTA_CONFIG_0095 que especifica os parâmetros delta de filtro de loop a serem usados.

Quantization

Uma estrutura D3D12DDI_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_CONFIG_0095 que especifica os parâmetros de quantização a serem usados.

QuantizationDelta

Uma estrutura D3D12DDI_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_DELTA_CONFIG_0095 que especifica os parâmetros delta de quantização a serem usados.

CDEF

Uma estrutura D3D12DDI_VIDEO_ENCODER_AV1_CDEF_CONFIG_0095 que especifica os parâmetros restritos de CDEF (filtragem de aprimoramento direcional) a serem usados.

QPMapValuesCount

Contém o número de elementos presentes em pRateControlQPMap. Esse valor deve corresponder ao número de blocos de codificação no quadro, arredondando a resolução do quadro para os valores alinhados mais próximos.

pRateControlQPMap

Matriz que contém, na ordem de verificação de linha/coluna, os valores de mapa de QP a serem usados em cada região quadrada para esse quadro. As dimensões do mapa QP podem ser calculadas usando a resolução atual e D3D12DDI_VIDEO_ENCODER_RESOLUTION_SUPPORT_LIMITS_0080_2. QPMapRegionPixelsSize transmitindo os tamanhos de região quadrada. O intervalo para valores QP Delta é [-255; 255].

CustomSegmentation

Uma estrutura D3D12DDI_VIDEO_ENCODER_AV1_SEGMENTATION_CONFIG_0095 que especifica os parâmetros de segmentação personalizados a serem usados. Usado somente quando D3D12DDI_VIDEO_ENCODER_AV1_PICTURE_CONTROL_0095_FLAG_ENABLE_FRAME_SEGMENTATION_CUSTOM é definido para o quadro atual.

CustomSegmentsMap

Usado somente quando D3D12DDI_VIDEO_ENCODER_AV1_PICTURE_CONTROL_0095_FLAG_ENABLE_FRAME_SEGMENTATION_CUSTOM é definido para o quadro atual. Uma estrutura D3D12DDI_VIDEO_ENCODER_AV1_SEGMENTATION_MAP_0095 que especifica o mapa de segmentação personalizado a ser usado se CustomSegmentation.UpdateMap estiver definido. Caso contrário, o mapa do segmento será herdado do quadro de referência.

Comentários

Expectativas do Gerenciamento de DPB

Veja a seguir o contrato com o cliente de API e o driver deve estar em conformidade ao usar essa API:

  1. Ao codificar D3D12DDI_VIDEO_ENCODER_AV1_FRAME_TYPE_0095_KEY_FRAME:

    • PrimaryRefFrame deve ser 7 (PRIMARY_REF_NONE)
    • RefreshFrameFlags deve ser 0xFF (em conformidade com a sintaxe bitstream padrão do codec AV1)
    • Para todas as entradas de matriz em ReferenceFramesReconPictureDescriptors, ReconstructedPictureResourceIndex deve ser definido como D3D12_VIDEO_ENCODER_AV1_INVALID_DPB_RESOURCE_INDEX
    • Os valores em ReferenceIndices[7] são indistintos, pois qualquer valor [0..7] apontará para um slot DPB não utilizado em ReferenceFramesReconPictureDescriptors de acordo com o ponto acima.
    • D3D12DDI_VIDEO_ENCODE_REFERENCE_FRAMES_0082_0 será preenchido como:
      • NumTexture2Ds = 0
      • ppTexture2Ds = NULL
      • pSubresources = NULL
  2. Ao codificar um tipo de quadro com referências (ou seja, SWITCH/INTER):

    • PrimaryRefFrame especifica qual quadro de referência contém os valores de CDF e outros estados que devem ser carregados no início do quadro.

    • RefreshFrameFlags deve ser definido adequadamente para indicar em quais slots DPB ReferenceFramesReconPictureDescriptors a imagem reconstruída do quadro codificado atual será colocada após a execução da codificação. Esse valor deve corresponder exatamente ao que o cliente de API codificará para refresh_frame_flags elemento de sintaxe AV1 no cabeçalho de imagem associado para o quadro atual.

    • As entradas de matriz em ReferenceFramesReconPictureDescriptors para o quadro atual seguirão exatamente o que RefreshFrameFlags indicou para o quadro anterior.

      • Por exemplo: se RefreshFrameFlags indicar que o quadro atual N será colocado nos slots 2, 3 e 6, em seguida, na próxima chamada EncodeFrame para o quadro N+1, o parâmetro ReconstructedPictureResourceIndex nas entradas ReferenceFramesReconPictureDescriptors[1], ReferenceFramesReconPictureDescriptors[2], ReferenceFramesReconPictureDescriptors[5] parâmetro deve apontar para quadro N imagem reconstruída em D3D12DDI_VIDEO_ENCODE_REFERENCE_FRAMES_ 0080.

      • Observe que isso inclui considerar RefreshFrameFlags=0xFF para D3D12DDI_VIDEO_ENCODER_AV1_FRAME_TYPE_0095_KEY_FRAME também, marcando todas as entradas ReferenceFramesReconPictureDescriptors apontando para a imagem reconstruída do quadro KEY.

      • Se uma imagem (não quadro chave) não for marcada com D3D12DDI_VIDEO_ENCODER_PICTURE_CONTROL_FLAG_0080_USED_AS_REFERENCE_PICTURE, suas RefreshFrameFlags deverão ser zero para indicar isso.

    • Os valores em ReferenceIndices[7] estão dentro de [0..7] e apontam para slots DPB em ReferenceFramesReconPictureDescriptors.

    • Os valores de ReferenceIndices[7] devem corresponder exatamente ao que o cliente da API codifica no cabeçalho da imagem para ref_frame_idx.

    • De acordo com a definição de sintaxe AV1 de ref_frame_idx não há nenhum requisito de que os valores de entrada da matriz devem ser exclusivos.

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

      • Isso indica que a i-th da imagem de referência não será usada para o quadro atual e deve ser ignorada.
    • Caso contrário ( ReferenceFramesReconPictureDescriptors[ReferenceIndices[i]]. ReconstructedPictureResourceIndex)

      • Isso indica que a referência i-th apontará para o slot DPB ReferenceIndices[i] e a imagem reconstruída a ser usada é D3D12DDI_VIDEO_ENCODE_REFERENCE_FRAMES_0080. ppTexture2Ds[ReferenceFramesReconPictureDescriptors[ReferenceIndices[i]].ReconstructedPictureResourceIndex]
    • D3D12DDI_VIDEO_ENCODE_REFERENCE_FRAMES_0080 será preenchido como:

      • NumTexture2Ds = {número de valores exclusivos de ReferenceFramesReconPictureDescriptors.ReconstructedPictureResourceIndex[j] != D3D12_VIDEO_ENCODER_AV1_INVALID_DPB_RESOURCE_INDEX para j em {0..7} }
      • ppTexture2Ds = { matriz compacta (sem entradas nulas) que contém a imagem reconstruída dos quadros codificados anteriormente que serão usados como referências }
      • [Somente modo de matriz de textura] pSubresources = { matriz compacta (sem entradas nulas) que contém o índice de sub-fonte da matriz de textura dos quadros codificados anteriormente que serão usados como referências }
  3. Ao codificar um tipo de quadro sem referências, mas sem limpar o DPB (ou seja, . INTRA_ONLY)

    • PrimaryRefFrame deve ser 7 (PRIMARY_REF_NONE)

    • RefreshFrameFlags deve ser definido adequadamente para indicar em quais slots DPB ReferenceFramesReconPictureDescriptors a imagem reconstruída do quadro codificado atual será colocada após a execução da codificação. Esse valor deve corresponder exatamente ao que o cliente de API codificará para refresh_frame_flags elemento de sintaxe AV1 no cabeçalho de imagem associado para o quadro atual.

    • As entradas de matriz em ReferenceFramesReconPictureDescriptors para o quadro atual seguirão exatamente o que RefreshFrameFlags indicou para o quadro anterior.

    • Os valores em ReferenceIndices[7] são ignorados, pois o quadro somente intra não usa nenhuma referência.

    • D3D12DDI_VIDEO_ENCODE_REFERENCE_FRAMES_0080 contém o instantâneo do DPB e será preenchido como:

      • NumTexture2Ds = {número de valores exclusivos de ReferenceFramesReconPictureDescriptors.ReconstructedPictureResourceIndex[j] != D3D12_VIDEO_ENCODER_AV1_INVALID_DPB_RESOURCE_INDEX para j em {0..7} }
      • ppTexture2Ds = { matriz compacta (sem entradas nulas) que contém a imagem reconstruída dos quadros codificados anteriormente referenciados por ReferenceFramesReconPictureDescriptors.ReconstructedPictureResourceIndex[j] para j em {0..7} }
      • [Somente modo de matriz de textura] pSubresources = { matriz compacta (sem entradas nulas) que contém o índice de sub-fonte da matriz de textura dos quadros codificados anteriormente referenciados por ReferenceFramesReconPictureDescriptors.ReconstructedPictureResourceIndex[j] para j em {0..7} }

Confira Codificação de vídeo D3D12 AV1 para obter mais informações.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 11, versão 24H2 (WDDM 3.2)
Cabeçalho d3d12umddi.h

Confira também

D3D12DDI_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_0082_0