Codifica video D3D12

Questa pagina fornisce informazioni generali per gli sviluppatori di driver relativi alla funzionalità di codifica video Direct3D12. Per altre informazioni, incluse le specifiche a livello di applicazione, vedere La specifica di codifica video D3D.

Informazioni sulla codifica video Direct3D 12

Prima di Windows 11 (WDDM 3.0), DirectX 12 fornisce interfacce a livello di applicazione e driver (API e DDI) per supportare l'accelerazione GPU per diverse applicazioni video, tra cui decodifica video, elaborazione video e stima del movimento.

A partire da Windows 11, D3D12 ha aggiunto una funzionalità di codifica video alla famiglia di API video/DDI esistente. Questa funzionalità fornisce un set coerente di API/DDI di codifica coerenti con il framework D3D12 esistente e consente agli sviluppatori di eseguire la codifica video usando motori video con accelerazione GPU.

Il framework di codifica video fornisce l'accesso alle funzionalità di accelerazione hardware con codifica video per diversi scenari, ad esempio Internet delle cose (IoT), cloud, API multimediali, machine learning e streaming di giochi.

Codec supportati

A partire da Windows 11, i codec supportati sono H.264 e HEVC, anche se il framework di codifica video D3D12 offre estendibilità aperta per codec più recenti, ad esempio AV1.

Gli aspetti specifici del codec dell'interfaccia del framework vengono delegati a strutture specifiche del codec e al relativo accesso ai tipi di unione. Ad esempio, la struttura D3D12DDI_VIDEO_ENCODER_CODEC_CONFIGURATION_0082_0 contiene un'unione con puntatori a strutture di D3D12DDI_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_0082_0 specifiche del codec e D3D12DDI_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_0082_0 contenenti le informazioni di configurazione specifiche del codec.

Per mantenere la compatibilità dell'interfaccia binaria sull'estendibilità, i tipi di unione contengono sempre puntatori alle strutture specifiche del codec. I tipi di unione hanno una dimensione costante in base alle dimensioni del puntatore dell'architettura host. Questa decisione impedisce inoltre alle strutture che contengono membri di tipi di unione (o contenenti tipi anonimi) di modificare le dimensioni del tipo durante l'estensione dell'interfaccia. Alcune unioni contengono solo puntatori ai tipi enum; per essere coerenti, questi tipi di enumerazione vengono anche indicati come puntatori nel caso in cui un nuovo codec richieda un tipo più complesso di un'enumerazione per rappresentare tali concetti.

Supporto e funzionalità di codifica video per la creazione di report

Il framework correlato al video esistente è stato esteso per consentire ai driver di segnalare il supporto e le funzionalità di codifica video.

  • D3D12DDI_FEATURE_VERSION_VIDEO_0083_0 è il numero di versione che definisce la prima implementazione completa di tutte le attività cardine di codifica video D3D12 introdotte in Windows 11.

  • L'enumerazione D3D12DDICAPS_TYPE_VIDEO_0020 è stata estesa per includere i valori di supporto per la codifica video seguenti:

    • D3D12DDICAPS_TYPE_VIDEO_0080_ENCODER_CODEC = 31,
    • D3D12DDICAPS_TYPE_VIDEO_0080_ENCODER_PROFILE_LEVEL = 32,
    • D3D12DDICAPS_TYPE_VIDEO_0080_ENCODER_OUTPUT_RESOLUTION_RATIOS_COUNT = 33,
    • D3D12DDICAPS_TYPE_VIDEO_0080_ENCODER_OUTPUT_RESOLUTION = 34,
    • D3D12DDICAPS_TYPE_VIDEO_0080_ENCODER_INPUT_FORMAT = 35,
    • D3D12DDICAPS_TYPE_VIDEO_0080_ENCODER_RATE_CONTROL_MODE = 36,
    • D3D12DDICAPS_TYPE_VIDEO_0080_ENCODER_INTRA_REFRESH_MODE = 37,
    • D3D12DDICAPS_TYPE_VIDEO_0080_ENCODER_FRAME_SUBREGION_LAYOUT_MODE = 38,
    • D3D12DDICAPS_TYPE_VIDEO_0080_ENCODER_HEAP_SIZE = 39,
    • D3D12DDICAPS_TYPE_VIDEO_0080_ENCODER_CODEC_CONFIGURATION_SUPPORT = 40,
    • D3D12DDICAPS_TYPE_VIDEO_0080_ENCODER_SUPPORT = 41,
    • D3D12DDICAPS_TYPE_VIDEO_0080_ENCODER_CODEC_PICTURE_CONTROL_SUPPORT = 42,
    • D3D12DDICAPS_TYPE_VIDEO_0080_ENCODER_RESOURCE_REQUIREMENTS = 43

    Il runtime D3D chiama il callback del driver PFND3D12DDI_VIDEO_GETCAPS per eseguire query per il supporto della codifica video.

  • Un driver che supporta la codifica video fornisce al runtime D3D puntatori alle funzioni di callback della codifica video nella struttura D3D12DDI_DEVICE_FUNCS_VIDEO_0082_0 .

