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 especificidades no nível do aplicativo, consulte a Especificação de codificação de vídeo AV1 D3D12.

Extensões para controle de taxa

As enumerações existentes a seguir estão atualizadas com extensões para controle de taxa e suporte a controle de taxa:

Quando a D3D12DDI_VIDEO_ENCODER_RATE_CONTROL_FLAG_0096_ENABLE_EXTENSION1_SUPPORT está habilitada, 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 desabilitadas de acordo com a tabela documentada na página de referência D3D12DDI_VIDEO_ENCODER_RATE_CONTROL_FLAGS_0080.

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

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

Operação de codificação

Valores de cabeçalho de fluxo de bits esperados para AV1

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

Dado um quadro codificado com blocos K, o driver grava os elementos de sintaxe K decode_tile() AV1 no fluxo de bits compactado, correspondendo aos blocos solicitados nos argumentos EncodeFrame.

Em seguida, o API Client 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 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 D3D12_VIDEO_ENCODER_FRAME_SUBREGION_METADATA relacionadas e os elementos decode_tile() são copiados do buffer de fluxo de bits compactado. Finalmente, cada tile_group_obu() é envolvido em torno de elementos open_bitstream_unit() do tipo OBU_TILE_GROUP e precedido com um OBU_FRAME_HEADER. Para um único grupo de blocos, um tipo de OBU_FRAME pode ser usado.

O API Client é responsável por inferir obu_extension_flag quanto !(TemporalLayerIndexPlus1 || SpatialLayerIndexPlus1) ao 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á somente à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 para a resolução máxima presente no ID3D12VideoEncoderHeap associado usado. Diferentes quadros usando resoluções também presentes no ID3D12VideoEncoderHeap associado podem usar a sintaxe AV1 frame_size_override_flag em frame_size() para transmitir a alteração da resolução.

Se o D3D12_VIDEO_ENCODER_AV1_FRAME_TYPE_FLAG_SWITCH_FRAME for suportado, os quadros de referência devem apontar para uma resolução maior ou igual ao quadro de switch atual que está sendo codificado e as diferentes resoluções devem estar todas presentes no ID3D12VideoEncoderHeap associado usado.

Da mesma forma, se houver suporte para escalabilidade espacial, as diferentes resoluções dos quadros de referência devem estar todas presentes no ID3D12VideoEncoderHeap associado usado.

Observações sobre controle de taxa

O intervalo aceito para D3D12DDI_VIDEO_ENCODER_RATE_CONTROL_QVBR1_0096.ConstantQualityTarget é [0..63]. O menor valor gera a maior alta qualidade.

Em geral, o 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 outra reconfiguração de parâmetro de controle de taxa não suportado.

Operação de codificação API

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

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