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
过去的引用帧数。 此数字不能大于驱动程序在 PastFramesDXVAHDDDI_VPCAPS 结构的成员中设置的数字。
[in] FutureFrames
将来的引用帧数。 此数字不能超过驱动程序在 FutureFramesDXVAHDDDI_VPCAPS 结构的成员中设置的数字。
[in] pPastSurfaces
描述过去引用图面的 DXVAHDDDI_SURFACE 结构的数组。
[in] InputSurface
描述输入图面的 DXVAHDDDI_SURFACE 结构。
[in] pFutureSurfaces
描述将来引用图面的 DXVAHDDDI_SURFACE 结构的数组。
言论
驱动程序必须分配 pPastSurfaces、InputSurface以及 pFutureSurfaces 成员在池类型中指定的图面,驱动程序在 DXVAHDDDI_VPDEVCAPS 结构的 InputPool 成员中设置,并使用以下图面类型之一:否则,驱动程序的 VideoProcessBltHD 函数将返回错误。
- 使用DXVAHD_SURFACE_TYPE_VIDEO_INPUT或DXVAHD_SURFACE_TYPE_VIDEO_INPUT_PRIVATE类型创建的视频图面。
- 使用DXVA2_VideoDecodeRenderTarget类型创建的解码呈现目标图面。
- 屏幕外纯面。
-
正常和半速率的渐进式格式:
OutputIndex = 0,0,...
-
2/1 自定义速率的渐进式格式(双帧速率转换,OutputFrames=2):
OutputIndex = 0、1、0、1,...
-
按正常速率交错格式:
OutputIndex = 0、1、0、1,...(0:第一个字段,1:第二个字段)
-
以半速率交错格式:
OutputIndex = 0,0,...(例如,第一个和第二个字段被混合到一个帧)
-
以 4/5 自定义速率交错(3:2 反转电视,OutputFrames=4):
OutputIndex = 0、1、2、3、0、1、2、3,...(A、1:B、2:C、3:D 电影帧)
-
按正常速率进行渐进式格式和交错格式:
InputFrameOrField = 0、1、2,...
-
渐进式格式和交错格式的速率为半:
InputFrameOrField = 0、2、4,...
-
以 4/5 自定义速率交错格式(3:2 反向远程传送、OutputFrames=4 和 InputFrameOrField=10):
InputFrameOrField = 0、0、0、0、10、10、10、10、20、20、20,...
-
以 4/15 自定义速率交错格式(8:7 反转电视、OutputFrames=2 和 InputFrameOrField=15):
InputFrameOrField = 0、0、15、15、30、30,...
但是,如果驱动程序在正常和半速率之间切换(来自 DXVAHDDDI_OUTPUT_RATE 枚举的值),驱动程序不应要求重置。
如果 OutputIndex 和 InputFrameOrField 成员在下一个进程时间保持不变,驱动程序将确定帧在流处理中保持不变(例如已暂停)。 因此,驱动程序可以使用缓存的数据优化帧。
驱动程序应回退到不太密集的视频处理方法,因为提供的参考帧更少。 如果未提供引用示例,驱动程序应回退到 Bob 去交错。
与驱动程序请求的引用帧相比,应用程序可以提供的过去和将来的引用帧更少。 例如,应用程序可以在以下条件下提供较少的引用帧:
- 在帧序列的开头或末尾。
- 渐进式和交错之间的转换。
- 正常或半速率渐进式流。
- 不需要高质量反交错的子视频流。
- 同时限制从帧删除中恢复的引用帧并保持帧速率。
- 从输入中删除帧(例如解码器中的帧删除)。
pPastSurfaces [] = {..., T-3, T-2, T-1}
InputSurface = T
pFutureSurfaces [] = {T+1, T+2, T+3,...}
输入和引用帧通过当前位置将位置从将来的位置更改为过去的位置,OutputIndex,InputFrameOrField 成员递增。 例如,当驱动程序执行以下视频处理时,输入图面随着 OutputIndex 而更改,InputFrameOrField 增量:
-
按正常速率渐进式格式:
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 反向远程传送、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,...
InputSurface = T、T、T、T+5、T+5、T+5、T+5、T+10、T+10、T+10、T+10,...
-
以 4/15 自定义速率交错格式(8:7 反转电视、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 个字段)
-[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_STREAM_STATE_FRAME_FORMAT_DATA