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.
Erstellen Sie das Treiberobjekt, das den Videoencoder darstellt:
PFND3D12DDI_CALCPRIVATEVIDEOENCODERSIZE_0082_0 berechnet den Arbeitsspeicher, den die D3D-Runtime für das Treiberobjekt zuordnen muss.
PFND3D12DDI_CREATEVIDEOENCODER_0082_0 erstellt das tatsächliche Videoencoderobjekt, das den Zustand der Videocodierungssitzung enthält.
Erstellen Sie das Treiberobjekt, das den Videoencoderheap darstellt:
PFND3D12DDI_CALCPRIVATEVIDEOENCODERHEAPSIZE_0080_2 berechnet den Arbeitsspeicher, den die D3D-Runtime für das Treiberobjekt zuordnen muss.
PFND3D12DDI_CREATEVIDEOENCODERHEAP_0080_2 erstellt das Videoencoderheapobjekt, das auflösungsabhängige Treiberressourcen und den Zustand enthält.
Codieren eines Frames:
PFND3D12DDI_VIDEO_ENCODE_FRAME_0082_0 zeichnet einen Codierungsrahmenvorgang in der Befehlsliste auf.
Nach dem Codierungsvorgang muss auch PFND3D12DDI_VIDEO_ENCODE_RESOLVE_OUTPUT_METADATA_0082_0 aufgerufen werden, um die Ausgabemetadaten des Codierungsvorgangs in ein lesbares Format aufzulösen. Das Layout der aufgelösten Metadaten des Treibers ähnelt dem Beispiel in einem Diagramm in der Spezifikation.
Zerstören Sie den Videoencoder und den zugehörigen Heap:
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.
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für