Compartilhar via


estrutura DXVAHDDDI_STREAM_DATA (d3dumddi.h)

A estrutura DXVAHDDDI_STREAM_DATA descreve um fluxo de entrada que é processado.

Sintaxe

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;

Membros

[in] Enable

Um valor booliano que especifica se o fluxo de entrada está habilitado. O número de fluxos de entrada habilitados pelo runtime não deve ser maior do que o número, que o driver define no membro MaxStreamStates da estrutura DXVAHDDDI_VPDEVCAPS .

[in] OutputIndex

Um número de índice de quadro cíclico baseado em zero dos quadros de saída compostos.

[in] InputFrameOrField

Um número de quadro baseado em zero dos quadros de entrada ou campos processados.

[in] PastFrames

O número de quadros de referência anteriores. Esse número não deve ser maior que o número que o driver define no membro PastFrames da estrutura DXVAHDDDI_VPCAPS .

[in] FutureFrames

O número de quadros de referência futuros. Esse número não deve ser maior que o número que o driver define no membro FutureFrames da estrutura DXVAHDDDI_VPCAPS .

[in] pPastSurfaces

Uma matriz de estruturas DXVAHDDDI_SURFACE que descrevem as superfícies de referência anteriores.

[in] InputSurface

Uma estrutura DXVAHDDDI_SURFACE que descreve a superfície de entrada.

[in] pFutureSurfaces

Uma matriz de estruturas DXVAHDDDI_SURFACE que descrevem as superfícies de referência futuras.

Comentários

O driver deve alocar as superfícies que os membros pPastSurfaces, InputSurface e pFutureSurfaces especificam no tipo de pool, que o driver define no membro InputPool da estrutura DXVAHDDDI_VPDEVCAPS e com um dos seguintes tipos de superfície; caso contrário, a função VideoProcessBltHD do driver retornará um erro.

  • Uma superfície de vídeo criada com o tipo DXVAHD_SURFACE_TYPE_VIDEO_INPUT ou DXVAHD_SURFACE_TYPE_VIDEO_INPUT_PRIVATE.
  • Uma superfície de destino de renderização de decodificação criada com o tipo DXVA2_VideoDecodeRenderTarget.
  • Uma superfície simples fora da tela.
O membro OutputIndex é um número cíclico baseado em zero que indica o número de índice do quadro da saída. O driver usa essas informações de índice de saída para executar o processamento de vídeo em um determinado padrão ou ciclo, especialmente quando o driver executa a desinterlacização, a conversão de taxa de quadros e o telecine inverso. Por exemplo, com o seguinte padrão de índice de saída, o driver executa o processamento de vídeo indicado:
  • Formato progressivo com taxa normal e meia:

    OutputIndex = 0, 0,...

  • Formato progressivo a uma taxa personalizada de 2/1 (conversão de taxa de quadros dupla, OutputFrames=2):

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

  • Formato entrelaçado a uma taxa normal:

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

  • Formato entrelaçado a meia taxa:

    OutputIndex = 0, 0,... (por exemplo, primeiro e segundo campos são combinados a um quadro)

  • Entrelaçado a uma taxa personalizada de 4/5 (telecine inverso 3:2, OutputFrames=4):

    OutputIndex = 0, 1, 2, 3, 0, 1, 2, 3,... (0:A, 1:B, 2:C, quadro de filme 3:D)

O membro InputFrameOrField é um número baseado em zero que indica o quadro ou o número do campo da superfície de entrada. Por exemplo, com o seguinte número de quadro ou campo de entrada, o driver pode executar o processamento de vídeo indicado:
  • Formato progressivo e formato entrelaçado a uma taxa normal:

    InputFrameOrField = 0, 1, 2,...

  • Formato progressivo e formato entrelaçado a meia taxa:

    InputFrameOrField = 0, 2, 4,...

  • Formato entrelaçado a uma taxa personalizada de 4/5 (telecine inverso 3:2, OutputFrames=4 e InputFrameOrField=10):

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

  • Formato entrelaçado com taxa personalizada de 4/15 (telecine inverso de 8:7, OutputFrames=2 e InputFrameOrField=15):

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

