DXVAHDDDI_STREAM_DATA-Struktur (d3dumddi.h)

Die DXVAHDDDI_STREAM_DATA-Struktur beschreibt einen Eingabedatenstrom, der verarbeitet wird.

Syntax

typedef struct _DXVAHDDDI_STREAM_DATA {
  [in] BOOL              Enable;
  [in] UINT              OutputIndex;
  [in] UINT              InputFrameOrField;
  [in] UINT              PastFrames;
  [in] UINT              FutureFrames;
  [in] DXVAHDDDI_SURFACE *pPastSurfaces;
  [in] DXVAHDDDI_SURFACE InputSurface;
  [in] DXVAHDDDI_SURFACE *pFutureSurfaces;
} DXVAHDDDI_STREAM_DATA;

Member

[in] Enable

Ein boolescher Wert, der angibt, ob der Eingabestream aktiviert ist. Die Anzahl der Von der Runtime aktivierten Eingabedatenströme darf nicht mehr als die Zahl sein, die der Treiber im MaxStreamStates-Member der DXVAHDDDI_VPDEVCAPS-Struktur festlegt.

[in] OutputIndex

Eine nullbasierte zyklische Frameindexnummer der zusammengestellten Ausgabeframes.

[in] InputFrameOrField

Eine nullbasierte Framenummer der verarbeiteten Eingabeframes oder Felder.

[in] PastFrames

Die Anzahl der bisherigen Referenzframes. Diese Zahl darf nicht mehr als die Zahl sein, die der Treiber im PastFrames-Member der DXVAHDDDI_VPCAPS-Struktur festlegt.

[in] FutureFrames

Die Anzahl der zukünftigen Referenzframes. Diese Zahl darf nicht mehr als die Zahl sein, die der Treiber im FutureFrames-Member der DXVAHDDDI_VPCAPS-Struktur festlegt.

[in] pPastSurfaces

Ein Array von DXVAHDDDI_SURFACE Strukturen, die die vergangenen Referenzoberflächen beschreiben.

[in] InputSurface

Eine DXVAHDDDI_SURFACE-Struktur , die die Eingabeoberfläche beschreibt.

[in] pFutureSurfaces

Ein Array von DXVAHDDDI_SURFACE Strukturen, die die zukünftigen Referenzoberflächen beschreiben.

Hinweise

Der Treiber muss die Oberflächen zuordnen, die die Mitglieder pPastSurfaces, InputSurfaces und pFutureSurfaces im Pooltyp angeben, den der Treiber im InputPool-Member der DXVAHDDDI_VPDEVCAPS-Struktur festlegt, und mit einem der folgenden Oberflächentypen; Andernfalls gibt die VideoProcessBltHD-Funktion des Treibers einen Fehler zurück.

  • Eine Videooberfläche, die mit dem DXVAHD_SURFACE_TYPE_VIDEO_INPUT- oder DXVAHD_SURFACE_TYPE_VIDEO_INPUT_PRIVATE-Typ erstellt wird.
  • Eine decodierte Renderzieloberfläche, die mit dem DXVA2_VideoDecodeRenderTarget Typ erstellt wird.
  • Eine einfache Oberfläche außerhalb des Bildschirms.
Das OutputIndex-Element ist eine nullbasierte zyklische Zahl, die die Frameindexnummer der Ausgabe angibt. Der Treiber verwendet diese Ausgabeindexinformationen, um die Videoverarbeitung in einem bestimmten Muster oder Zyklus auszuführen, insbesondere wenn der Treiber deinterlacing, Framerate-Konvertierung und inverse Telecine ausführt. Mit dem folgenden Ausgabeindexmuster führt der Treiber beispielsweise die angegebene Videoverarbeitung aus:
  • Progressives Format mit normaler und halber Rate:

    OutputIndex = 0, 0,...

  • Progressives Format mit benutzerdefinierter 2/1-Rate (doppelte Framerate-Konvertierung, OutputFrames=2):

    OutputIndex = 0, 1, 0, 1,...

  • Interlaced-Format mit normaler Rate:

    OutputIndex = 0, 1, 0, 1,... (0: erstes Feld, 1: zweites Feld)

  • Interlaced-Format mit halber Rate:

    OutputIndex = 0, 0,... (z. B. werden erste und zweite Felder mit einem Frame gemischt)

  • Interlaced at 4/5 custom rate (3:2 inverse telecine, OutputFrames=4):

    OutputIndex = 0, 1, 2, 3, 0, 1, 2, 3,... (0:A, 1:B, 2:C, 3:D Filmrahmen)

