Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Tento článek obsahuje obecné informace pro vývojáře ovladačů týkající se funkce kódování videa Direct3D12. Další informace, včetně specifik na úrovni aplikace, naleznete ve specifikaci kódování videa D3D.
O kódování videa Direct3D 12
Před Windows 11 (WDDM 3.0) poskytuje DirectX 12 rozhraní na úrovni aplikací a ovladačů (API a DDI) pro podporu akcelerace GPU pro několik video aplikací, včetně dekódování videa, zpracování videa a odhadu pohybu.
Od Windows 11 přidá D3D12 funkci kódování videa do existující řady rozhraní API videa nebo DDI. Tato funkce poskytuje koherentní sadu rozhraní API/DDI kódování, která jsou konzistentní se stávajícím frameworkem D3D12, a umožňuje vývojářům provádět kódování videa pomocí video enginů akcelerovaných GPU.
Architektura kódování videa poskytuje přístup k možnostem hardwarové akcelerace kodéru videa. Dá se použít v různých scénářích, jako je Internet věcí (IoT), cloudová, mediální rozhraní API, strojové učení (ML) a streamování her.
Ve Windows 11 verze 24H2 (WDDM 3.2) je přidána podpora kódování AV1. Další informace naleznete v tématu D3D12 AV1 Video Encoding.
Podporované kodeky
Počínaje Windows 11 jsou podporované kodeky H.264 a HEVC, i když architektura kódování videa D3D12 poskytuje otevřenou rozšiřitelnost pro novější kodeky, jako je AV1.
Aspekty rozhraní architektury specifické pro kodeky jsou delegovány na struktury specifické pro kodeky a jejich přístup k typům sjednocení. Například struktura D3D12DDI_VIDEO_ENCODER_CODEC_CONFIGURATION_0082_0 obsahuje sjednocení s ukazateli na D3D12DDI_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_0082_0 specifické pro kodek a struktury D3D12DDI_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_0082_0 , které obsahují informace o konfiguraci specifické pro kodek.
Aby se zachovala kompatibilita binárního rozhraní pro rozšiřitelnost, typy sjednocení vždy obsahují ukazatele na struktury specifické pro kodek. Typy union mají konstantní velikost v závislosti na velikosti ukazatele architektury hostitelské platformy. Toto rozhodnutí také brání strukturám, které při rozšiřování svých rozhraní uchovávají členy nebo obsahují anonymní typy sjednocení, aby změnily velikost svých typů. Některé unie obsahují pouze ukazatele na výčtové typy; aby to bylo konzistentní, tyto výčtové typy jsou také odkazovány jako ukazatele, pokud nový kodek vyžaduje složitější typ než výčet pro reprezentaci těchto konceptů.
Předkládání podpory a schopností kódování videa
Stávající architektura související s videem byla rozšířena tak, aby ovladače mohly hlásit podporu a možnosti kódování videa.
D3D12DDI_FEATURE_VERSION_VIDEO_0083_0 je číslo verze, které definuje první úplnou implementaci všech milníků kódování videa D3D12, které byly zavedeny ve Windows 11.
Výčet D3D12DDICAPS_TYPE_VIDEO_0020 byl rozšířen tak, aby zahrnoval následující hodnoty podpory kódování videa:
- 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
Modul runtime D3D volá PFND3D12DDI_VIDEO_GETCAPS zpětné volání ovladače pro dotazování na podporu kódování videa.
Ovladač, který podporuje kódování videa, poskytuje prostředí běhové knihovny D3D s ukazateli na funkce zpětného volání pro kódování videa ve struktuře D3D12DDI_DEVICE_FUNCS_VIDEO_0082_0.
Funkce zpětného volání pro kódování videa v D3D12
Ovladač implementuje následující funkce zpětného volání pro podporu kódování videa D3D12.
Vytvořte objekt ovladače, který představuje kodér videa:
PFND3D12DDI_CALCPRIVATEVIDEOENCODERSIZE_0082_0 vypočítá množství paměti, kterou modul runtime D3D potřebuje přidělit pro objekt ovladače.
PFND3D12DDI_CREATEVIDEOENCODER_0082_0 vytvoří skutečný objekt kodéru videa, který obsahuje stav procesu kódování videa.
Vytvořte objekt ovladače, který představuje haldu kodéru videa:
PFND3D12DDI_CALCPRIVATEVIDEOENCODERHEAPSIZE_0080_2 vypočítá velikost paměti, kterou modul runtime D3D potřebuje přidělit pro objekt ovladače.
PFND3D12DDI_CREATEVIDEOENCODERHEAP_0080_2 vytvoří objekt haldy kodéru videa, který obsahuje prostředky a stav ovladače závislé na rozlišení.
Kódování rámce:
PFND3D12DDI_VIDEO_ENCODE_FRAME_0082_0 zaznamenává operaci kódování rámce do seznamu příkazů.
Po operaci kódování musí být volána také PFND3D12DDI_VIDEO_ENCODE_RESOLVE_OUTPUT_METADATA_0082_0 k překladu výstupních metadat operace kódování do čitelného formátu. Rozložení vyřešených metadat řidiče je podobné příkladu uvedenému ve specifikaci diagramu.
Zničit kodér videa a přidruženou haldu:
Testování
Následující testy jsou součástí sady Windows Hardware Lab Kit (WHLK). Podrobnosti najdete ve WHLK.
| Název testu | Popis |
|---|---|
| CreateVideoEncoder | Ověří vytvoření VideoEncoder/VideoEncoderHeap na základě ohlášených případů souvisejících s CheckFeatureSupport. |
| SingleEncodeH264/HEVC | Testy založené na kódu QR pro základní kontroly strukturálního obrázku Sekvence vstupních obrázků se označí předdefinovaným obsahem QR a pak se zakóduje a dekóduje. Nakonec se zkontrolují výstupní hodnoty (a do určité míry kvalita), aby se zajistilo, že se jedná o očekávané hodnoty. |
| EncodeProfileLevelSuggestionsH264/HEVC | Ověří, že hodnoty D3D12_FEATURE_DATA_VIDEO_ENCODER_SUPPORT.SuggestedProfile/Level odpovídají očekáváním na základě specifikací H.264/HEVC a konfigurací předaných jako vstup do D3D12_FEATURE_DATA_VIDEO_ENCODER_SUPPORT. |
| EncodeHeapSizeCap | Ověřuje zvýšení využití paměti s různými rostoucími vstupními argumenty. |
| SimpleGOPEncodeH264/HEVC (10 bitů) | Překóduje vstupní video pomocí různých rozlišení, GOP vzorů, režimů snímků a dalších konfigurací kodeků a ověří, zda je rozdíl mezi kódovaným výstupním videem a vstupním video streamem přijatelný. Porovnání se provádí pomocí vrcholového poměru signálu k šumu (PSNR). |
| EncodeSubregions/ResolutionReconfiguration | Ověřuje dynamické rekonfigurace. |
| EncodeH264LongTermReferences | Ověřuje použití dlouhodobých referenčních obrázků. |
| EncodeIntraRefresh | Ověřuje jednoduchý scénář intra-refresh pomocí otevřeného programu IPP... P... P... GOP. |
| VideoEncodeCommandListFeatures | Ověřuje predikaci a značky pro seznamy příkazů kódování videa. |
| VideoEncodeTimestamps | Ověří časové razítka pro seznamy příkazů kódování videa. |
Scénáře kódování videa
OneCore
Podpora kódování videa D3D12 umožňuje přenosné hardwarově akcelerované kódování videa na platformách, kde je k dispozici pouze D3D12. Mezi tyto platformy patří různé skladové položky OneCore používané cloudovými výpočetními službami a platformami IoT. Akcelerace kódování videa je v těchto scénářích dostupná bez nutnosti používat řešení specifická pro konkrétní platformu.
Rozhraní API médií
Funkce kódování videa na nízké úrovni a přenosném způsobem jsou přístupné pro všechny dodavatele hardwaru. Tato přístupnost umožňuje rozhraním MEDIA API vyšší úrovně (například Media Foundation) vytvářet vrstvy médií nad tímto rozhraním API, které se stará o abstrakci různých hardwarových platforem. Vzhledem k návrhu rozhraní API na nízké úrovni mohou tyto vrstvy médií vyšší úrovně optimalizovat své scénáře díky jemné kontrole nad synchronizací a přidělováním/rezidencí paměti v aspektech relace kódování videa, jako je kompletní řízení správy referenčních obrázků a zodpovědnost za zápis bitstreamových hlaviček. Tento posun zodpovědností do vrstvy nad tímto rozhraním API také umožňuje dodavatelům hardwaru mít konzistentní sadu zásad kódování (například heuristiky DPB, jako je adaptivní GOP), ve vrstvě médií, kterou je možné opakovaně používat na různých hardwarových platformách.
Interoperabilita s grafikou D3D, výpočetními prostředky a strojovým učením
Rozhraní API pro kódování videa D3D12 umožňuje efektivní interoperabilitu mezi kódováním videa D3D12 a grafickými, výpočetními a ml scénáři D3D12. Tato interoperabilita je zajímavá pro scénáře, jako je spuštění odvozování ML přes stream fotoaparátu.
Scénáře streamování her
Rozhraní API pro kódování videa D3D12 umožňuje scénáře streamování her, které vyžadují vysoce výkonné API na nízké úrovni.