Freigeben über


D3D12-Videocodierung

Diese Seite enthält allgemeine Informationen für Treiberentwickler zum Direct3D12-Videocodierungsfeature. Weitere Informationen, einschließlich Besonderheiten auf Anwendungsebene, finden Sie in der D3D-Videocodierungsspezifikation.

Informationen zur Direct3D 12-Videocodierung

Vor Windows 11 (WDDM 3.0) stellte DirectX 12 Schnittstellen auf Anwendungs- und Treiberebene (APIs und DDIs) zur Unterstützung der GPU-Beschleunigung für mehrere Videoanwendungen bereit, einschließlich Videocodierung, Videoverarbeitung und Bewegungsschätzung.

Ab Windows 11 hat D3D12 der vorhandenen Video-API/DDI-Familie ein Videocodierungsfeature hinzugefügt. Dieses Feature bietet einen kohärenten Satz von Codierungs-APIs/DDIs, die mit dem vorhandenen D3D12-Framework konsistent sind, und ermöglicht Es Entwicklern, die Videocodierung mit GPU-beschleunigten Video-Engines durchzuführen.

Das Videocodierungsframework bietet Zugriff auf die Hardwarebeschleunigungsfunktionen für die Videocodierung für verschiedene Szenarien, z. B. Internet der Dinge (IoT), Cloud, Medien-APIs, Machine Learning und Spielestreaming.

Unterstützte Codecs

Ab Windows 11 werden H.264 und HEVC unterstützt, obwohl das D3D12-Videocodierungsframework eine offene Erweiterbarkeit für neuere Codecs wie AV1 bietet.

Die codecspezifischen Aspekte der Frameworkschnittstelle werden an Codec-spezifische Strukturen und deren Zugriff auf Union-Typen delegiert. Die D3D12DDI_VIDEO_ENCODER_CODEC_CONFIGURATION_0082_0-Struktur enthält beispielsweise eine Union mit Zeigern auf codecspezifische D3D12DDI_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_0082_0 und D3D12DDI_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_0082_0 Strukturen, die die codecspezifischen Konfigurationsinformationen enthalten.

Um die Kompatibilität der binären Schnittstellen bei der Erweiterbarkeit beizubehalten, enthalten die Union-Typen immer Zeiger auf die codecspezifischen Strukturen. Die Union-Typen haben eine konstante Größe basierend auf der Zeigergröße der Hostarchitektur. Diese Entscheidung verhindert auch, dass Strukturen, die Member von (oder anonymen) Union-Typen enthalten, ihre Typgrößen beim Erweitern der Schnittstelle ändern. Einige der Unions enthalten nur Zeiger auf Enumerationstypen; Um konsistent zu sein, werden diese Enumerationstypen auch als Zeiger für den Fall verwiesen, dass ein neuer Codec einen komplexeren Typ als eine Enumeration benötigt, um diese Konzepte darzustellen.

Unterstützung und Funktionen für die Berichterstattung zur Videocodierung

Das vorhandene videobezogene Framework wurde erweitert, um Treibern das Melden von Unterstützung und Funktionen für die Videocodierung zu ermöglichen.

  • D3D12DDI_FEATURE_VERSION_VIDEO_0083_0 ist die Versionsnummer, die die erste vollständige Implementierung aller D3D12-Videocodierungsmeilensteine definiert, die in Windows 11 eingeführt wurden.

  • Die D3D12DDICAPS_TYPE_VIDEO_0020-Enumeration wurde erweitert, um die folgenden Videocodierungsunterstützungswerte einzuschließen:

    • 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

    Die D3D-Runtime ruft den PFND3D12DDI_VIDEO_GETCAPS Rückruf des Treibers auf, um die Unterstützung der Videocodierung abzufragen.

  • Ein Treiber, der die Videocodierung unterstützt, stellt der D3D-Runtime Zeiger auf ihre Videocodierungsrückruffunktionen in der D3D12DDI_DEVICE_FUNCS_VIDEO_0082_0-Struktur bereit.

D3D12-Videocodierungsrückruffunktionen

Ein Treiber implementiert die folgenden Rückruffunktionen, um die D3D12-Videocodierung zu unterstützen.

Testen

Die folgenden Tests sind als Teil des Windows Hardware Lab Kit (WHLK) enthalten. Weitere Informationen finden Sie im WHLK.

