Compartilhar via


Codificação de vídeo D3D12 AV1

O recurso de codificação de vídeo Direct3D12 é estendido para dar suporte à codificação AV1 a partir do Windows 11, versão 24H2 (WDDM 3.2). Este artigo descreve os pontos de extensão em que a DDI de Codificação de Vídeo D3D12 existente precisa de modificações e novas estruturas para dar suporte à codificação AV1. Para obter mais informações, incluindo as especificações no nível do aplicativo, consulte a Especificação de Codificação de Vídeo D3D12 do AV1.

Extensões para controle de taxa

As seguintes enumerações existentes são atualizadas com extensões para controle de taxa e suporte ao controle de taxa:

Quando D3D12DDI_VIDEO_ENCODER_RATE_CONTROL_FLAG_0096_ENABLE_EXTENSION1_SUPPORT está habilitado, as estruturas de controle de taxa estendida são usadas em D3D12DDI_VIDEO_ENCODER_RATE_CONTROL_CONFIGURATION_PARAMS_0080_2.pConfiguration_XXX; caso contrário, as estruturas herdadas são usadas quando desabilitado, conforme documentado na tabela na página de referência D3D12DDI_VIDEO_ENCODER_RATE_CONTROL_FLAGS_0080.

Extensões de suporte à codificação de vídeo

A estrutura relacionada a vídeos existente é estendida para permitir que os drivers relatem suporte e funcionalidades de codificação de vídeo AV1. Esta seção lista as estruturas e enumerações adicionadas ou atualizadas que são usadas para consultar e relatar o suporte à codificação de vídeo AV1.

Operação de codificação

Valores de cabeçalho de bitstream esperados para AV1

Responsabilidades de codificação de cabeçalho de driver/host

Considerando um quadro codificado com K títulos, o driver grava os K elementos de sintaxe decode_tile() AV1 no bitstream compactado, correspondendo aos títulos solicitados nos argumentos EncodeFrame.

Em seguida, o Cliente de API cria os elementos de sintaxe AV1 tile_group_obu() com elementos tile_start_and_end_present_flag/tg_start/tg_end para organizar os blocos em grupos de blocos conforme desejado com a condição de que os blocos sejam colocados sequencialmente. O elemento tile_size_minus_1 é codificado a partir das informações do bloco relacionado D3D12_VIDEO_ENCODER_FRAME_SUBREGION_METADATA, e os elementos decode_tile() são copiados do buffer de bitstream compactado. Por fim, cada tile_group_obu() é envolvido por elementos open_bitstream_unit() do tipo OBU_TILE_GROUP e precedido por um OBU_FRAME_HEADER. Para um único grupo de blocos, um tipo de OBU_FRAME pode ser usado.

O Cliente de API é responsável por inferir obu_extension_flag como !(TemporalLayerIndexPlus1 || SpatialLayerIndexPlus1) para o quadro atual e também codificar, se necessário, temporal_id e spatial_id no open_bitstream_unit().

Os envios de EncodeFrame estão em ordem de codificação, como os outros codecs implementados na API de Codificação D3D12.

Alterações de resolução e escalabilidade espacial

Se o driver relatar D3D12_VIDEO_ENCODER_SUPPORT_FLAG_RESOLUTION_RECONFIGURATION_AVAILABLE, ele ainda se aplicará apenas às alterações de resolução em um quadro-chave.

O cabeçalho de sequência ativa deve ter a sintaxe max_frame_*_minus_1 definida como a resolução máxima presente na ID3D12VideoEncoderHeap associada que está sendo usada. Quadros diferentes usando resoluções também presentes na ID3D12VideoEncoderHeap associada podem usar a sintaxe AV1 frame_size_override_flag em frame_size() para transmitir a alteração da resolução.

Caso haja suporte para D3D12_VIDEO_ENCODER_AV1_FRAME_TYPE_FLAG_SWITCH_FRAME:

  • Os quadros de referência devem apontar para uma resolução maior ou igual à do quadro de comutação atual que está sendo codificado.
  • As diferentes resoluções devem estar todas presentes no ID3D12VideoEncoderHeap associado em uso.

Da mesma forma, se houver suporte para escalabilidade espacial, as diferentes resoluções dos quadros de referência deverão estar todas presentes na ID3D12VideoEncoderHeap associada que está sendo usada.

Notas de gerenciamento de taxa

O intervalo aceito para D3D12DDI_VIDEO_ENCODER_RATE_CONTROL_QVBR1_0096.ConstantQualityTarget é [0..63]. O valor mais baixo produz a qualidade mais alta.

Em geral, D3D12DDI_VIDEO_ENCODER_SUPPORT_FLAG_0083_0_RATE_CONTROL_RECONFIGURATION_AVAILABLE se aplica ao ajuste de qualidade versus velocidade e aos seguintes parâmetros de controle de taxa dos diferentes modos de controle de taxa: QP em QP constante, taxas de bits e níveis de qualidade em CBR, VBR e QVBR. O driver pode retornar D3D12DDI_VIDEO_ENCODER_ENCODE_ERROR_FLAG_0082_0_RECONFIGURATION_REQUEST_NOT_SUPPORTED em D3D12DDI_VIDEO_ENCODER_OUTPUT_METADATA_0083_0.EncodeErrorFlags para reconfiguração de outro parâmetro de controle de taxa não suportado.

API de operação de codificação

As seguintes estruturas e enumerações são adicionadas ou atualizadas com extensões para dar suporte à operação de codificação AV1:

Além disso, o callback PFND3D12DDI_VIDEO_ENCODE_RESOLVE_OUTPUT_METADATA_0082_0 de um driver existente precisa ser atualizado para lidar com o layout de buffer resolvido específico do AV1, adicionado para codificação AV1.