O aplicativo deve fazer com que os membros OutputIndex e InputFrameOrField sejam redefinidos quando o formato do quadro ou a taxa de saída for alterada para que o driver possa redefinir seu estado de processamento interno. Para obter mais informações sobre como alterar o formato do quadro ou a taxa de saída, consulte DXVAHDDDI_STREAM_STATE_FRAME_FORMAT_DATA e DXVAHDDDI_STREAM_STATE_OUTPUT_RATE_DATA.

No entanto, se o driver alternar entre a taxa normal e a metade (valores da enumeração DXVAHDDDI_OUTPUT_RATE ), o driver não deverá exigir a redefinição.

Se os membros OutputIndex e InputFrameOrField permanecerem inalterados na próxima hora do processo, o driver determinará que o quadro permanece inalterado (por exemplo, pausado) no processamento de fluxo. Portanto, o driver pode otimizar o quadro usando dados armazenados em cache.

O driver deve fazer fallback para um método de processamento de vídeo menos intensivo à medida que menos quadros de referência forem fornecidos. O driver deve fazer fallback para a desassociação de Bob quando nenhum exemplo de referência for fornecido.

Um aplicativo pode fornecer menos quadros de referência passados e futuros do que os quadros de referência que o driver solicita. Por exemplo, um aplicativo pode fornecer menos quadros de referência nas seguintes condições:

  • No início ou no final da sequência de quadros.
  • Transição entre progressivo e entrelaçado.
  • Fluxo progressivo normal ou de meia taxa.
  • Fluxos de sub-vídeo que não exigem desassociamento de alta qualidade.
  • Ao limitar os quadros de referência para se recuperar de quedas de quadro e manter a taxa de quadros.
  • Remoção de quadro da entrada (por exemplo, quedas de quadro no decodificador).
Os quadros de referência passado e futuro são fornecidos nos membros da matriz pPastSurfaces e pFutureSurfaces em ordem temporal de quadros mais antigos para mais recentes continuamente. Por exemplo, a ordem dos elementos nas matrizes é conforme mostrado no exemplo a seguir:

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

InputSurface = T

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

Os quadros de entrada e referência alteram o local do local futuro para o local passado por meio do local atual à medida que os membros OutputIndex e InputFrameOrField incrementam. Por exemplo, a superfície de entrada é alterada como o incremento OutputIndex e InputFrameOrField quando o driver executa o seguinte processamento de vídeo:

  • Formato progressivo a uma taxa normal:

    OutputIndex = 0, 0, 0,...

    InputFrameOrField = 0, 1, 2,...

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

  • Formato entrelaçado a uma taxa 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 entrelaçado a meia taxa:

    OutputIndex = 0, 0, 0,...

    InputFrameOrField = 0, 2, 4,...

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

  • Formato entrelaçado a uma taxa personalizada de 4/5 (telecine inverso 3:2, 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, 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 entrelaçado com taxa personalizada de 4/15 (telecine inverso de 8:7, 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,... (observe que o quadro T+7 contém o 15º campo)

O exemplo de pseudocódigo a seguir mostra a interação entre o aplicativo (APP) e o driver (DRV) ao executar o IvTC (Inverse Telecine) em 3:2 pull-down, 30 quadros (60 campos) por segundo de conteúdo entrelaçado:
-[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 com suporte DXVAHDDDI_STREAM_DATA tem suporte a partir do sistema operacional Windows 7.
Cabeçalho d3dumddi.h (inclua D3dumddi.h)

Confira também

DXVAHDDDI_OUTPUT_RATE

DXVAHDDDI_STREAM_STATE_FRAME_FORMAT_DATA

DXVAHDDDI_STREAM_STATE_OUTPUT_RATE_DATA

DXVAHDDDI_SURFACE

DXVAHDDDI_VPCAPS

DXVAHDDDI_VPDEVCAPS

VideoProcessBltHD