Das InputFrameOrField-Element ist eine nullbasierte Zahl, die den Frame oder die Feldnummer der Eingabeoberfläche angibt. Mit der folgenden Eingaberahmen- oder Feldnummer kann der Treiber beispielsweise die angegebene Videoverarbeitung ausführen:
  • Progressives Format und Interlaced-Format mit normaler Rate:

    InputFrameOrField = 0, 1, 2,...

  • Progressives Format und Interlaced-Format mit halber Rate:

    InputFrameOrField = 0, 2, 4,...

  • Interlaced-Format mit benutzerdefinierter 4/5-Rate (3:2 inverse Telecine, OutputFrames=4 und InputFrameOrField=10):

    InputFrameOrField = 0, 0, 0, 0, 10, 10, 10, 10, 20, 20, 20, 20,...

  • Interlaced-Format mit benutzerdefinierter 4/15-Rate (8:7 inverse Telecine, OutputFrames=2 und InputFrameOrField=15):

    InputFrameOrField = 0, 0, 15, 15, 30, 30,...

Die Anwendung sollte bewirken, dass die Member OutputIndex und InputFrameOrField zurückgesetzt werden, wenn entweder das Frameformat oder die Ausgaberate geändert wird, damit der Treiber seinen internen Verarbeitungszustand zurücksetzen kann. Weitere Informationen zum Ändern des Frameformats oder der Ausgaberate finden Sie unter DXVAHDDDI_STREAM_STATE_FRAME_FORMAT_DATA und DXVAHDDDI_STREAM_STATE_OUTPUT_RATE_DATA.

Wenn der Treiber jedoch zwischen normaler und halber Rate wechselt (Werte aus der DXVAHDDDI_OUTPUT_RATE-Enumeration ), sollte der Treiber die Zurücksetzung nicht erfordern.

Wenn sowohl die Member OutputIndex als auch InputFrameOrField zum nächsten Prozesszeitpunkt unverändert bleiben, bestimmt der Treiber, dass der Frame in der Streamverarbeitung unverändert ist (z. B. angehalten). Daher kann der Treiber den Frame mithilfe zwischengespeicherter Daten optimieren.

Der Treiber sollte auf eine weniger intensive Videoverarbeitungsmethode zurückgreifen, da weniger Referenzframes bereitgestellt werden. Der Treiber sollte auf Bob-De-Interlacing zurückgreifen, wenn keine Referenzbeispiele bereitgestellt werden.

Eine Anwendung kann weniger frühere und zukünftige Referenzframes als die vom Treiber angeforderten Referenzframes bereitstellen. Beispielsweise kann eine Anwendung unter den folgenden Bedingungen weniger Referenzframes bereitstellen:

  • Am Anfang oder am Ende der Framesequenz.
  • Übergang zwischen progressiv und interlaced.
  • Progressiver Stream mit normaler oder halber Rate.
  • Untervideostreams, die keine hochwertige De-Interlacing-Qualität erfordern.
  • Beim Drosseln der Referenzframes, um die Frameverluste wiederherzustellen und die Bildfrequenz zu halten.
  • Frame drop from the input (z. B. Frame drops in the decoder).
Sowohl die vergangenen als auch die zukünftigen Referenzframes werden in den Arraymembern pPastSurfaces und pFutureSurfaces kontinuierlich in zeitlicher Reihenfolge von älteren bis neueren Frames bereitgestellt. Die Reihenfolge der Elemente in den Arrays ist beispielsweise wie im folgenden Beispiel gezeigt:

pPastSurfaces [] = {..., T-3, T-2, T-1}

InputSurface = T

pFutureSurfaces [] = {T+1, T+2, T+3,...}

Die Eingabe- und Verweisrahmen ändern die Position von der zukünftigen Position an den vergangenen Speicherort über den aktuellen Speicherort als OutputIndex - und InputFrameOrField-Member inkrement. Beispielsweise ändert sich die Eingabeoberfläche als OutputIndex- und InputFrameOrField-Inkrement, wenn der Treiber die folgende Videoverarbeitung ausführt:

  • Progressives Format mit normaler Rate:

    OutputIndex = 0, 0, 0,...

    InputFrameOrField = 0, 1, 2,...

    InputSurface = T, T+1, T+2,...

  • Interlaced-Format mit normaler Rate:

    OutputIndex = 0, 1, 0, 1, 0, 1,...

    InputFrameOrField = 0, 1, 2, 3, 4, 5,...

    InputSurface = T, T, T+1, T+1, T+2, T+2,...

  • Interlaced-Format mit halber Rate:

    OutputIndex = 0, 0, 0,...

    InputFrameOrField = 0, 2, 4,...

    InputSurface = T, T+1, T+2,...

  • Interlaced-Format mit benutzerdefinierter 4/5-Rate (3:2 inverse Telecine, OutputFrames=4 und InputFrameOrField=10):

    OutputIndex = 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3,...

    InputFrameOrField = 0, 0, 0, 0, 10, 10, 10, 10, 20, 20, 20, 20,...

    InputSurface = T, T, T, T, T+5, T+5, T+5, T+5, T+10, T+10, T+10, T+10,...

  • Interlaced-Format mit benutzerdefinierter 4/15-Rate (8:7 inverse Telecine, OutputFrames=2 und InputFrameOrField=15):

    OutputIndex = 0, 1, 0, 1, 0, 1,...

    InputFrameOrField = 0, 0, 15, 15, 30, 30,...

    InputSurface = T, T, T+7, T+7, T+15, T+15,... (Beachten Sie, dass T+7-Frame das 15. Feld enthält)

