Freigeben über


D3D12-Videocodierung

Dieser Artikel enthält allgemeine Informationen für Treiberentwickler zur Direct3D12-Videocodierungsfunktion. Weitere Informationen, einschließlich Spezifika auf Anwendungsebene, finden Sie in der D3D-Videocodierungsspezifikation.

Informationen zur Direct3D 12-Videocodierung

Vor Windows 11 (WDDM 3.0) stellt DirectX 12 Anwendungs- und Treiberschnittstellen (APIs und DDIs) bereit, um die GPU-Beschleunigung für mehrere Videoanwendungen zu unterstützen, einschließlich Videodecodierung, Videoverarbeitung und Bewegungsschätzung.

Mit Windows 11 fügt D3D12 der vorhandenen Video-API/DDI-Familie eine Videocodierungsfunktion hinzu. Dieses Feature bietet einen kohärenten Satz von Codierungs-APIs/DDIs, die mit dem vorhandenen D3D12-Framework konsistent sind, wodurch es Entwicklern ermöglicht wird, Videocodierung mit GPU-beschleunigten Video-Engines durchzuführen.

Das Videocodierungsframework bietet Zugriff auf die Hardwarebeschleunigungsfunktionen des Video-Encoders. Sie kann in verschiedenen Szenarien wie Internet of Things (IoT), Cloud, Medien-APIs, Machine Learning (ML) und Spielestreaming verwendet werden.

Unterstützung für AV1 Encode wird in Windows 11, Version 24H2 (WDDM 3.2) hinzugefügt. Weitere Informationen finden Sie unter D3D12 AV1-Videocodierung.

Unterstützte Codecs

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

Die codec-spezifischen Aspekte der Framework-Schnittstelle werden an codec-spezifische Strukturen und deren Zugriff auf Union-Typen delegiert. Beispielsweise enthält die D3D12DDI_VIDEO_ENCODER_CODEC_CONFIGURATION_0082_0-Struktur eine Union mit Zeigern auf codec-spezifische D3D12DDI_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_0082_0 und D3D12DDI_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_0082_0-Strukturen, die die codec-spezifischen Konfigurationsinformationen enthalten.

