D3D12DDI_VIDEO_ENCODER_AV1_PICTURE_CONTROL_CODEC_DATA_0095 Struktur (d3d12umddi.h)
Die D3D12DDI_VIDEO_ENCODER_AV1_PICTURE_CONTROL_CODEC_DATA_0095 Struktur ist eine umfassende Konfigurationsstruktur, die alle erforderlichen Parameter zum Steuern der Codierung eines AV1-Bilds (Frame) enthält.
Syntax
typedef struct D3D12DDI_VIDEO_ENCODER_AV1_PICTURE_CONTROL_CODEC_DATA_0095 {
D3D12DDI_VIDEO_ENCODER_AV1_PICTURE_CONTROL_0095_FLAGS Flags;
D3D12DDI_VIDEO_ENCODER_AV1_FRAME_TYPE_0095 FrameType;
D3D12DDI_VIDEO_ENCODER_AV1_COMP_PREDICTION_TYPE_0095 CompoundPredictionType;
D3D12DDI_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS_0095 InterpolationFilter;
D3D12DDI_VIDEO_ENCODER_AV1_RESTORATION_CONFIG_0095 FrameRestorationConfig;
D3D12DDI_VIDEO_ENCODER_AV1_TX_MODE_0095 TxMode;
UINT SuperResDenominator;
UINT OrderHint;
UINT PictureIndex;
UINT TemporalLayerIndexPlus1;
UINT SpatialLayerIndexPlus1;
D3D12DDI_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_DESCRIPTOR_0095 ReferenceFramesReconPictureDescriptors[8];
UINT ReferenceIndices[7];
UINT PrimaryRefFrame;
UINT RefreshFrameFlags;
D3D12DDI_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_CONFIG_0095 LoopFilter;
D3D12DDI_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_DELTA_CONFIG_0095 LoopFilterDelta;
D3D12DDI_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_CONFIG_0095 Quantization;
D3D12DDI_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_DELTA_CONFIG_0095 QuantizationDelta;
D3D12DDI_VIDEO_ENCODER_AV1_CDEF_CONFIG_0095 CDEF;
UINT QPMapValuesCount;
INT16 *pRateControlQPMap;
D3D12DDI_VIDEO_ENCODER_AV1_SEGMENTATION_CONFIG_0095 CustomSegmentation;
D3D12DDI_VIDEO_ENCODER_AV1_SEGMENTATION_MAP_0095 CustomSegmentsMap;
} D3D12DDI_VIDEO_ENCODER_AV1_PICTURE_CONTROL_CODEC_DATA_0095;
Member
Flags
Eine D3D12DDI_VIDEO_ENCODER_AV1_PICTURE_CONTROL_0095_FLAGS-Enumeration , die die Flags für den zu codierenden Frame angibt.
FrameType
Eine D3D12DDI_VIDEO_ENCODER_AV1_FRAME_TYPE_0095-Enumeration , die den zu codierenden Frametyp angibt.
CompoundPredictionType
Eine D3D12DDI_VIDEO_ENCODER_AV1_COMP_PREDICTION_TYPE_0095-Enumeration , die den zu verwendenden zusammengesetzten Vorhersagetyp angibt. Im Zusammenhang mit der AV1-Syntax reference_select.
InterpolationFilter
Eine D3D12DDI_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS_0095-Enumeration , die den Interpolationsfilter angibt, der für die Intervorhersage für den aktuellen Frame verwendet werden soll. In Bezug auf syntaxbezogene interpolation_filter.
FrameRestorationConfig
Eine D3D12DDI_VIDEO_ENCODER_AV1_RESTORATION_CONFIG_0095-Struktur , die die zu verwendende Framewiederherstellungskonfiguration angibt.
TxMode
Eine D3D12DDI_VIDEO_ENCODER_AV1_TX_MODE_0095-Enumeration , die den zu verwendenden Transformationsmodus angibt.
SuperResDenominator
Gibt die Konfiguration für die Superauflösung an. Muss größer oder gleich D3D12_VIDEO_ENCODER_AV1_SUPERRES_DENOM_MIN sein (wie im AV1-Codecstandard definiert), wenn die Superauflösung aktiviert ist.
OrderHint
Aktueller Frame order_hint AV1-Syntax. OrderHint muss immer übergeben werden, auch wenn der Bestellhinweis im AV1-Bitstream nicht codiert wird, und er muss die Anzeigereihenfolge des Frames widerspiegeln.
PictureIndex
Der eindeutige Bildindex für diesen Frame, der verwendet wird, um ihn als Referenz für zukünftige Frames eindeutig zu identifizieren. Dieser Parameter ist in keiner Weise mit der AV1-Standardsyntax verknüpft, sondern wird stattdessen lediglich für die Nachverfolgung der D3D-API-Clientimplementierung verwendet.
Der API-Client sollte diesen Wert für den ersten D3D12DDI_VIDEO_ENCODER_AV1_FRAME_TYPE_0095_KEY_FRAME bei 0 initialisieren und ihn für jeden nachfolgenden Frame bis zum nächsten D3D12DDI_VIDEO_ENCODER_AV1_FRAME_TYPE_0095_KEY_FRAME um eins erhöhen, wenn er auf 0 zurückgesetzt werden soll und denselben Prozess ausführen sollte.
OrderHint kann für diesen Zweck nicht verwendet werden, da es einen maximalen Bereich von hat, der [0..2^(OrderHintBitsMinus1+1)]
sich umschließen kann und nicht als eindeutiger Bezeichner der Frames und ihrer Verweise funktioniert.
TemporalLayerIndexPlus1
Abbildung temporaler Ebenenindex plus 1. Der Wert 0 gibt an, dass die zeitliche Skalierbarkeit nicht verwendet wird. Dieser Wert muss innerhalb des Bereichs [0..D3D12DDI_VIDEO_ENCODER_AV1_CODEC_CONFIGURATION_SUPPORT_0095. MaxTemporalLayers].
SpatialLayerIndexPlus1
Räumlicher Bildebenenindex plus eins. Der Wert 0 gibt an, dass die räumliche Skalierbarkeit nicht verwendet wird. Dieser Wert muss innerhalb des Bereichs [0..D3D12DDI_VIDEO_ENCODER_AV1_CODEC_CONFIGURATION_SUPPORT_0095.MaxSpatialLayers] liegen.
ReferenceFramesReconPictureDescriptors[8]
Ein Array von D3D12DDI_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_DESCRIPTOR_0095 Strukturen, das die aktuelle Zustandsmomentaufnahme des vollständigen DPB-Puffers (d. h. einschließlich Frames, die nicht vom aktuellen Frame, sondern von zukünftigen Frames verwendet werden usw.) beschreibt, die in D3D12DDI_VIDEO_ENCODER_PICTURE_CONTROL_DESC_0082_0. ReferenceFrames. Die Referenzindizes (d. h. last, altref, etc.) werden aus vergangenen/zukünftigen Verweisen in dieses Deskriptorenarray zugeordnet. Der AV1-Codec lässt bis zu 8 Verweise im DPB zu.
Dieses Array von Deskriptoren ordnet wiederum ein Referenzbild für diesen Frame einem Ressourcenindex im Array "Rekonstruierte Bilder" D3D12DDI_VIDEO_ENCODER_PICTURE_CONTROL_DESC_0082_0.ReferenceFrames zu.
Die Größe dieses Arrays entspricht immer D3D12_VIDEO_ENCODER_PICTURE_CONTROL_DESC. ReferenceFrames.NumTextures für den zugeordneten EncodeFrame-Befehl .
ReferenceIndices[7]
Entspricht der ref_frame_idx[i] AV1-Syntax. Für einen Verweistyp i gibt ReferenceIndices[i] einen Index zwischen [0..7] in ReferenceFramesReconPictureDescriptors an, wobei der aktuelle Frame-i-te Verweistyp im DPB gespeichert ist. Mit anderen Worten : ReferenceFramesReconPictureDescriptors[ReferenceIndices[i]] enthält den DPB-Deskriptor für den i-ten Verweistyp.
Der i-ten Eintrag von ReferenceIndices[] entspricht den einzelnen Verweistypen wie folgt.
Index i | Verweistyp | ReferenceFramesReconPictureDescriptors[ReferenceIndices[i]] |
---|---|---|
0 | Letzter | DPB-Deskriptor für Last |
1 | Last2 | DPB-Deskriptor für Last2 |
2 | Last3 | DPB-Deskriptor für Last3 |
3 | Golden | DPB-Deskriptor für Golden |
4 | Bwdref | DPB-Deskriptor für Bwdref |
5 | Altref | DPB-Deskriptor für Altref |
6 | Altref2 | DPB-Deskriptor für Altref2 |
PrimaryRefFrame
Entspricht der in uncompressed_header() primary_ref_frame primary_ref_frame AV1-Elementsyntax. Gibt an, welcher Referenzrahmen die CDF-Werte und anderen Zustand enthält, die am Anfang des Frames geladen werden müssen. Der zulässige Bereich ist [0..7] und die Werte entsprechen wie folgt:
PrimaryRefFrame-Wert | AV1-Syntaxwert (primary_ref_frame) | Referenzrahmen ausgewählt |
---|---|---|
0 | 0 | Letzter |
1 | 1 | Last2 |
2 | 2 | Last3 |
3 | 3 | Golden |
4 | 4 | Bwdref |
5 | 5 | Altref |
6 | 6 | Altref2 |
7 | 7 (PRIMARY_REF_NONE) | Keine |
RefreshFrameFlags
Entspricht dem refresh_frame_flags AV1-Syntaxelement.
LoopFilter
Eine D3D12DDI_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_CONFIG_0095 Struktur, die die zu verwendenden Schleifenfilterparameter angibt.
LoopFilterDelta
Eine D3D12DDI_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_DELTA_CONFIG_0095-Struktur , die die zu verwendenden Schleifenfilterdeltaparameter angibt.
Quantization
Eine D3D12DDI_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_CONFIG_0095-Struktur , die die zu verwendenden Quantisierungsparameter angibt.
QuantizationDelta
Eine D3D12DDI_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_DELTA_CONFIG_0095-Struktur , die die zu verwendenden Quantisierungsdeltaparameter angibt.
CDEF
Eine D3D12DDI_VIDEO_ENCODER_AV1_CDEF_CONFIG_0095-Struktur , die die zu verwendenden CdEF-Parameter (Constrained Directional Enhancement Filtering) angibt.
QPMapValuesCount
Enthält die Anzahl der in pRateControlQPMap vorhandenen Elemente. Dieser Wert muss mit der Anzahl der Codierungsblöcke im Frame übereinstimmen, wodurch die Frameauflösung auf die am nächsten ausgerichteten Werte aufgerundet wird.
pRateControlQPMap
Array, das in der Reihenfolge der Zeilen-/Spaltenscans die QP-Zuordnungswerte enthält, die für jeden quadratischen Bereich für diesen Frame verwendet werden sollen. Die QP-Kartendimensionen können mithilfe der aktuellen Auflösung und D3D12DDI_VIDEO_ENCODER_RESOLUTION_SUPPORT_LIMITS_0080_2 berechnet werden. QPMapRegionPixelsSize, das die quadratischen Bereichsgrößen vermittelt. Der Bereich für Delta QP-Werte ist [-255; 255].
CustomSegmentation
Eine D3D12DDI_VIDEO_ENCODER_AV1_SEGMENTATION_CONFIG_0095-Struktur , die die zu verwendenden benutzerdefinierten Segmentierungsparameter angibt. Wird nur verwendet, wenn D3D12DDI_VIDEO_ENCODER_AV1_PICTURE_CONTROL_0095_FLAG_ENABLE_FRAME_SEGMENTATION_CUSTOM für den aktuellen Frame festgelegt ist.
CustomSegmentsMap
Wird nur verwendet, wenn D3D12DDI_VIDEO_ENCODER_AV1_PICTURE_CONTROL_0095_FLAG_ENABLE_FRAME_SEGMENTATION_CUSTOM für den aktuellen Frame festgelegt ist. Eine D3D12DDI_VIDEO_ENCODER_AV1_SEGMENTATION_MAP_0095-Struktur , die die benutzerdefinierte Segmentierungszuordnung angibt, die verwendet werden soll, wenn CustomSegmentation.UpdateMap festgelegt ist. Andernfalls wird die Segmentzuordnung vom Referenzrahmen geerbt.
Hinweise
Erwartungen des DPB-Managements
Im Folgenden ist der Vertrag aufgeführt, dem der API-Client und der Treiber entsprechen müssen, wenn diese API verwendet wird:
Beim Codieren D3D12DDI_VIDEO_ENCODER_AV1_FRAME_TYPE_0095_KEY_FRAME:
- PrimaryRefFrame muss 7 (PRIMARY_REF_NONE) sein.
- RefreshFrameFlags muss 0xFF sein (entspricht der Standard-Bitstreamsyntax des AV1-Codecs).
- Für alle Arrayeinträge in ReferenceFramesReconPictureDescriptors muss ReconstructedPictureResourceIndex auf D3D12_VIDEO_ENCODER_AV1_INVALID_DPB_RESOURCE_INDEX
- Die Werte in ReferenceIndices[7] sind nicht eindeutig, da jeder Wert [0..7] gemäß dem obigen Punkt auf einen nicht verwendeten DPB-Slot in ReferenceFramesReconPictureDescriptors verweist.
- D3D12DDI_VIDEO_ENCODE_REFERENCE_FRAMES_0082_0 werden wie folgt ausgefüllt:
- NumTexture2Ds = 0
- ppTexture2Ds = NULL
- pSubresources = NULL
Beim Codieren eines Frametyps mit Verweisen (z. B. SWITCH/INTER):
PrimaryRefFrame gibt an, welcher Verweisrahmen die CDF-Werte und einen anderen Zustand enthält, der am Anfang des Frames geladen werden muss.
RefreshFrameFlags muss entsprechend festgelegt werden, um anzugeben, auf welchen ReferenceFramesReconPictureDescriptors DPB-Slots das aktuelle codierte framerekonstruierte Bild nach der Codierungsausführung platziert wird. Dieser Wert muss genau dem entsprechen, was der API-Client für refresh_frame_flags AV1-Syntaxelement im zugeordneten Bildheader für den aktuellen Frame codiert.
Die Arrayeinträge in ReferenceFramesReconPictureDescriptors für den aktuellen Frame folgen genau dem, was RefreshFrameFlags für den vorherigen Frame angegeben hat.
Beispiel: Wenn RefreshFrameFlags angibt, dass der aktuelle Frame N in Steckplatz 2 platziert wird, 3 und 6, dann muss im nächsten EncodeFrame-Aufruf für Frame N+1 der Parameter ReconstructedPictureResourceIndex in den Einträgen ReferenceFramesReconPictureDescriptors[1], ReferenceFramesReconPictureDescriptors[2], ReferenceFramesReconPictureDescriptors[5] parameter auf frame N rekonstruiertes Bild in D3D12DDI_VIDEO_ENCODE_REFERENCE_FRAMES_ 0080.
Beachten Sie dazu auch die Berücksichtigung von RefreshFrameFlags=0xFF für D3D12DDI_VIDEO_ENCODER_AV1_FRAME_TYPE_0095_KEY_FRAME , indem alle ReferenceFramesReconPictureDescriptors-Einträge markiert werden, die auf das rekonstruierte Bild des KEY-Frames zeigen.
Wenn ein Bild (ohne Keyframe) nicht mit D3D12DDI_VIDEO_ENCODER_PICTURE_CONTROL_FLAG_0080_USED_AS_REFERENCE_PICTURE gekennzeichnet wird, müssen die RefreshFrameFlags null sein, um dies anzugeben.
Die Werte in ReferenceIndices[7] befinden sich innerhalb von [0..7] und verweisen auf DPB-Slots in ReferenceFramesReconPictureDescriptors.
Die Werte von ReferenceIndices[7] müssen genau mit dem übereinstimmen, was der API-Client im Bildheader für ref_frame_idx.
Gemäß av1-Syntaxdefinition von ref_frame_idx ist es nicht erforderlich, dass die Arrayeintragswerte eindeutig sein müssen.
Wenn ReferenceFramesReconPictureDescriptors[ReferenceIndices[i]]. ReconstructedPictureResourceIndex == D3D12_VIDEO_ENCODER_AV1_INVALID_DPB_RESOURCE_INDEX
- Dies gibt an, dass das Referenzbild i-te nicht für den aktuellen Frame verwendet wird und ignoriert werden muss.
Andernfalls (Valid ReferenceFramesReconPictureDescriptors[ReferenceIndices[i]]. ReconstructedPictureResourceIndex)
- Dies gibt an, dass der Verweis i-te auf den DPB-Slot ReferenceIndices[i] zeigt und das zu verwendende rekonstruierte Bild D3D12DDI_VIDEO_ENCODE_REFERENCE_FRAMES_0080 ist. ppTexture2Ds[ReferenceFramesReconPictureDescriptors[ReferenceIndices[i]].ReconstructedPictureResourceIndex]
D3D12DDI_VIDEO_ENCODE_REFERENCE_FRAMES_0080 werden wie folgt ausgefüllt:
- NumTexture2Ds = {Anzahl eindeutiger Werte von ReferenceFramesReconPictureDescriptors.ReconstructedPictureResourceIndex[j] != D3D12_VIDEO_ENCODER_AV1_INVALID_DPB_RESOURCE_INDEX für j in {0..7} }
- ppTexture2Ds = { compact array (keine NULL-Einträge) mit dem rekonstruierten Bild aus den zuvor codierten Frames, die als Verweise verwendet werden }
- [Nur Texturarraymodus] pSubresources = { compact array (keine NULL-Einträge) mit dem Unterressourcenindex des Texturarrays aus den zuvor codierten Frames, die als Verweise verwendet werden }
Beim Codieren eines Frametyps ohne Verweise, aber ohne Löschen des DPB (z. B. INTRA_ONLY)
PrimaryRefFrame muss 7 (PRIMARY_REF_NONE) sein.
RefreshFrameFlags muss entsprechend festgelegt werden, um anzugeben, auf welchen ReferenceFramesReconPictureDescriptors DPB-Slots das aktuelle codierte framerekonstruierte Bild nach der Codierungsausführung platziert wird. Dieser Wert muss genau dem entsprechen, was der API-Client für refresh_frame_flags AV1-Syntaxelement im zugeordneten Bildheader für den aktuellen Frame codiert.
Die Arrayeinträge in ReferenceFramesReconPictureDescriptors für den aktuellen Frame folgen genau dem, was RefreshFrameFlags für den vorherigen Frame angegeben hat.
Die Werte in ReferenceIndices[7] werden ignoriert, da der innergeschützte Frame keine Verweise verwendet.
D3D12DDI_VIDEO_ENCODE_REFERENCE_FRAMES_0080 enthält die DPB-Momentaufnahme und wird wie folgt ausgefüllt:
- NumTexture2Ds = { Anzahl eindeutiger Werte von ReferenceFramesReconPictureDescriptors.ReconstructedPictureResourceIndex[j] != D3D12_VIDEO_ENCODER_AV1_INVALID_DPB_RESOURCE_INDEX für j in {0..7} }
- ppTexture2Ds = { compact array (keine NULL-Einträge) mit dem rekonstruierten Bild aus den zuvor codierten Frames, auf die von ReferenceFramesReconPictureDescriptors verwiesen wird.ReconstructedPictureResourceIndex[j] für j in {0..7} }
- [Nur Texturarraymodus] pSubresources = { compact array (keine NULL-Einträge) mit dem Unterressourcenindex des Texturarrays aus den zuvor codierten Frames, auf die von ReferenceFramesReconPictureDescriptors verwiesen wird.ReconstructedPictureResourceIndex[j] für j in {0..7} }
Weitere Informationen finden Sie unter D3D12 AV1-Videocodierung .
Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) | Windows 11, Version 24H2 (WDDM 3.2) |
Kopfzeile | d3d12umddi.h |