Condividi tramite


DXVAHDDDI_STREAM_DATA struttura (d3dumddi.h)

La struttura DXVAHDDDI_STREAM_DATA descrive un flusso di input elaborato.

Sintassi

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;

Members

[in] Enable

Valore booleano che specifica se il flusso di input è abilitato. Il numero di flussi di input che il runtime abilita non deve essere maggiore del numero, che il driver imposta nel membro MaxStreamStates della struttura DXVAHDDDI_VPDEVCAPS .

[in] OutputIndex

Numero di indice di frame ciclico in base zero dei fotogrammi di output composti.

[in] InputFrameOrField

Numero di frame in base zero dei fotogrammi di input o dei campi elaborati.

[in] PastFrames

Numero di fotogrammi di riferimento passati. Questo numero non deve essere maggiore del numero impostato dal driver nel membro PastFrames della struttura DXVAHDDDI_VPCAPS .

[in] FutureFrames

Numero di frame di riferimento futuri. Questo numero non deve essere maggiore del numero impostato dal driver nel membro FutureFrames della struttura DXVAHDDDI_VPCAPS .

[in] pPastSurfaces

Matrice di strutture DXVAHDDDI_SURFACE che descrivono le superfici di riferimento precedenti.

[in] InputSurface

Struttura DXVAHDDDI_SURFACE che descrive la superficie di input.

[in] pFutureSurfaces

Matrice di strutture DXVAHDDDI_SURFACE che descrivono le superfici di riferimento future.

Commenti

Il driver deve allocare le superfici che i membri pPastSurfaces, InputSurface e pFutureSurfaces specificano nel tipo di pool, che il driver imposta nel membro InputPool della struttura DXVAHDDDI_VPDEVCAPS e con uno dei tipi di superficie seguenti; in caso contrario, la funzione VideoProcessBltHD del driver restituisce un errore.

  • Superficie video creata con il tipo di DXVAHD_SURFACE_TYPE_VIDEO_INPUT o DXVAHD_SURFACE_TYPE_VIDEO_INPUT_PRIVATE.
  • Superficie di rendering decodifica creata con il tipo di DXVA2_VideoDecodeRenderTarget.
  • Superficie normale fuori schermo.
Il membro OutputIndex è un numero ciclico a base zero che indica il numero di indice del frame dell'output. Il driver usa queste informazioni sull'indice di output per eseguire l'elaborazione video in un determinato modello o ciclo, soprattutto quando il driver esegue la denterlacing, la conversione della frequenza dei fotogrammi e la telecine inversa. Ad esempio, con il modello di indice di output seguente, il driver esegue l'elaborazione video indicata:
  • Formato progressivo a velocità normale e metà:

    OutputIndex = 0, 0,...

  • Formato progressivo a 2/1 frequenza personalizzata (conversione doppia della frequenza dei fotogrammi, OutputFrames=2):

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

  • Formato interlacciato a velocità normale:

    OutputIndex = 0, 1, 0, 1,... (0: primo campo, 1: secondo campo)

  • Formato interlacciato a metà frequenza:

    OutputIndex = 0, 0,... (ad esempio, i primi e i secondi campi vengono mescolati a un fotogramma)

  • 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 film frame)

Il membro InputFrameOrField è un numero in base zero che indica il frame o il numero di campo dell'area di input. Ad esempio, con il numero di input-frame-or-field seguente, il driver può eseguire l'elaborazione video indicata:
  • Formato progressivo e formato interlacciato a velocità normale:

    InputFrameOrField = 0, 1, 2,...

  • Formato progressivo e formato interlacciato a metà frequenza:

    InputFrameOrField = 0, 2, 4,...

  • Formato interlacciato a 4/5 velocità personalizzata (3:2 telecine inversa, OutputFrames=4 e InputFrameOrField=10):

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

  • Formato interlacciato a 4/15 frequenza personalizzata (8:7 telecine inversa, OutputFrames=2 e InputFrameOrField=15):

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

