Compartir a través de


estructura DXVAHDDDI_STREAM_DATA (d3dumddi.h)

La estructura DXVAHDDDI_STREAM_DATA describe un flujo de entrada que se procesa.

Sintaxis

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;

Miembros

[in] Enable

Valor booleano que especifica si el flujo de entrada está habilitado. El número de flujos de entrada que habilita el entorno de ejecución no debe ser mayor que el número, que el controlador establece en el MaxStreamStates miembro de la estructura DXVAHDDDI_VPDEVCAPS.

[in] OutputIndex

Número de índice de fotogramas cíclicos de base cero de los fotogramas de salida que se componen.

[in] InputFrameOrField

Número de fotogramas de base cero de los marcos de entrada o campos que se procesan.

[in] PastFrames

Número de fotogramas de referencia anteriores. Este número no debe ser mayor que el número que establece el controlador en el PastFrames miembro de la estructura DXVAHDDDI_VPCAPS.

[in] FutureFrames

Número de fotogramas de referencia futuros. Este número no debe ser mayor que el número que establece el controlador en el FutureFrames miembro de la estructura DXVAHDDDI_VPCAPS.

[in] pPastSurfaces

Matriz de DXVAHDDDI_SURFACE estructuras que describen las superficies de referencia anteriores.

[in] InputSurface

Estructura DXVAHDDDI_SURFACE que describe la superficie de entrada.

[in] pFutureSurfaces

Matriz de estructuras de DXVAHDDDI_SURFACE que describen las superficies de referencia futuras.

Observaciones

El controlador debe asignar las superficies que los miembros pPastSurfaces, InputSurfacey pFutureSurfaces especifican en el tipo de grupo, que el controlador establece en el inputPool miembro de la estructura DXVAHDDDI_VPDEVCAPS y con uno de los siguientes tipos de superficie; De lo contrario, la función VideoProcessBltHD del controlador devuelve un error.

  • Superficie de vídeo que se crea con el tipo DXVAHD_SURFACE_TYPE_VIDEO_INPUT o DXVAHD_SURFACE_TYPE_VIDEO_INPUT_PRIVATE.
  • Superficie de destino de descodificación de representación que se crea con el tipo DXVA2_VideoDecodeRenderTarget.
  • Una superficie sin formato fuera de pantalla.
El miembro OutputIndex es un número cíclico basado en cero que indica el número de índice de fotograma de la salida. El controlador usa esta información de índice de salida para realizar el procesamiento de vídeo en un determinado patrón o ciclo, especialmente cuando el controlador realiza la desinterlacación, la conversión de velocidad de fotogramas y el telecine inverso. Por ejemplo, con el siguiente patrón de índice de salida, el controlador realiza el procesamiento de vídeo indicado:
  • Formato progresivo a velocidad normal y media:

    OutputIndex = 0, 0,...

  • Formato progresivo a velocidad personalizada de 2/1 (conversión doble de velocidad de fotogramas, OutputFrames=2):

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

  • Formato entrelazado a velocidad normal:

    OutputIndex = 0, 1, 0, 1,... (0: primer campo, 1: segundo campo)

  • Formato entrelazado a media velocidad:

    OutputIndex = 0, 0,... (por ejemplo, los campos primero y segundo se combinan en un marco)

  • Entrelazado a una velocidad personalizada de 4/5 (3:2 telecina inversa, OutputFrames=4):

    OutputIndex = 0, 1, 2, 3, 0, 1, 2, 3,... (0:A, 1:B, 2:C, fotograma de película 3:D)

El miembro InputFrameOrField es un número de base cero que indica el marco o el número de campo de la superficie de entrada. Por ejemplo, con el siguiente número de fotograma o campo de entrada, el controlador puede realizar el procesamiento de vídeo indicado:
  • Formato progresivo e formato entrelazado a velocidad normal:

    InputFrameOrField = 0, 1, 2,...

  • Formato progresivo e formato entrelazado a media velocidad:

    InputFrameOrField = 0, 2, 4,...

  • Formato entrelazado a una velocidad personalizada de 4/5 (3:2 telecine inversa, OutputFrames=4 y InputFrameOrField=10):

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

  • Formato entrelazado a una velocidad personalizada de 4/15 (8:7 telecine inversa, OutputFrames=2 y InputFrameOrField=15):

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

