D3D12DDI_VIDEO_ENCODER_SEQUENCE_CONTROL_DESC_0082_0-Struktur (d3d12umddi.h)

Die D3D12DDI_VIDEO_ENCODER_SEQUENCE_CONTROL_DESC_0082_0-Struktur enthält die Parameter auf Sequenzebene für die Eingabe eines Videocodierungsvorgangs.

Syntax

typedef struct D3D12DDI_VIDEO_ENCODER_SEQUENCE_CONTROL_DESC_0082_0 {
  D3D12DDI_VIDEO_ENCODER_SEQUENCE_CONTROL_FLAGS_0082_0                 Flags;
  D3D12DDI_VIDEO_ENCODER_INTRA_REFRESH_0080                            IntraRefreshConfig;
  D3D12DDI_VIDEO_ENCODER_RATE_CONTROL_0080_2                           RateControl;
  D3D12DDI_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC_0080                  PictureTargetResolution;
  D3D12DDI_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE_0080              SelectedLayoutMode;
  D3D12DDI_VIDEO_ENCODER_PICTURE_CONTROL_SUBREGIONS_LAYOUT_DATA_0080_2 FrameSubregionsLayoutData;
  D3D12DDI_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE_0082_0                 CodecGopSequence;
} D3D12DDI_VIDEO_ENCODER_SEQUENCE_CONTROL_DESC_0082_0;

Member

Flags

Ein D3D12DDI_VIDEO_ENCODER_SEQUENCE_CONTROL_FLAGS_0082_0 Wert, der die Sequenzsteuerelementdeskriptorflags für den aktuellen Codierungsrahmenvorgang angibt.

IntraRefreshConfig

Eine D3D12DDI_VIDEO_ENCODER_INTRA_REFRESH_0080-Struktur , die die Parameter für den aktualisierungsinternen Modus angibt, der beim Auslösen von Aktualisierungssitzungen verwendet werden soll. Ausführliche Informationen zur Verwendung von intra-fresh finden Sie unter Hinweise.

RateControl

Eine D3D12DDI_VIDEO_ENCODER_RATE_CONTROL_0080_2-Struktur , die die Konfiguration der Ratensteuerung angibt.

Überprüfen Sie das flag D3D12_VIDEO_ENCODER_SUPPORT_FLAG_0083_0_RATE_CONTROL_RECONFIGURATION_AVAILABLE , um zu ermitteln, ob die dynamische Neukonfiguration der Ratensteuerung unterstützt wird:

  • Falls unterstützt, bewirkt ein geändertes RateControl einen Neustart des Ratensteuerungsalgorithmus, wobei die neue Konfiguration mit der Ausführung des zugeordneten EncodeFrame-Befehls beginnt.
  • Wenn dies nicht unterstützt wird, sollte RateControl am Anfang der Codierungssitzung festgelegt und während der Sitzung nicht geändert werden.

PictureTargetResolution

Eine D3D12DDI_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC_0080 Struktur, die die Auflösung beschreibt, die beim Codieren dieses Frames verwendet werden soll. Die Zielauflösung muss basierend auf der Liste der Auflösungen festgelegt werden, die beim Erstellen des zugeordneten Encoderheaps für diesen Vorgang angegeben wurden.

Überprüfen Sie das flag D3D12_VIDEO_ENCODER_SUPPORT_FLAG_0083_0_RESOLUTION_RECONFIGURATION_AVAILABLE , um zu ermitteln, ob die dynamische Neukonfiguration für die Auflösung unterstützt wird:

  • Falls unterstützt, gibt PictureTargetResolution die Auflösung an, die für den zugeordneten EncodeFrame-Befehl verwendet werden soll. In einigen Codecs kann eine Änderung der Auflösung in der Mitte der Codierungssitzung erfordern, dass ein GOP mit einer potenziellen IDR/Keyframe-Anforderung zurückgesetzt wird. Außerdem muss der DPB-Puffer (Decoded Picture Buffer) und die Frameverwaltungsalgorithmen zurückgesetzt werden.
  • Falls nicht unterstützt, gibt PictureTargetResolution die Zielauflösung für die gesamte Codierungssitzung an und darf während der Sitzung nicht geändert werden.

SelectedLayoutMode

Ein D3D12DDI_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE_0080 Wert, der angibt, welcher Layoutmodus verwendet wird und somit welche Union-Member in FrameSubregionsLayoutData verwendet werden sollen.

Überprüfen Sie das flag D3D12_VIDEO_ENCODER_SUPPORT_FLAG_0083_0_SUBREGION_LAYOUT_RECONFIGURATION_AVAILABLE , um zu ermitteln, ob die dynamische Neukonfiguration von Unterregionen unterstützt wird:

  • Falls unterstützt, gibt SelectedLayoutMode den Partitionierungsmodus für die Unterregion an, der für den zugeordneten EncodeFrame-Befehl verwendet wird.
  • Falls nicht unterstützt, gibt *SelectedLayoutMode den Zielunterregionsmodus der vollständigen Codierungssitzung an und darf während der Codierungssitzung nicht geändert werden.

FrameSubregionsLayoutData

Eine D3D12DDI_VIDEO_ENCODER_PICTURE_CONTROL_SUBREGIONS_LAYOUT_DATA_0080_2-Struktur , die optionale Codec-spezifische Daten enthält. Wenn SelectedLayoutMode angibt, dass keine Unterbereiche vorhanden sind, muss dieser Member NULL sein.