Im folgenden Pseudocodebeispiel wird die Interaktion zwischen der Anwendung (APP) und dem Treiber (DRV) während der Ausführung von Inverse Telecine (IVTC) bei 3:2-Pulldowns mit 30 Frames (60 Feldern) pro Sekunde mit interlaced Content veranschaulicht:
-[60i -> 60p]
DRV: VPGuid[0] requests 1 past and 2 future reference frames.
APP: Creates VPGuid[0] video processor and set output rate to normal.
APP: Decodes frame 0(A0:A1), 1(A0:B1), 2(B0:C1), 3(C0:C1), 4(D0:D1), ...
    :
-APP: VPBltHD(frame x, 0, 1, 2), InputFrameOrField=0, OutputIndex=0
DRV: Bob [0(A0)+0(A1)] = A'
-APP: VPBltHD(frame x, 0, 1, 2), InputFrameOrField=1, OutputIndex=1
DRV: Weave [0(A1)+1(A0)] = A
-APP: VPBltHD(frame 0, 1, 2, 3), InputFrameOrField=2, OutputIndex=0
DRV: Weave [1(A0)+0(A1)] = A
-APP: VPBltHD(frame 0, 1, 2, 3), InputFrameOrField=3, OutputIndex=1
DRV: Weave [1(B1)+2(B0)] = B
-APP: VPBltHD(frame 1, 2, 3, 4), InputFrameOrField=4, OutputIndex=0
DRV: Weave [2(B0)+1(B1)] = B
-APP: VPBltHD(frame 1, 2, 3, 4), InputFrameOrField=5, OutputIndex=1
DRV: Weave [2(C1)+3(C0)] = C
-APP: VPBltHD(frame 2, 3, 4, 5), InputFrameOrField=6, OutputIndex=0
DRV: Weave [3(C0)+3(C1)] = C
-APP: VPBltHD(frame 2, 3, 4, 5), InputFrameOrField=7, OutputIndex=1
DRV: Weave [3(C1)+3(C0)] = C
-APP: VPBltHD(frame 3, 4, 5, 6), InputFrameOrField=8, OutputIndex=0
DRV: Weave [4(D0)+4(D1)] = D
-APP: VPBltHD(frame 3, 4, 5, 6), InputFrameOrField=9, OutputIndex=1
DRV: Weave [4(D1)+4(D0)] = D
    :
-[60i -> 24p]
DRV: VPGuid[1] requests 4 future reference frames.
DRV: Exports CustomRate=4/5, OutputFrames=4, InputInterlaced=TRUE, InputFramesOrFields=10.
APP: Creates VPGuid[1] video processor and set output rate to 4/5 custom rate.
-APP: VPBltHD(frame 0, 1, 2, 3, 4), InputFrameOrField=0, OutputIndex=0
DRV: Bob [0(A0)+0(A1)] = A' (playback or speed mode) or Weave [0(A0)+0(A1)] = A (quality mode)
-APP: VPBltHD(frame 0, 1, 2, 3, 4), InputFrameOrField=0, OutputIndex=1
DRV: Weave [1(B1)+2(B0)] = B
-APP: VPBltHD(frame 0, 1, 2, 3, 4), InputFrameOrField=0, OutputIndex=2
DRV: Weave [3(C0)+3(C1)] = C
-APP: VPBltHD(frame 0, 1, 2, 3, 4), InputFrameOrField=0, OutputIndex=3
DRV: Weave [4(D0)+4(D1)] = D
-APP: VPBltHD(frame 5, 6, 7, 8, 9), InputFrameOrField=10, OutputIndex=0
DRV: Weave [0(A0)+0(A1)] = A
    :

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) DXVAHDDDI_STREAM_DATA wird ab dem Windows 7-Betriebssystem unterstützt.
Kopfzeile d3dumddi.h (include D3dumddi.h)

Weitere Informationen

DXVAHDDDI_OUTPUT_RATE

DXVAHDDDI_STREAM_STATE_FRAME_FORMAT_DATA

DXVAHDDDI_STREAM_STATE_OUTPUT_RATE_DATA

DXVAHDDDI_SURFACE

DXVAHDDDI_VPCAPS

DXVAHDDDI_VPDEVCAPS

VideoProcessBltHD