DXVAHDDDI_STREAM_DATA 结构 (d3dumddi.h)

DXVAHDDDI_STREAM_DATA结构描述已处理的输入流。

语法

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;

成员

[in] Enable

一个布尔值,指定是否启用输入流。 运行时启用的输入流数不能超过驱动程序在 DXVAHDDDI_VPDEVCAPS 结构的 MaxStreamStates 成员中设置的数字。

[in] OutputIndex

构成的输出帧的从零开始的循环帧索引号。

[in] InputFrameOrField

已处理的输入帧或字段的从零开始的帧编号。

[in] PastFrames

过去引用帧的数目。 此数字不得大于驱动程序在 DXVAHDDDI_VPCAPS 结构的 PastFrames 成员中设置 的数字

[in] FutureFrames

将来的参考帧数。 此数字不能超过驱动程序在 DXVAHDDDI_VPCAPS 结构的 FutureFrames 成员中设置 的数字

[in] pPastSurfaces

描述过去引用图面的 DXVAHDDDI_SURFACE 结构的数组。

[in] InputSurface

描述输入图面的 DXVAHDDDI_SURFACE 结构。

[in] pFutureSurfaces

描述未来参考图面 的DXVAHDDDI_SURFACE 结构的数组。

注解

驱动程序必须分配 pPastSurfacesInputSurfacepFutureSurfaces 成员在池类型中指定的图面,驱动程序必须在DXVAHDDDI_VPDEVCAPS结构的 InputPool 成员中设置该图面,并使用以下图面类型之一:否则,驱动程序的 VideoProcessBltHD 函数将返回错误。

  • 使用DXVAHD_SURFACE_TYPE_VIDEO_INPUT或DXVAHD_SURFACE_TYPE_VIDEO_INPUT_PRIVATE类型创建的视频图面。
  • 使用 DXVA2_VideoDecodeRenderTarget 类型创建的解码呈现目标图面。
  • 屏幕外普通图面。
OutputIndex 成员是从零开始的循环数字,指示输出的帧索引号。 驱动程序使用此输出索引信息以特定模式或周期执行视频处理,尤其是在驱动程序执行去交错、帧速率转换和反向电视拍摄时。 例如,使用以下输出索引模式,驱动程序执行指示的视频处理:
  • 正常和半速率的渐进式格式:

    OutputIndex = 0, 0,...

  • 采用 2/1 自定义速率的渐进式格式 (双帧速率转换,OutputFrames=2) :

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

  • 按正常速率隔行扫描格式:

    OutputIndex = 0, 1, 0, 1,... (0: first field, 1: second field)

  • 半速率的交错格式:

    OutputIndex = 0, 0,... (例如,第一个和第二个字段混合到一个帧)

  • 以 4/5 自定义速率 (3:2 反向电视电影交错,OutputFrames=4) :

    OutputIndex = 0、1、2、3、0、1、2、3,... (0:A、1:B、2:C、3:D 电影帧)

InputFrameOrField 成员是从零开始的数字,指示输入图面的帧或字段编号。 例如,使用以下输入帧或字段编号,驱动程序可以执行指示的视频处理:
  • 按正常速率采用渐进式格式和交错格式:

    InputFrameOrField = 0、1、2,...

  • 渐进式格式和半速率的交错格式:

    InputFrameOrField = 0、2、4,...

  • 以 4/5 自定义速率 (3:2 反向 telecine、OutputFrames=4 和 InputFrameOrField=10 的交错格式) :

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

  • 以 4/15 自定义速率 (8:7 反向 telecine、OutputFrames=2 和 InputFrameOrField=15 的交错格式) :

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

当帧格式或输出速率发生更改时,应用程序应导致 OutputIndexInputFrameOrField 成员重置,以便驱动程序可以重置其内部处理状态。 有关更改帧格式或输出速率的详细信息,请参阅 DXVAHDDDI_STREAM_STATE_FRAME_FORMAT_DATADXVAHDDDI_STREAM_STATE_OUTPUT_RATE_DATA

但是,如果驱动程序在正常速率和半速率之间切换, (来自DXVAHDDDI_OUTPUT_RATE 枚举) 的值,则驱动程序不应要求重置。

如果 OutputIndexInputFrameOrField 成员在下一个处理时间保持不变,驱动程序将确定该帧保持不变 (例如,在流处理中暂停) 。 因此,驱动程序可以使用缓存的数据优化帧。

驱动程序应回退到不太密集的视频处理方法,因为提供的参考帧较少。 如果未提供参考样本,驱动程序应回退到 Bob 反交错。

与驱动程序请求的参考帧相比,应用程序提供的过去和将来的参考帧更少。 例如,在以下情况下,应用程序可以提供较少的参考帧:

  • 在帧序列的开头或末尾。
  • 渐进式和交错式之间的过渡。
  • 正常或半速率渐进式流。
  • 不需要高质量去隔行扫描的子视频流。
  • 在限制参考帧以从帧下降中恢复并保持帧速率。
  • 帧从输入 (例如,解码器) 中的帧下降。
pPastSurfacespFutureSurfaces 数组成员中,过去和将来的参考帧均按从旧帧到新帧的时态顺序连续提供。 例如,数组中元素的顺序如下例所示:

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

InputSurface = T

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

OutputIndexInputFrameOrField 成员递增时,输入和引用帧将位置从未来位置更改为过去的位置,然后从当前位置更改为当前位置。 例如,当驱动程序执行以下视频处理时,输入图面会随着 OutputIndexInputFrameOrField 的增量而变化:

  • 正常速率的渐进式格式:

    OutputIndex = 0, 0, 0,...

    InputFrameOrField = 0、1、2,...

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

  • 按正常速率隔行扫描格式:

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

  • 半速率的交错格式:

    OutputIndex = 0, 0, 0,...

    InputFrameOrField = 0、2、4,...

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

  • 以 4/5 自定义速率 (3:2 反向 telecine、OutputFrames=4 和 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、T+10,...

  • 以 4/15 自定义速率 (8:7 反向 telecine、OutputFrames=2 和 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,... (请注意,T+7 帧包含第 15 个字段)

以下伪代码示例演示应用程序 (APP) 与驱动程序 (DRV) 之间的交互,同时对每秒) 3:2 下拉、30 帧 (60 个字段) 执行反向 Telecine (IVTC:
-[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
    :

要求

要求
最低受支持的客户端 从 Windows 7 操作系统开始支持DXVAHDDDI_STREAM_DATA。
标头 d3dumddi.h (包括 D3dumddi.h)

另请参阅

DXVAHDDDI_OUTPUT_RATE

DXVAHDDDI_STREAM_STATE_FRAME_FORMAT_DATA

DXVAHDDDI_STREAM_STATE_OUTPUT_RATE_DATA

DXVAHDDDI_SURFACE

DXVAHDDDI_VPCAPS

DXVAHDDDI_VPDEVCAPS

VideoProcessBltHD