Condividi tramite


Codifica video D3D12 AV1

La funzionalità di codifica video Direct3D12 è estesa per supportare la codifica AV1 a partire da Windows 11 versione 24H2 (WDDM 3.2). Questo articolo descrive i punti di estensione in cui il D3D12 Video Encode DDI esistente richiede modifiche e nuove strutture per supportare la codifica AV1. Per altre informazioni, incluse le specifiche a livello di applicazione, vedere la specifica di codifica video AV1 D3D12.

Estensioni per il controllo della frequenza

Le enumerazioni esistenti seguenti vengono aggiornate con estensioni per il controllo della frequenza e il supporto del controllo della frequenza:

Quando D3D12DDI_VIDEO_ENCODER_RATE_CONTROL_FLAG_0096_ENABLE_EXTENSION1_SUPPORT è abilitato, le strutture di controllo della frequenza estesa vengono utilizzate in D3D12DDI_VIDEO_ENCODER_RATE_CONTROL_CONFIGURATION_PARAMS_0080_2.pConfiguration_XXX; in caso contrario, le strutture legacy vengono usate quando disabilitate in base alla tabella documentata nella pagina di riferimento D3D12DDI_VIDEO_ENCODER_RATE_CONTROL_FLAGS_0080.

Estensioni di supporto per la codifica video

Il framework correlato al video esistente viene esteso per consentire ai driver di segnalare il supporto e le funzionalità di codifica video AV1. Questa sezione elenca le strutture e le enumerazioni aggiunte o aggiornate usate per eseguire query e segnalare il supporto della codifica video AV1.

Operazione di codifica

Valori di intestazione bitstream previsti per AV1

Responsabilità del codice dell'intestazione del driver/host

Dato un frame codificato con riquadri K, il driver scrive gli elementi della sintassi K decode_tile() AV1 nel flusso di bit compresso, corrispondente ai riquadri richiesti negli argomenti EncodeFrame .

Il client API compila quindi gli elementi della sintassi AV1 tile_group_obu() con elementi tile_start_and_end_present_flag/tg_start/tg_end per disporre i riquadri in gruppi di riquadri come desiderato con la condizione in cui i riquadri vengono posizionati in sequenza. L'elemento tile_size_minus_1 viene codificato dal riquadro correlato D3D12_VIDEO_ENCODER_FRAME_SUBREGION_METADATA informazioni e gli elementi decode_tile() vengono copiati dal buffer bitstream compresso. Infine, ogni tile_group_obu() viene racchiuso tra gli elementi open_bitstream_unit() di tipo OBU_TILE_GROUP e anteporti a un OBU_FRAME_HEADER. Per un singolo gruppo di riquadri, è possibile usare invece un tipo di OBU_FRAME.

Il client API è responsabile dell'inferenza di obu_extension_flag come !(TemporalLayerIndexPlus1 || SpatialLayerIndexPlus1) per il frame corrente e anche del codice, se necessario, temporal_id e spatial_id nel open_bitstream_unit().

Gli invii di EncodeFrame sono in ordine di codifica, come gli altri codec implementati nell'API di codifica D3D12.

Modifiche alla risoluzione e scalabilità spaziale

Se il driver segnala D3D12_VIDEO_ENCODER_SUPPORT_FLAG_RESOLUTION_RECONFIGURATION_AVAILABLE, si applica comunque solo alle modifiche di risoluzione in un fotogramma chiave.

L'intestazione della sequenza attiva deve avere la sintassi max_frame_*_minus_1 impostata sulla risoluzione massima presente nell'ID3D12VideoEncoderHeap associato in uso. Fotogrammi diversi che usano risoluzioni presenti anche nell'ID3D12VideoEncoderHeap associato possono usare la sintassi AV1 frame_size_override_flag in frame_size() per trasmettere la modifica della risoluzione.

Se D3D12_VIDEO_ENCODER_AV1_FRAME_TYPE_FLAG_SWITCH_FRAME è supportato, i fotogrammi di riferimento devono puntare a una risoluzione superiore o uguale a quella del fotogramma switch corrente codificato e le diverse risoluzioni devono essere tutte presenti nell'ID3D12VideoEncoderHeap associato.

Analogamente, se la scalabilità spaziale è supportata, le diverse risoluzioni dei frame di riferimento devono essere tutte presenti nell'ID3D12VideoEncoderHeap associato in uso.

Note sul controllo della frequenza

L'intervallo accettato per D3D12DDI_VIDEO_ENCODER_RATE_CONTROL_QVBR1_0096.ConstantQualityTarget è [0..63]. Il valore più basso restituisce la qualità più alta.

In generale, D3D12DDI_VIDEO_ENCODER_SUPPORT_FLAG_0083_0_RATE_CONTROL_RECONFIGURATION_AVAILABLE si applica alle modifiche di qualità e velocità e ai parametri di controllo della frequenza seguenti delle diverse modalità di controllo della frequenza: QP in QP costanti, velocità in bit e livelli di qualità in CBR, VBR e QVBR. Il driver può restituire D3D12DDI_VIDEO_ENCODER_ENCODE_ERROR_FLAG_0082_0_RECONFIGURATION_REQUEST_NOT_SUPPORTED in D3D12DDI_VIDEO_ENCODER_OUTPUT_METADATA_0083_0.EncodeErrorFlags per la riconfigurazione di altri parametri di controllo della frequenza non supportati.

API dell'operazione di codifica

Le strutture e le enumerazioni seguenti vengono aggiunte o aggiornate con estensioni per supportare l'operazione di codifica AV1:

Inoltre, il callback di un driver esistente PFND3D12DDI_VIDEO_ENCODE_RESOLVE_OUTPUT_METADATA_0082_0 deve essere aggiornato per gestire il layout del buffer risolto specifico di AV1 aggiunto per la codifica AV1.