La aplicación debe hacer que los miembros OutputIndex y InputFrameOrField se restablezcan cuando se cambie el formato de fotograma o la velocidad de salida para que el controlador pueda restablecer su estado de procesamiento interno. Para obtener más información sobre cómo cambiar el formato de fotograma o la velocidad de salida, vea DXVAHDDDI_STREAM_STATE_FRAME_FORMAT_DATA y DXVAHDDDI_STREAM_STATE_OUTPUT_RATE_DATA.

Sin embargo, si el controlador cambia entre la velocidad normal y la mitad (valores de la enumeración DXVAHDDDI_OUTPUT_RATE), el controlador no debe requerir el restablecimiento.

Si tanto el OutputIndex como el InputFrameOrField miembros permanecen sin cambios en la próxima vez del proceso, el controlador determina que el fotograma no se modifica (por ejemplo, en pausa) en el procesamiento de flujos. Por lo tanto, el controlador puede optimizar el marco mediante datos almacenados en caché.

El controlador debe revertir a un método de procesamiento de vídeo menos intensivo, ya que se proporcionan menos fotogramas de referencia. El controlador debe revertir a Bob desenlazado cuando no se proporcionan ejemplos de referencia.

Una aplicación puede proporcionar menos marcos de referencia pasados y futuros que los marcos de referencia que solicita el controlador. Por ejemplo, una aplicación puede proporcionar menos marcos de referencia en las condiciones siguientes:

  • Al principio o al final de la secuencia de fotogramas.
  • Transición entre progresiva e entrelazada.
  • Secuencia progresiva de velocidad normal o media.
  • Secuencias de sub-vídeo que no requieren deslazamiento de alta calidad.
  • Al limitar los fotogramas de referencia para recuperarse de caídas de fotogramas y mantener la velocidad de fotogramas.
  • Colocación de fotogramas de la entrada (por ejemplo, caídas de fotogramas en el descodificador).
Tanto el pasado como el futuro se proporcionan en los pPastSurfaces y pFutureSurfaces miembros de matriz en orden temporal de fotogramas más antiguos a más recientes continuamente. Por ejemplo, el orden de los elementos de las matrices se muestra en el ejemplo siguiente:

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

InputSurface = T

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

Los marcos de entrada y referencia cambian la ubicación de la ubicación futura a la ubicación anterior a través de la ubicación actual a medida que se incrementa n los miembros de outputIndex y InputFrameOrField. Por ejemplo, la superficie de entrada cambia como OutputIndex y InputFrameOrField incremento cuando el controlador realiza el siguiente procesamiento de vídeo:

  • Formato progresivo a velocidad normal:

    OutputIndex = 0, 0, 0,...

    InputFrameOrField = 0, 1, 2,...

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

  • Formato entrelazado a velocidad normal:

    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 entrelazado a media velocidad:

    OutputIndex = 0, 0, 0,...

    InputFrameOrField = 0, 2, 4,...

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

  • Formato entrelazado a una velocidad personalizada de 4/5 (3:2 telecine inversa, OutputFrames=4 y InputFrameOrField=10):

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

    InputFrameOrField = 0, 0, 0, 0, 0, 10, 10, 10, 10, 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 entrelazado a una velocidad personalizada de 4/15 (8:7 telecine inversa, OutputFrames=2 y 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,... (tenga en cuenta que el marco T+7 contiene el campo 15)

En el siguiente ejemplo de pseudocódigo se muestra la interacción entre la aplicación (APP) y el controlador (DRV) al realizar Inverse Telecine (IVTC) en la extracción de 3:2, 30 fotogramas (60 campos) por segundo contenido interlazado:
-[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
    :

Requisitos

Requisito Valor
cliente mínimo admitido DXVAHDDDI_STREAM_DATA se admite a partir del sistema operativo Windows 7.
encabezado de d3dumddi.h (incluya D3dumddi.h)

Consulte también

DXVAHDDDI_OUTPUT_RATE

DXVAHDDDI_STREAM_STATE_FRAME_FORMAT_DATA

DXVAHDDDI_STREAM_STATE_OUTPUT_RATE_DATA

DXVAHDDDI_SURFACE

DXVAHDDDI_VPCAPS

DXVAHDDDI_VPDEVCAPS

VideoProcessBltHD