L'applicazione deve causare la reimpostazione dei membri OutputIndex e InputFrameOrField quando viene modificato il formato del frame o la frequenza di output in modo che il driver possa reimpostare lo stato di elaborazione interno. Per altre informazioni sulla modifica del formato del frame o della frequenza di output, vedere DXVAHDDDI_STREAM_STATE_FRAME_FORMAT_DATA e DXVAHDDDI_STREAM_STATE_OUTPUT_RATE_DATA.

Tuttavia, se il driver passa tra la frequenza normale e la metà (valori dell'enumerazione DXVAHDDDI_OUTPUT_RATE ), il driver non deve richiedere la reimpostazione.

Se i membri OutputIndex e InputFrameOrField rimangono invariati al momento del processo successivo, il driver determina che il frame non viene modificato (ad esempio, sospeso) nell'elaborazione del flusso. Pertanto, il driver può ottimizzare il frame usando i dati memorizzati nella cache.

Il driver deve eseguire il fallback in un metodo di elaborazione video meno intensivo perché vengono forniti meno fotogrammi di riferimento. Il driver deve eseguire il fallback in Bob de-interlacing quando non vengono forniti esempi di riferimento.

Un'applicazione può fornire frame di riferimento meno passati e futuri rispetto ai frame di riferimento che il driver richiede. Ad esempio, un'applicazione può fornire meno frame di riferimento nelle condizioni seguenti:

  • All'inizio o alla fine della sequenza di fotogrammi.
  • Transizione tra progressiva e interlacciata.
  • Flusso progressivo normale o a metà frequenza.
  • Flussi video secondari che non richiedono de-interlacciamento di alta qualità.
  • Durante la limitazione dei fotogrammi di riferimento per il ripristino dalle gocce di frame e per mantenere la frequenza dei fotogrammi.
  • Fotogramma che viene eliminata dall'input (ad esempio, il frame scende nel decodificatore).
Sia i frame di riferimento passati che quelli futuri vengono forniti nei membri della matrice pPastSurfaces e pFutureSurfaces in ordine temporale da precedenti a frame più recenti. Ad esempio, l'ordine degli elementi nelle matrici è illustrato nell'esempio seguente:

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

InputSurface = T

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

I fotogrammi di input e riferimento cambiano posizione dalla posizione futura alla posizione precedente tramite la posizione corrente come incremento dei membri OutputIndex e InputFrameOrField . Ad esempio, l'area di input cambia come incremento outputIndex e InputFrameOrField quando il driver esegue l'elaborazione video seguente:

  • Formato progressivo a velocità normale:

    OutputIndex = 0, 0, 0,...

    InputFrameOrField = 0, 1, 2,...

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

  • Formato interlacciato a velocità normale:

    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,...

  • Formato interlacciato a metà frequenza:

    OutputIndex = 0, 0, 0,...

    InputFrameOrField = 0, 2, 4,...

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

  • Formato interlacciato a 4/5 velocità personalizzata (3:2 telecine inversa, OutputFrames=4 e InputFrameOrField=10):

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

    InputFrameOrField = 0, 0, 0, 0, 10, 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,...

  • Formato interlacciato a 4/15 frequenza personalizzata (8:7 telecine inversa, OutputFrames=2 e 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,... (si noti che T+7 frame contiene 15° campo)

Nell'esempio di pseudo-codice seguente viene illustrata l'interazione tra l'applicazione (APP) e il driver (DRV) durante l'esecuzione di Inverse Telecine (IVTC) in 3:2 pull-down, 30 frame (60 campi) al secondo contenuto interlacciato:
-[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
    :

Requisiti

Requisito Valore
Client minimo supportato DXVAHDDDI_STREAM_DATA è supportato a partire dal sistema operativo Windows 7.
Intestazione d3dumddi.h (include D3dumddi.h)

Vedi anche

DXVAHDDDI_OUTPUT_RATE

DXVAHDDDI_STREAM_STATE_FRAME_FORMAT_DATA

DXVAHDDDI_STREAM_STATE_OUTPUT_RATE_DATA

DXVAHDDDI_SURFACE

DXVAHDDDI_VPCAPS

DXVAHDDDI_VPDEVCAPS

VideoProcessBltHD