Freigeben über


DXVAHDDDI_STREAM_DATA Struktur (d3dumddi.h)

Die DXVAHDDDI_STREAM_DATA-Struktur beschreibt einen verarbeiteten Eingabedatenstrom.

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;

Angehörige

[in] Enable

Ein boolescher Wert, der angibt, ob der Eingabedatenstrom aktiviert ist. Die Anzahl der Eingabedatenströme, die die Laufzeit ermöglicht, 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 Ausgabeframes, die zusammengesetzt sind.

[in] InputFrameOrField

Eine nullbasierte Framenummer der Eingabeframes oder Felder, die verarbeitet werden.

[in] PastFrames

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

[in] FutureFrames

Die Anzahl der zukünftigen Referenzframes. Diese Zahl darf nicht mehr sein als die Zahl, 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.

Bemerkungen

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

  • Eine Videooberfläche, die mit dem typ "DXVAHD_SURFACE_TYPE_VIDEO_INPUT" oder "DXVAHD_SURFACE_TYPE_VIDEO_INPUT_PRIVATE" erstellt wird.
  • Eine Decodierung der Renderzieloberfläche, die mit dem DXVA2_VideoDecodeRenderTarget Typ erstellt wird.
  • Eine unformatierte Oberfläche auf dem Off-Screen.
Das OutputIndex Member 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 durchzuführen, insbesondere wenn der Treiber Deinterlacing, Framerate-Konvertierung und umgekehrte Telecine durchführt. Beispielsweise führt der Treiber mit dem folgenden Ausgabeindexmuster die angegebene Videoverarbeitung aus:
  • Progressives Format mit normaler und halber Rate:

    OutputIndex = 0, 0,...

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

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

  • Interlaced format at normal rate:

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

  • Interlaced-Format mit halber Rate:

    OutputIndex = 0, 0,... (z. B. werden die ersten und zweiten Felder mit einem Frame kombiniert)

  • 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 Member ist eine nullbasierte Zahl, die den Frame oder die Feldnummer der Eingabeoberfläche angibt. Beispielsweise kann der Treiber mit der folgenden Eingabeframe- oder Feldnummer die angegebene Videoverarbeitung ausführen:
  • Progressives Format und interlaced format at normal rate:

    InputFrameOrField = 0, 1, 2,...

  • Progressives Format und Interlaced-Format mit halber Rate:

    InputFrameOrField = 0, 2, 4,...

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

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

  • Interlaced format at 4/15 custom rate (8:7 inverse telecine, OutputFrames=2 and InputFrameOrField=15):

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

Die Anwendung sollte dazu führen, dass sowohl die OutputIndex- als auch InputFrameOrField-Elemente elemente zurückgesetzt werden, wenn entweder das Frameformat oder die Ausgaberate geändert werden, sodass 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 das Zurücksetzen nicht erfordern.

Wenn sowohl die OutputIndex- als auch InputFrameOrField Elemente beim nächsten Prozess unverändert bleiben, bestimmt der Treiber, dass der Frame in der Datenstromverarbeitung 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 vergangene und zukünftige Referenzframes bereitstellen als die Referenzframes, die der Treiber anfordert. Beispielsweise kann eine Anwendung in den folgenden Bedingungen weniger Referenzframes bereitstellen:

  • Am Anfang oder am Ende der Framesequenz.
  • Übergang zwischen progressivem und interlaced.
  • Progressiver Datenstrom mit normaler oder halber Rate.
  • Subvideostreams, die keine hohe Qualität der Interlacing erfordern.
  • Beim Drosseln der Referenzframes zum Wiederherstellen von Frame-Tropfen und zum Beibehalten der Framerate.
  • Frame drop from the input (for example, frame drop in the decoder).
Sowohl die vergangenheits- als auch die zukünftigen Referenzframes werden in den pPastSurfaces und pFutureSurfaces Arraymber in zeitlicher Reihenfolge von älteren bis neueren Frames kontinuierlich bereitgestellt. Die Reihenfolge der Elemente in den Arrays ist beispielsweise wie im folgenden Beispiel dargestellt:

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

InputSurface- = T

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

Die Eingabe- und Referenzframes ändern die Position von der zukünftigen Position bis zur letzten Position durch die aktuelle Position als OutputIndex- und InputFrameOrField Member inkrementieren. Die Eingabeoberfläche ändert sich z. B. als OutputIndex- und InputFrameOrField inkrementieren, wenn der Treiber die folgende Videoverarbeitung durchführt:

  • Progressives Format mit normaler Rate:

    OutputIndex = 0, 0, 0,...

    InputFrameOrField = 0, 1, 2,...

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

  • Interlaced format at normal 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 at 4/5 custom rate (3:2 inverse telecine, OutputFrames=4 and 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 at 4/15 custom rate (8:7 inverse telecine, OutputFrames=2 and 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)

Das folgende Pseudocodebeispiel zeigt die Interaktion zwischen der Anwendung (APP) und dem Treiber (DRV) beim Ausführen von Inverse Telecine (IVTC) auf 3:2 Pull-Down, 30 Frames (60 Felder) pro Sekunde interlaced Content:
-[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
mindestens unterstützte Client- DXVAHDDDI_STREAM_DATA wird ab dem Windows 7-Betriebssystem unterstützt.
Header- d3dumddi.h (include D3dumddi.h)

Siehe auch

DXVAHDDDI_OUTPUT_RATE

DXVAHDDDI_STREAM_STATE_FRAME_FORMAT_DATA

DXVAHDDDI_STREAM_STATE_OUTPUT_RATE_DATA

DXVAHDDDI_SURFACE

DXVAHDDDI_VPCAPS

DXVAHDDDI_VPDEVCAPS

VideoProcessBltHD-