Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Das Direct3D12-Videocodierungsfeature wird erweitert, um die AV1-Codierung ab Windows 11, Version 24H2 (WDDM 3.2) zu unterstützen. In diesem Artikel werden die Erweiterungspunkte beschrieben, in denen die vorhandene D3D12-Videocodierung DDI Änderungen und neue Strukturen benötigt, um die AV1-Codierung zu unterstützen. Weitere Informationen, einschließlich Spezifikationen auf Anwendungsebene, finden Sie in der AV1 D3D12 Videocodierungsspezifikation.
Erweiterungen zur Steuerung der Rate
Die folgenden vorhandenen Enumerationen werden mit Erweiterungen für die Steuerung der Datenrate und deren Unterstützung aktualisiert:
Kennzeichnungen zur Unterstützung von Ratensteuerungen werden D3D12DDI_VIDEO_ENCODER_SUPPORT_FLAGS_0083_0 hinzugefügt.
Steuerkennzeichnungen werden zu D3D12DDI_VIDEO_ENCODER_RATE_CONTROL_FLAGS_0080 hinzugefügt.
Die folgende erweiterte (Erweiterung 1) D3D12DDI_VIDEO_ENCODER_RATE_CONTROL_XXX1-Struktur wird hinzugefügt und D3D12DDI_VIDEO_ENCODER_RATE_CONTROL_CONFIGURATION_PARAMS aktualisiert, um sie einzuschließen. QualityVsSpeed wird allen Modi hinzugefügt und VBVCapacity sowie InitialVBVFullness werden zusätzlich zu _QVBR1 hinzugefügt.
Wenn D3D12DDI_VIDEO_ENCODER_RATE_CONTROL_FLAG_0096_ENABLE_EXTENSION1_SUPPORT aktiviert ist, werden die Erweiterten Ratensteuerungsstrukturen in D3D12DDI_VIDEO_ENCODER_RATE_CONTROL_CONFIGURATION_PARAMS_0080_2.pConfiguration_XXX verwendet; andernfalls werden die Legacystrukturen verwendet, wenn sie gemäß der auf der D3D12DDI_VIDEO_ENCODER_RATE_CONTROL_FLAGS_0080 Referenzseite dokumentierten Tabelle deaktiviert sind.
Unterstützungserweiterungen für die Videocodierung
Das vorhandene videobezogene Framework wird erweitert, um Treibern das Melden von AV1-Videocodierungsunterstützung und -funktionen zu ermöglichen. In diesem Abschnitt werden die hinzugefügten oder aktualisierten Strukturen und Enumerationen aufgeführt, die zum Abfragen und Melden der AV1-Videocodierungsunterstützung verwendet werden.
D3D12DDI_FEATURE_VERSION_VIDEO_0095_0 ist die Versionsnummer, die die Mindestimplementierung aller D3D12-Videocodierungsmeilensteine definiert, die in Windows 11, Version 24H2 (WDDM 3.2) eingeführt wurden.
Die D3D12DDICAPS_TYPE_VIDEO_0020 Enumeration wurde erweitert, um die folgenden Videocodierungsunterstützungswerte einzuschließen:
- D3D12DDICAPS_TYPE_VIDEO_0095_ENCODER_FRAME_SUBREGION_LAYOUT_CONFIG
- D3D12DDICAPS_TYPE_VIDEO_0096_ENCODER_SUPPORT1
D3D12DDI_VIDEO_ENCODER_CODEC_0095_AV1 wird zu D3D12DDI_VIDEO_ENCODER_CODEC_0080 hinzugefügt.
Die D3D12DDI_VIDEO_ENCODER_AV1_PROFILE_0095 Enumeration wurde hinzugefügt, um die vom Treiber unterstützten AV1-Profile zu definieren. Der Treiber verwendet D3D12DDICAPS_VIDEO_ENCODER_INPUT_FORMAT_DATA_0080_2 , um optional unterstützte Formate für eine bestimmte D3D12DDI_VIDEO_ENCODER_AV1_PROFILE_0095 Eingabe für die Abfrage zu melden.
D3D12DDI_VIDEO_ENCODER_PROFILE_DESC_0080_2 wird aktualisiert, um das AV1-Profil (pAV1Profile) einzuschließen.
Die folgenden Strukturen und Enumerationen werden hinzugefügt oder erweitert, um die AV1-Codierung zu unterstützen:
D3D12DDI_VIDEO_ENCODER_AV1_LEVEL_TIER_CONSTRAINTS_0095 (pAV1LevelSetting wird zu D3D12DDI_VIDEO_ENCODER_LEVEL_SETTING_0080_2 hinzugefügt)
D3D12DDI_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE_0080 wird erweitert, um D3D12DDI_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE_0095_UNIFORM_GRID_PARTITION und D3D12DDI_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE_0095_CONFIGURABLE_GRID_PARTITION einzuschließen.
D3D12DDI_VIDEO_ENCODER_MOTION_ESTIMATION_PRECISION_MODE_EIGHTH_PIXEL_0095 wird D3D12DDI_VIDEO_ENCODER_MOTION_ESTIMATION_PRECISION_MODE_0080 hinzugefügt.
D3D12DDI_VIDEO_ENCODER_AV1_TX_MODE_0095 und D3D12DDI_VIDEO_ENCODER_AV1_TX_MODE_0095_FLAGS
D3D12DDI_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS_0095 und D3D12DDI_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS_0095_FLAGS
D3D12DDI_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_0095 und D3D12DDI_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_0095_FLAGS
D3D12DDI_VIDEO_ENCODER_AV1_REFERENCE_WARPED_MOTION_TRANSFORMATION_0095 und D3D12DDI_VIDEO_ENCODER_AV1_REFERENCE_WARPED_MOTION_TRANSFORMATION_0095_FLAGS
D3D12DDI_VIDEO_ENCODER_AV1_CODEC_CONFIGURATION_SUPPORT, mit pAV1Support zu D3D12DDI_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_0083_0
D3D12DDI_VIDEO_ENCODER_AV1_FRAME_TYPE_0095 und D3D12DDI_VIDEO_ENCODER_AV1_FRAME_TYPE_0095_FLAGS
D3D12DDI_VIDEO_ENCODER_CODEC_AV1_PICTURE_CONTROL_SUPPORT_0095, mit pAV1Support zu D3D12DDI_VIDEO_ENCODER_CODEC_PICTURE_CONTROL_SUPPORT_0080_2 hinzugefügt.
D3D12DDI_VIDEO_ENCODER_AV1_FRAME_SUBREGION_LAYOUT_CONFIG_SUPPORT_0095 und D3D12DDI_VIDEO_ENCODER_AV1_FRAME_SUBREGION_LAYOUT_CONFIG_VALIDATION_0095_FLAGS
D3D12DDI_FEATURE_DATA_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_CONFIG_0095 und D3D12DDI_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_CONFIG_SUPPORT_0095
pAV1Config wird zu D3D12DDI_VIDEO_ENCODER_CODEC_CONFIGURATION_0082_0 hinzugefügt.
Das D3D12DDI_VIDEO_ENCODER_VALIDATION_FLAG_0080_SUBREGION_LAYOUT_MODE_NOT_SUPPORTED-Flag wird D3D12DDI_VIDEO_ENCODER_VALIDATION_FLAGS_0080 hinzugefügt, um mit der erweiterten D3D12DDICAPS_TYPE_VIDEO_0096_ENCODER_SUPPORT1 Abfragefähigkeit verwendet zu werden.
D3D12DDICAPS_VIDEO_ENCODER_SUPPORT1_DATA_0096 wird hinzugefügt, um die vorherige D3D12DDICAPS_VIDEO_ENCODER_SUPPORT_DATA_0083_0 Abfrage zu erweitern, wobei Parameter am unteren Rand der Struktur hinzugefügt wurden. Diese erweiterte Abfrage kann mit allen H264-, HEVC- und AV1-Codecs verwendet werden und muss genau der Semantik von D3D12_FEATURE_VIDEO_ENCODER_SUPPORT entsprechend funktionieren.
Die Semantik für die Mitglieder MaxSubregionsNumber, SubregionBlockPixelsSize und QPMapRegionPixelsSize von D3D12DDI_VIDEO_ENCODER_RESOLUTION_SUPPORT_LIMITS_0080_2 wird für AV1 aktualisiert.
_D3D12DDI_VIDEO_ENCODER_AV1_SEQUENCE_STRUCTURE_0095 wird hinzugefügt, und pAV1SequenceStructure wird D3D12DDI_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE_0082_0 hinzugefügt.
Codierungsvorgang
Erwartete Bitstream-Headerwerte für AV1
Verantwortlichkeiten für Treiber-/Host-Header-Codierung
Angesichts eines codierten Frames mit K-Kacheln schreibt der Treiber die K decode_tile() AV1-Syntaxelemente im komprimierten Bitstream, die den angeforderten Kacheln in EncodeFrame-Argumenten entsprechen.
Der API-Client erstellt dann die tile_group_obu() AV1-Syntaxelemente mit tile_start_and_end_present_flag/tg_start/tg_end Elementen, um die Kacheln wie gewünscht in Kachelgruppen anzuordnen, wobei die Kacheln sequenziell platziert werden. Das Element tile_size_minus_1 wird aus den Informationen von D3D12_VIDEO_ENCODER_FRAME_SUBREGION_METADATA zur zugehörigen Kachel codiert, und decode_tile()-Elemente werden aus dem komprimierten Bitstrompuffer kopiert. Schließlich wird jedes tile_group_obu() um die open_bitstream_unit()-Elemente vom Typ OBU_TILE_GROUP gewickelt und mit einem OBU_FRAME_HEADER versehen. Für eine einzelne Kachelgruppe kann stattdessen ein OBU_FRAME Typ verwendet werden.
Der API-Client ist dafür verantwortlich, das obu_extension_flag für !(TemporalLayerIndexPlus1 || SpatialLayerIndexPlus1) den aktuellen Frame abzuleiten und, falls erforderlich, temporal_id und spatial_id im open_bitstream_unit() zu kodieren.
Die EncodeFrame-Übermittlungen erfolgen in Kodierreihenfolge, ähnlich wie die anderen Codecs, die in der D3D12-Codier-API implementiert sind.
Auflösungsänderungen und räumliche Skalierbarkeit
Wenn der Treiber D3D12_VIDEO_ENCODER_SUPPORT_FLAG_RESOLUTION_RECONFIGURATION_AVAILABLE meldet, gilt es weiterhin nur für Auflösungsänderungen in einem Keyframe.
Der aktive Sequenzheader muss die Syntax "max_frame_*_minus_1" so einstellen, dass sie der maximalen Auflösung entspricht, die in dem genutzten zugeordneten ID3D12VideoEncoderHeap vorhanden ist. Verschiedene Frames mit Auflösungen, die auch in der zugeordneten ID3D12VideoEncoderHeap vorhanden sind, können die AV1-Syntax frame_size_override_flag in frame_size() verwenden, um Auflösungsänderungen anzugeben.
Wenn D3D12_VIDEO_ENCODER_AV1_FRAME_TYPE_FLAG_SWITCH_FRAME unterstützt wird:
- Die Referenzframes müssen auf eine höhere oder gleiche Auflösung zeigen als der aktuelle Switchframe, der codiert wird.
- Die verschiedenen Auflösungen müssen alle in der zugeordneten ID3D12VideoEncoderHeap vorhanden sein, die verwendet wird.
Wenn die räumliche Skalierbarkeit unterstützt wird, müssen die verschiedenen Auflösungen der Referenzframes in der zugeordneten ID3D12VideoEncoderHeap vorhanden sein.
Notizen zur Ratensteuerung
Der akzeptierte Bereich für D3D12DDI_VIDEO_ENCODER_RATE_CONTROL_QVBR1_0096.ConstantQualityTarget lautet [0..63]. Der niedrigste Wert liefert höchste Qualität.
Im Allgemeinen gilt D3D12DDI_VIDEO_ENCODER_SUPPORT_FLAG_0083_0_RATE_CONTROL_RECONFIGURATION_AVAILABLE für die Anpassung der Qualität im Vergleich zur Geschwindigkeit und die folgenden Ratensteuerungsparameter der verschiedenen Ratensteuerungsmodi: QP in konstantem QP, Bitraten und Qualitätsstufen in CBR, VBR und QVBR. Der Treiber kann D3D12DDI_VIDEO_ENCODER_ENCODE_ERROR_FLAG_0082_0_RECONFIGURATION_REQUEST_NOT_SUPPORTED in D3D12DDI_VIDEO_ENCODER_OUTPUT_METADATA_0083_0.EncodeErrorFlags für andere nicht unterstützte Neukonfiguration der Parameter zur Steuerung der Bitrate zurückgeben.
Codierungsvorgangs-API
Die folgenden Strukturen und Enumerationen werden mit Erweiterungen hinzugefügt oder aktualisiert, um den AV1-Codierungsvorgang zu unterstützen:
D3D12DDI_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_WARPED_MOTION_INFO_0095
D3D12DDI_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_DESCRIPTOR_0095
D3D12DDI_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_DELTA_CONFIG_0095
D3D12DDI_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_DELTA_CONFIG_0095
pAV1PicData wird zu D3D12DDI_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_0082_0 hinzugefügt
D3D12DDI_VIDEO_ENCODER_AV1_PICTURE_CONTROL_SUBREGIONS_LAYOUT_DATA_TILES_0095
pTilesPartition_AV1 wird zu D3D12DDI_VIDEO_ENCODER_PICTURE_CONTROL_SUBREGIONS_LAYOUT_DATA_0080_2 hinzugefügt.
Darüber hinaus muss der vorhandene PFND3D12DDI_VIDEO_ENCODE_RESOLVE_OUTPUT_METADATA_0082_0 Rückruf eines Treibers aktualisiert werden, um das AV1-spezifische aufgelöste Pufferlayout zu verarbeiten, das für die AV1-Codierung hinzugefügt wurde.