CodecGopSequence

Eine D3D12DDI_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE_0082_0-Struktur , die den aktuellen GOP angibt, der in der Videosequenz in der Anzeigereihenfolge verwendet wird. Aufrufe von EncodeFrame müssen diesem GOP folgen, jedoch in der Reihenfolge nach der Neuanordnung von B-Frames.

Überprüfen Sie das flag D3D12_VIDEO_ENCODER_SUPPORT_FLAG__0083_0_SEQUENCE_GOP_RECONFIGURATION_AVAILABLE , um festzustellen, ob die dynamische GOP-Neukonfiguration unterstützt wird:

  • Falls unterstützt, gibt CodecGopSequence den neuen GOP-Unterregionsmodus an, der ab dem zugeordneten EncodeFrame-Befehl verwendet wird.
  • Falls nicht unterstützt, gibt CodecGopSequence das GOP-Zielmuster (in Anzeigereihenfolge) der vollständigen Codierungssitzung an und darf während der Codierungssitzung nicht geändert werden.

Hinweise

Allgemeine Informationen finden Sie unter D3D12-Videocodierung .

Verwenden der inneren Aktualisierung

Die Verwendung bidirektionaler Referenzframes (B-Frames) schließt sich mit intra-refresh gegenseitig aus. Der Aufrufer sollte überprüfen, ob die CodecGopSequence-Struktur keine B-Frames enthält, wenn die Aktualisierungsmodi aktiv sind. Beim Abfragen von D3D12DDICAPS_VIDEO_ENCODER_SUPPORT_DATA mit einem anderen Aktualisierungsmodus als D3D12_VIDEO_ENCODER_INTRA_REFRESH_MODE_NONE darf der CodecGopSequence-Satz keine B-Frames enthalten, andernfalls gibt die Abfrage keine Unterstützung zurück.

Die Verwendung von unendlicher intra-Aktualisierung ist möglich, indem regelmäßig eine neue Welle der inneren Aktualisierung angefordert wird, nachdem die einzelnen Aktualisierungen abgeschlossen sind.

Beim Starten einer aktualisierungsinternen Dauer von N Frames führt der Host folgendes aus:

  • Legt das entsprechende Bildsteuerelementflag fest, um die interne Aktualisierung zu starten.
  • Steuert den Frameindex zwischen [0..N) in der Bildsteuerelementstruktur, um dem Treiber einen Hinweis auf den Fortschritt der Aktualisierungssitzung zu geben.

Das erwartete Verhalten beim expliziten Anfordern einer aktualisierungsinternen Welle mit dauer N Frames folgt:

  • Wenn die Anforderung für die interne Aktualisierung am Anfang eines GOP erfolgt, erfolgt die interne Aktualisierung für N Frames, und dann wird ein neuer GOP mit einem I-Frame gestartet.

  • Wenn die Anforderung für die intra-Aktualisierung in der Mitte eines GOP erfolgt, wird die Bildgruppe bis zum letzten übermittelten EncodeFrame-Befehl beendet und nach der aktualisierungsinternen Sitzung mit einem neuen GOP neu gestartet, der mit einem I-Frame beginnt. Wenn das GOP z. B. IPPPP ist... IPPPP..., wenn der Start der intra-Aktualisierung bei der "IPP"-Teilübermittlung des GOP angefordert wird, werden die letzten beiden P-Frames dieses GOP ignoriert, die sitzungsinterne Aktualisierung für die nächsten N Frames ausgegeben, und dann wird ein neuer Keyframe erwartet, der die GOP-Struktur neu startet.

Für zeilenbasierte intra-aktualisierung:

  • Die konfigurierte GOP-Struktur muss in Infinite IPPP neu konfiguriert werden... P... GOP (GOPLength = 0u und PPicturePeriod = 1u) für die Dauer der Aktualisierungssitzung. Sie kann dann nach Abschluss der Aktualisierungswelle erneut konfiguriert werden.

  • Der konfigurierte Partitionierungsmodus für Untergeordnete Regionen wird für eine Dauer von N EncodeFrame-Befehlen so konfiguriert, dass er der Partitionierung von N-Slices pro Frame entspricht. Dies ist besonders wichtig, wenn die Partitionierung der Unterregion auf einen inkompatiblen Modus mit Anforderungen für die aktualisierungsinterne Aktualisierung festgelegt ist, z. B. wenn die Zeile der intracodierten Einheiten in einem Slice die auf Bytes pro Slice festgelegte Einschränkung unterbricht. Die Erwartung für zeilenbasierte intra-refresh ist, dass der resultierende Frame N Slices enthält, alle P-Slices, mit Ausnahme des aktuellen Zeilensegments innerhalb der Aktualisierung, bei dem es sich um einen I-Slice handelt.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 11 (WDDM 3.0)
Kopfzeile d3d12umddi.h

Weitere Informationen

D3D12DDI_VIDEO_ENCODER_ENCODEFRAME_INPUT_STREAM_ARGUMENTS_0082_0

D3D12DDI_VIDEO_ENCODER_SUPPORT_FLAGS_0083_0

PFND3D12DDI_VIDEO_ENCODE_FRAME_0082_0

PFND3D12DDI_CREATEVIDEOENCODERHEAP_0080_2