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:
I flag di supporto del controllo della frequenza vengono aggiunti a D3D12DDI_VIDEO_ENCODER_SUPPORT_FLAGS_0083_0
I flag di controllo della frequenza vengono aggiunti a D3D12DDI_VIDEO_ENCODER_RATE_CONTROL_FLAGS_0080
Vengono aggiunte le strutture estese seguenti (estensione 1) D3D12DDI_VIDEO_ENCODER_RATE_CONTROL_XXX1 e D3D12DDI_VIDEO_ENCODER_RATE_CONTROL_CONFIGURATION_PARAMS vengono aggiornate per includerle. QualityVsSpeed viene aggiunto a tutte le modalità e VBVCapacity e InitialVBVFullness vengono aggiunti anche a _QVBR1 .
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.
D3D12DDI_FEATURE_VERSION_VIDEO_0095_0 è il numero di versione che definisce l'implementazione minima di tutte le attività cardine di codifica video D3D12 introdotte in Windows 11, versione 24H2 (WDDM 3.2)
L'enumerazione D3D12DDIC piattaforma di strumenti analitici_TYPE_VIDEO_0020 è stata estesa per includere i valori di supporto della codifica video seguenti:
- D3D12DDIC piattaforma di strumenti analitici_TYPE_VIDEO_0095_ENCODER_FRAME_SUBREGION_LAYOUT_CONFIG
- D3D12DDIC piattaforma di strumenti analitici_TYPE_VIDEO_0096_ENCODER_SUPPORT1
D3D12DDI_VIDEO_ENCODER_CODEC_0095_AV1 viene aggiunto a D3D12DDI_VIDEO_ENCODER_CODEC_0080
L'enumerazione D3D12DDI_VIDEO_ENCODER_AV1_PROFILE_0095 è stata aggiunta per definire i profili AV1 supportati dal driver. Il driver usa D3D12DDIC piattaforma di strumenti analitici_VIDEO_ENCODER_INPUT_FORMAT_DATA_0080_2 per segnalare facoltativamente i formati supportati per un determinato input D3D12DDI_VIDEO_ENCODER_AV1_PROFILE_0095 alla query.
D3D12DDI_VIDEO_ENCODER_PROFILE_DESC_0080_2 viene aggiornato per includere il profilo AV1 (pAV1Profile).
Le strutture e le enumerazioni seguenti vengono aggiunte o estese per supportare la codifica AV1:
D3D12DDI_VIDEO_ENCODER_AV1_LEVEL_TIER_CONSTRAINTS_0095 (pAV1LevelSetting viene aggiunto a D3D12DDI_VIDEO_ENCODER_LEVEL_edizione Standard TTING_0080_2)
D3D12DDI_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE_0080 viene esteso per includere D3D12DDI_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE_0095_UNIFORM_GRID_PARTITION e D3D12DDI_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE_0095_CONFIGURABLE_GRID_PARTITION.
D3D12DDI_VIDEO_ENCODER_MOTION_ESTIMATION_PRECISION_MODE_EIGHTH_PIXEL_0095 viene aggiunto a D3D12DDI_VIDEO_ENCODER_MOTION_ESTIMATION_PRECISION_MODE_0080
D3D12DDI_VIDEO_ENCODER_AV1_TX_MODE_0095 e D3D12DDI_VIDEO_ENCODER_AV1_TX_MODE_0095_FLAGS
D3D12DDI_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS_0095 e D3D12DDI_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS_0095_FLAGS
D3D12DDI_VIDEO_ENCODER_AV1_edizione Standard GMENTATION_BLOCK_SIZE_0095
D3D12DDI_VIDEO_ENCODER_AV1_edizione Standard GMENTATION_MODE_0095 e D3D12DDI_VIDEO_ENCODER_AV1_edizione Standard GMENTATION_MODE_0095_FLAGS
D3D12DDI_VIDEO_ENCODER_AV1_REFERENCE_WARPED_MOTION_TRANSFORMATION_0095 e D3D12DDI_VIDEO_ENCODER_AV1_REFERENCE_WARPED_MOTION_TRANSFORMATION_0095_FLAGS
D3D12DDI_VIDEO_ENCODER_AV1_CODEC_CONFIGURATION_SUPPORT, con pAV1Support aggiunto a D3D12DDI_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_0083_0
D3D12DDI_VIDEO_ENCODER_AV1_FRAME_TYPE_0095 e D3D12DDI_VIDEO_ENCODER_AV1_FRAME_TYPE_0095_FLAGS
D3D12DDI_VIDEO_ENCODER_CODEC_AV1_PICTURE_CONTROL_SUPPORT_0095, con pAV1Support aggiunto a D3D12DDI_VIDEO_ENCODER_CODEC_PICTURE_CONTROL_SUPPORT_0080_2
D3D12DDI_VIDEO_ENCODER_AV1_FRAME_SUBREGION_LAYOUT_CONFIG_SUPPORT_0095 e D3D12DDI_VIDEO_ENCODER_AV1_FRAME_SUBREGION_LAYOUT_CONFIG_VALIDATION_0095_FLAGS
D3D12DDI_FEATURE_DATA_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_CONFIG_0095 e D3D12DDI_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_CONFIG_SUPPORT_0095
pAV1Config viene aggiunto a D3D12DDI_VIDEO_ENCODER_CODEC_CONFIGURATION_0082_0
Il flag D3D12DDI_VIDEO_ENCODER_VALIDATION_FLAG_0080_SUBREGION_LAYOUT_MODE_NOT_SUPPORTED viene aggiunto a D3D12DDI_VIDEO_ENCODER_VALIDATION_FLAGS_0080 da usare con il limite di query D3D12DDIC piattaforma di strumenti analitici_TYPE_VIDEO_0096_ENCODER_SUPPORT1 esteso.
D3D12DDIC piattaforma di strumenti analitici_VIDEO_ENCODER_SUPPORT1_DATA_0096 viene aggiunto per estendere la query D3D12DDIC piattaforma di strumenti analitici_VIDEO_ENCODER_SUPPORT_DATA_0083_0 precedente, con parametri aggiunti nella parte inferiore della struttura. Questa query estesa può essere usata con tutti i codec H264, HEVC e AV1 e deve comportarsi esattamente come D3D12_FEATURE_VIDEO_ENCODER_SUPPORT semantica.
La semantica per i membri MaxSubregionsNumber, SubregionBlockPixelsSize e QPMapRegionPixelsSize di D3D12DDI_VIDEO_ENCODER_RESOLUTION_SUPPORT_LIMITS_0080_2 vengono aggiornate per AV1.
_D3D12DDI_VIDEO_ENCODER_AV1_edizione Standard QUENCE_STRUCTURE_0095 viene aggiunto e pAV1SequenceStructure viene aggiunto a D3D12DDI_VIDEO_ENCODER_edizione Standard QUENCE_GOP_STRUCTURE_0082_0.
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:
D3D12DDI_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_WARPED_MOTION_INFO_0095
D3D12DDI_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_DESCRIPTOR_0095
D3D12DDI_VIDEO_ENCODER_AV1_edizione Standard GMENT_DATA_0095
D3D12DDI_VIDEO_ENCODER_AV1_edizione Standard GMENTATION_CONFIG_0095
D3D12DDI_VIDEO_ENCODER_AV1_edizione Standard GMENTATION_MAP_0095
D3D12DDI_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_DELTA_CONFIG_0095
D3D12DDI_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_DELTA_CONFIG_0095
pAV1PicData viene aggiunto a D3D12DDI_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_0082_0
D3D12DDI_VIDEO_ENCODER_AV1_PICTURE_CONTROL_SUBREGIONS_LAYOUT_DATA_TILES_0095
pTilesPartition_AV1 viene aggiunto a D3D12DDI_VIDEO_ENCODER_PICTURE_CONTROL_SUBREGIONS_LAYOUT_DATA_0080_2
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.