Funzioni di callback di codifica video D3D12

Un driver implementa le funzioni di callback seguenti per supportare la codifica video D3D12.

Test

I test seguenti sono inclusi nell'ambito di Windows Hardware Lab Kit (WHLK).The following test are included as part of the Windows Hardware Lab Kit (WHLK). Per informazioni dettagliate, vedere WHLK.

Nome test Descrizione
CreateVideoEncoder Convalida la creazione di VideoEncoder/VideoEncoderHeap in base ai casi correlati a CheckFeatureSupport segnalati.
SingleEncodeH264/HEVC Test basati su codice a matrice per i controlli di base dell'immagine strutturale. La sequenza di immagini di input viene stampata con contenuto a matrice predefinito, codificata e decodificata e infine controllata per garantire che i valori di output (e in qualche misura, la qualità) siano gli elementi previsti.
EncodeProfileLevelSuggestionsH264/HEVC Verifica che il D3D12_FEATURE_DATA_VIDEO_ENCODER_SUPPORT. I valori SuggestedProfile/Level sono come previsto in base alle specifiche H.264/HEVC e alle configurazioni passate come input per D3D12_FEATURE_DATA_VIDEO_ENCODER_SUPPORT.
EncodeHeapSizeCap Convalida l'aumento del footprint di memoria con argomenti di input crescenti diversi.
SimpleGOPEncodeH264/HEVC(10bit) Transcodifica un video di input usando risoluzioni diverse, modelli GOP, modalità sezione e altre configurazioni codec e convalida che l'output codificato video rispetto alla differenza del flusso video di input sia accettabile. Questo confronto viene eseguito usando il rapporto tra segnali di picco e rumore (PSNR).
EncodeSubregions/ResolutionReconfiguration Convalida le riconfigurazioni in tempo reale.
EncodeH264LongTermReferences Convalida l'uso di riferimenti a immagini a lungo termine.
EncodeIntraRefresh Convalida uno scenario semplice di intra-aggiornamento con un IPP aperto... P... P... GOP.
VideoEncodeCommandListFeatures Convalida predicazione e marcatori per gli elenchi di comandi codifica video.
VideoEncodeTimestamps Convalida i timestamp per gli elenchi di comandi codifica video.

Scenari di codifica video

OneCore

Il supporto per la codifica video D3D12 consente la codifica video con accelerazione hardware portatile su piattaforme in cui è disponibile solo D3D12. Sono inclusi i vari SKU OneCore usati dalle piattaforme di calcolo cloud e IoT. L'accelerazione della codifica video è disponibile in questi scenari senza la necessità di usare soluzioni specifiche della piattaforma.

API Media

Le funzionalità di codifica video in modo basso e portatile sono accessibili in tutti i fornitori di hardware. In questo modo, le API Media (ad esempio Media Foundation) di livello superiore possono creare i propri livelli multimediali sopra questa API, che si occupa dell'astrazione delle diverse piattaforme hardware. Data la progettazione di basso livello dell'API, questi livelli multimediali di livello superiore possono ottimizzare per i propri scenari grazie al controllo granulare della sincronizzazione e dell'allocazione e della residenza della memoria della sessione di codifica video, ad esempio il controllo completo della gestione delle immagini di riferimento e delle intestazioni bitstream che scrivono responsabilità. Questo passaggio delle responsabilità al livello seduto sopra questa API consente anche ai fornitori di hardware di avere un set coerente di criteri di codifica (ad esempio. Euristica DPB, ad esempio GOP adattivo, nel livello multimediale che può essere riutilizzato in piattaforme hardware diverse.

Interoperabilità con grafica, calcolo e Machine Learning D3D

L'API di codifica video D3D12 consente un'interoperabilità efficiente tra la codifica video D3D12 e gli scenari di grafica, calcolo e Machine Learning D3D12, interessanti per scenari come l'esecuzione dell'inferenza di Machine Learning su un flusso di fotocamera.

Scenari di streaming di giochi

L'API di codifica video D3D12 consente scenari di streaming di giochi che richiedono un'API di basso livello a prestazioni elevate.