Um die binäre Schnittstellenkompatibilität bei der Erweiterbarkeit zu erhalten, enthalten die Union-Typen immer Zeiger auf die codec-spezifischen Strukturen. Die Union-Typen haben eine konstante Größe basierend auf der Zeigergröße der Hostarchitektur. Diese Entscheidung verhindert außerdem, dass Strukturen, die Mitglieder von Unionstypen sind (oder anonyme Unions-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 referenziert, falls ein neuer Codec einen komplexeren Typ als eine Enumeration benötigt, um diese Konzepte zu repräsentieren.

Melden der Unterstützung und Funktionen von Videocodierungen

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

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

  • 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-Laufzeit ruft den PFND3D12DDI_VIDEO_GETCAPS-Rückruf des Treibers für die Videocodierungsunterstützung auf.

  • Ein Treiber, der Videocodierung unterstützt, stellt der D3D-Laufzeitumgebung Zeiger auf seine Callback-Funktionen für die Videocodierung zur Verfügung in der D3D12DDI_DEVICE_FUNCS_VIDEO_0082_0-Struktur bereit.

Rückruffunktionen für D3D12-Videocodierung

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

Testen

Die folgenden Tests sind teil des Windows Hardware Lab Kit (WHLK). Ausführliche Informationen finden Sie in der WHLK.

Prüfungsname Beschreibung
CreateVideoEncoder Überprüft die Erstellung von VideoEncoder/VideoEncoderHeap basierend auf den gemeldeten mit iCheckFeatureSupport verwandten Fällen.
SingleEncodeH264/HEVC QR-Code-basierte Tests für strukturelle Bildgrundprüfungen. Die Sequenz der Eingabebilder wird mit vordefinierten QR-Inhalten gestempelt und dann codiert und decodiert. Schließlich werden die Ausgabewerte (und in gewissem Umfang die Qualität) überprüft, um sicherzustellen, dass sie erwartungsgemäß sind.
EncodeProfileLevelSuggestionsH264/HEVC Validates that the D3D12_FEATURE_DATA_VIDEO_ENCODER_SUPPORT.SuggestedProfile/Level-Werte sind wie erwartet, basierend auf den H.264/HEVC-Spezifikationen und auf den Konfigurationen, die als Eingabe an D3D12_FEATURE_DATA_VIDEO_ENCODER_SUPPORT übergeben wurden.
EncodeHeapSizeCap Überprüft die Erhöhung des Speicherbedarfs mit unterschiedlich steigenden Eingabeargumenten.
SimpleGOPEncodeH264/HEVC(10 bit) Transkodiert ein Eingangsvideo mit verschiedenen Auflösungen, GOP-Mustern, Slice-Modi und anderen Codec-Konfigurationen und prüft, ob die Differenz zwischen dem kodierten Ausgangsvideo und dem Eingangsvideostrom akzeptabel ist. Dieser Vergleich erfolgt mithilfe des Spitzensignal-zu-Rausch-Verhältnisses (PSNR).
EncodeSubregions/ResolutionReconfiguration Überprüft spontane Neukonfigurationen.
EncodeH264LongTermReferences Überprüft die Verwendung langfristiger Bildverweise.
EncodeIntraRefresh Überprüft ein einfaches Szenario der intra-Refresh mit einem geöffneten IPP...P...P... GOP.
VideoEncodeCommandListFeatures Überprüft die Prädikation und die Markierungen für die Befehlslisten der Videocodierung.
VideoEncodeTimestamps Validiert Zeitstempel für Videoenkodierungs-Befehlslisten.

Videocodierungsszenarien

OneCore

Die Unterstützung der D3D12-Videocodierung ermöglicht die hardwarebeschleunigte Videocodierung auf Plattformen, auf denen nur D3D12 verfügbar ist. Zu diesen Plattformen gehören die verschiedenen OneCore-SKUs, die von Cloud-Compute- und IoT-Plattformen verwendet werden. Die Videocodierungsbeschleunigung ist in diesen Szenarien verfügbar, ohne dass plattformspezifische Lösungen verwendet werden müssen.

Medien-APIs

Videocodierungsfunktionen auf niedriger Ebene und portabel sind für alle Hardwareanbieter zugänglich. Diese Zugänglichkeit erlaubt Medien-APIs (z. B. Media Foundation) auf höherer Ebene ihre Medienebenen auf dieser API zu erstellen, wodurch die verschiedenen Hardwareplattformen abstrahiert werden. Angesichts des Low-Level-Designs der API können diese Medienschichten auf höherer Ebene ihre Szenarien optimieren, indem sie eine feinkörnige Kontrolle über die Synchronisierung und die Speicherzuweisung/Residenzaspekte der Videocodierungssitzung haben, wie z. B. die vollständige Kontrolle über die Verwaltung des Referenzbildes und die Verantwortlichkeiten für das Schreiben von Bitstream-Headern. Diese Umstellung der Verantwortlichkeiten auf die Ebene, die über dieser API liegt, ermöglicht es Hardwareanbietern auch, einen konsistenten Satz von Codierungsrichtlinien (z. B. DPB-Heuristiken wie adaptives GOP) auf der Medienebene zu haben, die auf verschiedenen Hardwareplattformen wiederverwendet werden können.

Interoperabilität mit D3D-Grafiken, Compute und maschinellem Lernen

Die D3D12-Videocodierungs-API ermöglicht eine effiziente Interoperabilität zwischen D3D12-Videocodierung und D3D12-Grafiken, Compute- und ML-Szenarien. Diese Interoperabilität ist für Szenarien wie das Ausführen einer ML-Ableitung über einen Kameradatenstrom interessant.

Spielstreamingszenarien

Die D3D12-Videocodierungs-API ermöglicht Spielstreamingszenarien, die eine hochgradig leistungsfähige API auf niedriger Ebene erfordern.