Prüfungsname BESCHREIBUNG
CreateVideoEncoder Überprüft die Erstellung von VideoEncoder/VideoEncoderHeap basierend auf den gemeldeten CheckFeatureSupport-bezogenen Fällen.
SingleEncodeH264/HEVC QR-Code-basierte Tests für grundlegende Überprüfungen von Strukturellen Bildern. Die Eingabebildsequenz wird mit vordefiniertem QR-Inhalt gestempelt, dann codiert und decodiert und schließlich überprüft, um sicherzustellen, dass die Ausgabewerte (und in gewissem Maße die Qualität) den Erwartungen entsprechen.
EncodeProfileLevelSuggestionsH264/HEVC Überprüft, ob die D3D12_FEATURE_DATA_VIDEO_ENCODER_SUPPORT. Die SuggestedProfile/Level-Werte basieren auf H.264/HEVC-Spezifikationen und den Konfigurationen, die als Eingabe an D3D12_FEATURE_DATA_VIDEO_ENCODER_SUPPORT übergeben werden.
EncodeHeapSizeCap Überprüft die Erhöhung des Arbeitsspeicherbedarfs mit verschiedenen zunehmenden Eingabeargumenten.
SimpleGOPEncodeH264/HEVC(10 bit) Transkodiert ein Eingabevideo mit unterschiedlichen Auflösungen, GOP-Mustern, Slicemodi und anderen Codeckonfigurationen und überprüft, ob das ausgabecodierte Video anhand des Eingangsvideostreamunterschieds akzeptabel ist. Dieser Vergleich erfolgt mithilfe des Spitzensignal-Rausch-Verhältnisses (PSNR).
EncodeSubregions/ResolutionReconfiguration Überprüft on-the-fly-Neukonfigurationen.
EncodeH264LongTermReferences Überprüft die Verwendung langfristiger Bildverweise.
EncodeIntraRefresh Überprüft ein einfaches Szenario der intra-Aktualisierung mit einem offenen IPP... P... P... GOP.
VideoEncodeCommandListFeatures Überprüft die Prädication und Marker für Videocodierungsbefehlslisten.
VideoEncodeTimestamps Überprüft Zeitstempel für Videocodierungsbefehlslisten.

Videocodierungsszenarien

OneCore

Die D3D12-Videocodierungsunterstützung ermöglicht die portable, hardwarebeschleunigte Videocodierung auf Plattformen, auf denen nur D3D12 verfügbar ist. Dazu gehören die verschiedenen OneCore SKUs, die von Cloudcompute- und IoT-Plattformen verwendet werden. Die Videocodierungsbeschleunigung ist in diesen Szenarien verfügbar, ohne plattformspezifische Lösungen verwenden zu müssen.

Medien-APIs

Videocodierungsfunktionen auf niedriger Ebene und portierbar sind für alle Hardwarehersteller zugänglich. Dadurch können Media-APIs auf höherer Ebene (z. B. Media Foundation) ihre Medienebenen auf dieser API erstellen, die sich um die Abstraktion der verschiedenen Hardwareplattformen kümmert. Aufgrund des low-Level-Designs der API können diese Medienebenen auf höherer Ebene für ihre Szenarien optimiert werden, indem sie eine präzise Kontrolle über die Synchronisierungs- und Speicherbelegungs-/Residenzaspekte der Videocodierungssitzung haben, z. B. die vollständige Kontrolle über die Referenzbildverwaltung und die Schreibaufgaben von Bitstreamheadern. Diese Verlagerung der Zuständigkeiten auf die Ebene oberhalb dieser API ermöglicht es Hardwareherstellern auch, über einen konsistenten Satz von Codierungsrichtlinien zu verfügen (z. B. DPB-Heuristiken wie adaptives GOP) in der Medienebene, die auf verschiedenen Hardwareplattformen wiederverwendet werden können.

Interoperabilität mit D3D-Grafiken, Compute und Machine Learning

Die D3D12-Videocodierungs-API ermöglicht eine effiziente Interoperabilität zwischen D3D12-Videocodierung und D3D12-Grafiken, Compute- und Machine Learning-Szenarien, die für Szenarien wie das Ausführen von Machine Learning-Rückschlüssen über einen Kameradatenstrom interessant ist.

Spielstreamingszenarien

Die D3D12-Videocodierungs-API ermöglicht Spielstreamingszenarien, die eine leistungsstarke LOW-Level-API erfordern.