Share via


D3D12_VIDEO_ENCODER_SEQUENCE_CONTROL_DESC-Struktur (d3d12video.h)

Stellt Parameter für die Eingabe des Videocodierungsvorgangs auf Sequenzebene dar.

Syntax

typedef struct D3D12_VIDEO_ENCODER_SEQUENCE_CONTROL_DESC {
  D3D12_VIDEO_ENCODER_SEQUENCE_CONTROL_FLAGS                 Flags;
  D3D12_VIDEO_ENCODER_INTRA_REFRESH                          IntraRefreshConfig;
  D3D12_VIDEO_ENCODER_RATE_CONTROL                           RateControl;
  D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC                PictureTargetResolution;
  D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE            SelectedLayoutMode;
  D3D12_VIDEO_ENCODER_PICTURE_CONTROL_SUBREGIONS_LAYOUT_DATA FrameSubregionsLayoutData;
  D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE                 CodecGopSequence;
} D3D12_VIDEO_ENCODER_SEQUENCE_CONTROL_DESC;

Member

Flags

Eine bitweise OR-Kombination von Werten aus der D3D12_VIDEO_ENCODER_SEQUENCE_CONTROL_FLAGS Enumeration, die die Sequenzsteuerelementdeskriptorflags für den aktuellen Vorgang angibt.

IntraRefreshConfig

Eine D3D12_VIDEO_ENCODER_INTRA_REFRESH-Struktur , die die Parameter für den aktualisierungsinternen Modus angibt, die beim Auslösen von Aktualisierungssitzungen verwendet werden sollen.

Die Verwendung bidirektionaler Referenzframes (B-Frames) schließt sich mit intra-refresh gegenseitig aus. Aufrufer sollten überprüfen, ob die GOP-Struktur keine B-Frames enthält, wenn die Modi für die interne Aktualisierung aktiv sind. Beim Abfragen von D3D12_FEATURE_DATA_VIDEO_ENCODER_SUPPORT mit einem anderen Aktualisierungsmodus als D3D12_VIDEO_ENCODER_INTRA_REFRESH_MODE_NONE darf der angegebene D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE Satz keine B-Frames enthalten, andernfalls gibt die Abfrage keine Unterstützung zurück.

Die Verwendung von unendlicher intra-Aktualisierung ist möglich, indem in regelmäßigen Abständen eine neue Welle der inneren Aktualisierung angefordert wird, nachdem sie abgeschlossen sind.

Beim Starten einer aktualisierungsinternen Dauer von N Frames legen die Hosts das entsprechende Bildsteuerungsflag fest, um die interne Aktualisierung zu starten, und steuert den Frameindex zwischen [0..N) auch in der Bildsteuerelementstruktur, um den Treiber auf den Fortschritt der Intra-Aktualisierungssitzung zu hinweisen.

Erwartetes Verhalten beim expliziten Anfordern einer intra-Aktualisierungswelle mit Dauer N Frames:

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

  • Wenn die Anforderung für die interne Aktualisierung in der Mitte eines GOP erfolgt, wird die Bildgruppe beendet, bis der letzte EncodeFrame-Befehl übermittelt und nach der Aktualisierungssitzung mit einem neuen GOP neu gestartet wird, 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 und dann wird ein neuer Keyframe erwartet, der die GOP-Struktur neu startet.

  • Für zeilenbasierte intra-Aktualisierungen muss die konfigurierte GOP-Struktur in Infinite IPPP neu konfiguriert werden... P... GOP (GOPLength = 0u und PPicturePeriod = 1u) für die Dauer der aktualisierungsinternen Sitzung. Sie kann dann nach Abschluss der IR-Welle erneut konfiguriert werden.

  • Bei zeilenbasierter intra-aktualisierung wird der konfigurierte Partitionierungsmodus für untergeordnete Regionen so neu konfiguriert, dass er für eine Dauer von N EncodeFrame-Befehlen der Partitionierung von N Uniform Slices pro Frame entspricht. Dies ist besonders wichtig, wenn die Partitionierung der Unterregion auf einen inkompatiblen Modus mit IR-Anforderungen 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 die zeilenbasierte intra-Aktualisierung ist, dass der resultierende Frame N Slices enthält, alle P-Slices, mit Ausnahme des aktuellen Zeilensegments für die zeileninterne Aktualisierung, bei dem es sich um einen I-Slice handelt.

