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;
Angehörige
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 Interpolation für die Intervorhersage für den aktuellen Frame verwendet werden soll. Im Zusammenhang mit der Syntax 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 (gemäß Definition durch den AV1-Codecstandard) sein, wenn die Superauflösung aktiviert ist.
OrderHint
Aktuelle Frame-order_hint AV1-Syntax. OrderHint- muss immer übergeben werden, auch wenn der Bestellhinweis im AV1-Bitstream nicht codiert wird und die Anzeigereihenfolge des Frames widergespiegelt werden muss.
PictureIndex
Der eindeutige Bildindex für diesen Frame, der verwendet wird, um ihn eindeutig als Referenz für zukünftige Frames zu identifizieren. Dieser Parameter bezieht sich nicht auf die AV1-Standardsyntax, sondern wird stattdessen nur für die D3D-API-Clientimplementierungsnachverfolgung verwendet.
Der API-Client sollte diesen Wert für die erste D3D12DDI_VIDEO_ENCODER_AV1_FRAME_TYPE_0095_KEY_FRAME initialisieren und auf jeden nachfolgenden Frame um einen wert bis zum nächsten D3D12DDI_VIDEO_ENCODER_AV1_FRAME_TYPE_0095_KEY_FRAMEerhöhen, wenn er auf Null zurückgesetzt werden soll und demselben Prozess folgt.
OrderHint- kann für diesen Zweck nicht verwendet werden, da er über einen maximalen Bereich von [0..2^(OrderHintBitsMinus1+1)]
verfügt, der umbrochen werden kann und nicht als eindeutiger Bezeichner der Frames und deren Verweise funktioniert.
TemporalLayerIndexPlus1
Bild-Zeitlicher Ebenenindex plus 1. Ein Wert von Null gibt die zeitliche Skalierbarkeit an, die nicht verwendet wird. Dieser Wert muss sich innerhalb des Bereichs [0..D3D12DDI_VIDEO_ENCODER_AV1_CODEC_CONFIGURATION_SUPPORT_0095befinden. MaxTemporalLayers].
SpatialLayerIndexPlus1
Bildraumebenenindex plus 1. Ein Wert von Null gibt an, dass die räumliche Skalierbarkeit nicht verwendet wird. Dieser Wert muss sich innerhalb des Bereichs [0..D3D12DDI_VIDEO_ENCODER_AV1_CODEC_CONFIGURATION_SUPPORT_0095.MaxSpatialLayers] befinden.
ReferenceFramesReconPictureDescriptors[8]
Ein Array von D3D12DDI_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_DESCRIPTOR_0095 Strukturen, die die aktuelle Zustandsmomentaufnahme des vollständigen (d. h. Frames beschreiben, die nicht vom aktuellen Frame verwendet werden, aber von zukünftigen Frames verwendet werden usw.) DPB-Puffer, der in D3D12DDI_VIDEO_ENCODER_PICTURE_CONTROL_DESC_0082_0gespeichert ist. ReferenceFrames. Die Referenzindizes (ie. last, altref usw.) ordnen von früheren/zukünftigen Verweisen zu diesem Deskriptorenarray zu. Der AV1-Codec ermöglicht bis zu 8 Verweise im DPB.
Dieses Array von Deskriptoren ordnet wiederum ein Referenzbild für diesen Frame einem Ressourcenindex im rekonstruierbaren Bildarray 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 Syntax ref_frame_idx[i] AV1. Bei einem Referenztyp i gibt ReferenceIndices[i] einen Index zwischen [0..7] in ReferenceFramesReconPictureDescriptors an, in dem der aktuelle Frame-i-th-Bezugstyp im DPB gespeichert ist. Mit anderen Worten ReferenceFramesReconPictureDescriptors[ReferenceIndices[i]] enthält den DPB-Deskriptor für den i-th-Referenztyp.
Der i-th Eintrag von ReferenceIndices[] entspricht jedem Bezugstyp wie folgt.
Index i | Bezugstyp | ReferenceFramesReconPictureDescriptors[ReferenceIndices[i]] |
---|---|---|
0 | Letzte | DPB-Deskriptor für "Zuletzt" |
1 | Letzte 2 | DPB-Deskriptor für Last2 |
2 | Zuletzt 3 | 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 AV1-Elementsyntax primary_ref_frame in uncompressed_header(). Gibt an, welcher Referenzframe die CDF-Werte und einen anderen Zustand enthält, der am Anfang des Frames geladen werden muss. Der zulässige Bereich ist [0,.7] und die Werte entsprechen wie folgt:
PrimaryRefFrame-Wert | AV1-Syntaxwert (primary_ref_frame) | Referenzframe ausgewählt |
---|---|---|
0 | 0 | Letzte |
1 | 1 | Letzte 2 |
2 | 2 | Zuletzt 3 |
3 | 3 | Golden |
4 | 4 | Bwdref |
5 | 5 | Altref |
6 | 6 | Altref2 |
7 | 7 (PRIMARY_REF_NONE) | Nichts |
RefreshFrameFlags
Entspricht dem Syntaxelement refresh_frame_flags AV1.
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 Loopfilter-Delta-Parameter 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 Parameter für die eingeschränkte Richtungserweiterungsfilterung (CDEF) angibt.
QPMapValuesCount
Enthält die Anzahl der Elemente, die in pRateControlQPMapvorhanden sind. Dieser Wert muss mit der Anzahl der Codierungsblöcke im Frame übereinstimmen, wobei die Frameauflösung auf die am nächsten ausgerichteten Werte aufgerundet wird.
pRateControlQPMap
Array, das in der Reihenfolge der Zeilen-/Spaltenscanreihenfolge die QP-Kartenwerte enthält, die für jeden quadratischen Bereich für diesen Frame verwendet werden sollen. Die QP-Kartenabmessungen können mit der aktuellen Auflösung und D3D12DDI_VIDEO_ENCODER_RESOLUTION_SUPPORT_LIMITS_0080_2berechnet werden. QPMapRegionPixelsSize vermittelt die Größen für quadratische Regionen. Der Bereich für Delta-QP-Werte lautet [-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 zu verwendende benutzerdefinierte Segmentierungszuordnung angibt, wenn CustomSegmentation.UpdateMap festgelegt ist. Andernfalls wird die Segmentzuordnung vom Referenzframe geerbt.
Bemerkungen
Erwartungen des DPB-Managements
Es folgt der Vertrag, mit dem der API-Client und der Treiber bei Verwendung dieser API konform sein müssen:
Beim Codieren von D3D12DDI_VIDEO_ENCODER_AV1_FRAME_TYPE_0095_KEY_FRAME:
- PrimaryRefFrame- muss 7 (PRIMARY_REF_NONE) sein.
- RefreshFrameFlags- muss 0xFF sein (entsprechend der STANDARDMÄßIGen BITstreamsyntax AV1)
- Für alle Arrayeinträge in ReferenceFramesReconPictureDescriptorsmuss ReconstructedPictureResourceIndex- auf D3D12_VIDEO_ENCODER_AV1_INVALID_DPB_RESOURCE_INDEX
- Die Werte in ReferenceIndices[7] sind indistinkt, da jeder Wert [0,.7] auf einen nicht verwendeten DPB-Steckplatz in ReferenceFramesReconPictureDescriptors gemäß dem obigen Punkt zeigt.
-
D3D12DDI_VIDEO_ENCODE_REFERENCE_FRAMES_0082_0 wird wie folgt ausgefüllt:
- NumTexture2Ds = 0
- ppTexture2Ds = NULL
- pSubresources = NULL
Beim Codieren eines Frametyps mit Verweisen (dh. SWITCH/INTER):
PrimaryRefFrame- gibt an, welcher Referenzframe 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 welchem ReferenceFramesReconPictureDescriptors DPB-Slots das aktuelle codierte Bild nach der Codierungsausführung platziert wird. Dieser Wert muss genau mit dem übereinstimmen, 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.
Beispiel: Wenn RefreshFrameFlags angibt, dass der aktuelle Frame N in den Plätzen 2, 3 und 6 platziert wird, dann im nächsten EncodeFrame Aufruf für Frame N+1, der parameter ReconstructedPictureResourceIndex parameter in den Einträgen ReferenceFramesReconPictureDescriptors[1], ReferenceFramesReconPictureDescriptors[2], ReferenceFramesReconPictureDescriptors[5] parameter muss auf frame N rekonstruierte Grafik in D3D12DDI_VIDEO_ENCODE_REFERENCE_FRAMES_0080.
Beachten Sie dies unter Berücksichtigung RefreshFrameFlags=0xFF für D3D12DDI_VIDEO_ENCODER_AV1_FRAME_TYPE_0095_KEY_FRAME sowie durch Markieren aller ReferenceFramesReconPictureDescriptors Einträgen, die auf das wiederkonstruierte Bild des KEY-Frames verweisen.
Wenn ein (nicht keyframe)-Bild nicht mit D3D12DDI_VIDEO_ENCODER_PICTURE_CONTROL_FLAG_0080_USED_AS_REFERENCE_PICTUREgekennzeichnet wird, muss die RefreshFrameFlags- null sein, um dies anzugeben.
Die Werte in ReferenceIndices[7] liegen innerhalb von [0,.7] und zeigen auf DPB-Slots in ReferenceFramesReconPictureDescriptors.
Die Werte von ReferenceIndices[7] müssen exakt mit den API-Clientcodes im Bildheader für ref_frame_idx übereinstimmen.
Gemäß der AV1-Syntaxdefinition von ref_frame_idx ist es nicht erforderlich, dass die Arrayeingabewerte eindeutig sein müssen.
Wenn ReferenceFramesReconPictureDescriptors[ReferenceIndices[i]]. ReconstructedPictureResourceIndex == D3D12_VIDEO_ENCODER_AV1_INVALID_DPB_RESOURCE_INDEX
- Dies gibt an, dass das Referenzbild i-th nicht für den aktuellen Frame verwendet wird und ignoriert werden muss.
Andernfalls (Gültige ReferenceFramesReconPictureDescriptors[ReferenceIndices[i]]. ReconstructedPictureResourceIndex)
- Dies gibt an, dass der Bezug i-th auf den DPB-Steckplatz ReferenceIndices[i] zeigt und das zu verwendende Bild D3D12DDI_VIDEO_ENCODE_REFERENCE_FRAMES_0080wird.ppTexture2Ds[ReferenceFramesReconPictureDescriptors[ReferenceIndices[i]].ReconstructedPictureResourceIndex]
D3D12DDI_VIDEO_ENCODE_REFERENCE_FRAMES_0080 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), die die rekonstruierte Grafik aus den zuvor codierten Frames enthalten, die als Verweise verwendet werden }
- [Nur Texturarraymodus] pSubresources = { compact array (keine NULL-Einträge), die den Unterressourcenindex des Texturarrays aus den zuvor codierten Frames enthalten, die als Verweise verwendet werden }
Beim Codieren eines Frametyps ohne Verweise, aber ohne Löschen des DPB (d. h. INTRA_ONLY)
PrimaryRefFrame- muss 7 (PRIMARY_REF_NONE) sein.
RefreshFrameFlags muss entsprechend festgelegt werden, um anzugeben, auf welchem ReferenceFramesReconPictureDescriptors DPB-Slots das aktuelle codierte Bild nach der Codierungsausführung platziert wird. Dieser Wert muss genau mit dem übereinstimmen, 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 reinen 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), die das rekonstruierte Bild aus den zuvor codierten Frames enthalten, die von ReferenceFramesReconPictureDescriptors.ReconstructedPictureResourceIndex[j] für j in {0..7} } }
- [Texturarraymodus nur] pSubresources = { compact array (keine NULL-Einträge), das den Unterressourcenindex des Texturarrays aus den zuvor codierten Frames enthält, auf die von ReferenceFramesReconPictureDescriptorsverwiesen wird.ReconstructedPictureResourceIndex[j] für j in {0..7} } }
Weitere Informationen finden Sie unter D3D12 AV1-Videocodierung.
Anforderungen
Anforderung | Wert |
---|---|
mindestens unterstützte Client- | Windows 11, Version 24H2 (WDDM 3.2) |
Header- | d3d12umddi.h |