RateControl

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

Überprüfen Sie die Unterstützung für die dynamische Neukonfiguration der Ratensteuerung in D3D12_VIDEO_ENCODER_SUPPORT_FLAG_RATE_CONTROL_RECONFIGURATION_AVAILABLE. Wenn die dynamische Neukonfiguration der Ratensteuerung zulässig ist, wird der Ratensteuerungsalgorithmus durch Ändern von RateControl mit der neuen Konfiguration neu gestartet, beginnend mit der Ausführung des zugeordneten EncodeFrames. Andernfalls sollte dies am Anfang der Codierungssitzung festgelegt und danach nicht geändert werden.

PictureTargetResolution

Eine D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC Struktur, die die Auflösung beschreibt, die beim Codieren dieses Frames verwendet werden soll.

Überprüfen Sie die Unterstützung für die dynamische Neukonfiguration der Auflösung in D3D12_VIDEO_ENCODER_SUPPORT_FLAG_RESOLUTION_RECONFIGURATION_AVAILABLE. Wenn hierfür keine Unterstützung bereitgestellt wird, gibt PictureTargetResolution die Zielauflösung der vollständigen Codierungssitzung an und darf während der Codierungssitzung nicht geändert werden. Andernfalls wird die Auflösung angegeben, die für den zugeordneten EncodeFrame-Befehl verwendet wird.

Das Ziel muss basierend auf der Liste der Auflösungen festgelegt werden, die beim Erstellen des zugeordneten Encoderheaps für diesen Vorgang angegeben wurden.

Bei einigen Codecs erfordert eine Änderung der Auflösung in der Mitte der Codierungssitzung möglicherweise das Zurücksetzen eines GOP mit einer potenziellen IDR/Keyframe-Anforderung, und es kann auch erforderlich sein, die DPB-Puffer-/Frameverwaltungsalgorithmen zurückzusetzen.

SelectedLayoutMode

Ein Wert aus der D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE Enumeration, die angibt, welcher Layoutmodus verwendet wird und welche Union-Member in pFrameSubregionsLayoutData verwendet werden sollen.

Überprüfen Sie die Unterstützung für die dynamische Neukonfiguration von Unterregionen in [D3D12_VIDEO_ENCODER_SUPPORT_FLAG_SUBREGION_LAYOUT_RECONFIGURATION_AVAILABLE]((ne-d3d12video-d3d12_video_encoder_support_flags.md). Wenn dies nicht unterstützt wird, gibt dies den Zielunterregionsmodus der vollständigen Codierungssitzung an und darf während der Codierungssitzung nicht geändert werden. Andernfalls gibt dies den Partitionierungsmodus für die Unterregion an, der für den zugeordneten EncodeFrame-Befehl verwendet wird.

FrameSubregionsLayoutData

Eine D3D12_VIDEO_ENCODER_PICTURE_CONTROL_SUBREGIONS_LAYOUT_DATA-Struktur , die Bildunterregionen angibt, um optionale codecspezifische Daten zu layouten. Wenn der angegebene SelectedLayoutMode-Wert angibt, dass keine Unterbereiche vorhanden sind, wird NULL erwartet.

CodecGopSequence

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

Überprüfen Sie die Unterstützung für die dynamische GOP-Neukonfiguration in D3D12_VIDEO_ENCODER_SUPPORT_FLAG_SEQUENCE_GOP_RECONFIGURATION_AVAILABLE. Wenn dies nicht unterstützt wird, gibt CodecGopSequence das ZIEL-GOP-Muster (in Anzeigereihenfolge) der vollständigen Codierungssitzung an und darf während der Codierungssitzung nicht geändert werden. Andernfalls gibt dies den neuen GOP-Unterregionsmodus an, der ab dem zugeordneten EncodeFrame-Befehl verwendet wird.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows Build 22000
Unterstützte Mindestversion (Server) Windows Build 22000
Kopfzeile d3d12video.h