DXVA_DeinterlaceBobDeviceClass::D einterlaceBltEx 方法

示例 DeinterlaceBltEx 函数执行反隔行或帧速率转换,将无隔行或帧速率转换的视频与提供的视频子流相结合,并将组合输出写入目标图面。

语法

HRESULT DeinterlaceBltEx(
  [in] REFERENCE_TIME      rtTargetFrame,
  [in] LPRECT              lprcTargetRect,
  [in] DXVA_AYUVsample2    BackgroundColor,
  [in] DWORD               dwDestinationFormat,
  [in] DWORD               dwDestinationFlags,
  [in] LPDDSURFACE         lpDDSDstSurface,
  [in] LPDXVA_VideoSample2 lpDDSrcSurfaces,
  [in] DWORD               dwNumSurfaces,
  [in] FLOAT               fAlpha
);

参数

rtTargetFrame [in] 提供输出帧在输入帧序列中的位置。 如果执行纯去隔行扫描,则目标时间应与DXVA_VideoSample2结构中定义的 (rtStartrtEnd) /2) (rtStart+ 时间之一重合。

如果请求帧速率转换, rtTargetFrame 时间可能与样本的任何 rtStart 时间或中点时间不同。

lprcTargetRect [in] 提供指向 RECT 结构的指针,该结构描述 DeinterlaceBltEx 必须写入的目标图面中的位置。 驱动程序使用 lprcTargetRect 来确定要写入的像素。 请注意,输出图像仅限于 lprcTargetRect 处矩形中的像素。 也就是说,必须写入 lprcTargetRect 处矩形中的每个像素,并且不能修改 lprcTargetRect 处矩形外部的像素。

BackgroundColor [in] 提供一个 DXVA_AYUVsample2 结构,用于标识构成所有视频流和子流所依据的背景的颜色和不透明度级别。 对于 Microsoft Windows Server 2003 SP1 和 Windows XP SP2,不使用不透明度级别,驱动程序应忽略。

dwDestinationFormat [in] 为 在 lpDDSDstSurface 处的指针中指定的目标图面提供格式信息。 对于 Windows Server 2003 SP1 和 Windows XP SP2,此参数设置为 0。

dwDestinationFlags [in] 提供一组标志,这些标志指示当前目标图面与上一个目标图面的更改。 此参数是 DXVA_DestinationFlags 枚举类型中一个或多个标志的按位 OR。 可以使用这些标志来优化驱动程序代码。 换句话说,如果前一个目标图面未发生任何更改,则不需要代码在当前目标图面上执行操作。

lpDDSDstSurface [in] 提供指向目标图面的指针。 目标图面是位于视频内存中的非屏幕普通表面。 目标图面的像素格式在 DXVA_DeinterlaceCaps 结构的 d3dOutputFormat 成员中指定。 像素格式必须位于 YUV 颜色空间中。

lpDDSrcSurfaces [in] 提供指向DXVA_VideoSample2结构数组的指针,这些结构描述位块传输所需的视频源引用示例和子流样本。

dwNumSurfaces [in] 提供 lpDDSrcSurfaces 数组中的样本数。

fAlpha [in] 提供驱动程序应应用于输出目标图面图像的平面透明度值,该图像是背景色、视频流和视频子流的复合体。 对于 Windows Server 2003 SP1 和 Windows XP SP2,此值始终为 1.0F,表示整体图像不透明,并且不需要在整体图像上混合 alpha。

返回值

如果成功,则返回 0 (S_OK 或DD_OK) ;否则,将返回错误代码。 有关错误代码的完整列表,请参阅 ddraw.h

注解

DeinterlaceBltEx 函数执行去隔行或帧速率转换操作,同时将提供的视频子流与去隔行或帧速率转换的视频合并在一起。 然后 ,DeinterlaceBltEx 函数将输出写入目标图面。 请注意,可以使用渐进式视频示例调用 DeinterlaceBltEx ,在这种情况下,驱动程序不应执行去隔行操作。 驱动程序应将视频与提供的视频子流合并,并按照在 pDDDSrcSurfaces 参数中传递的数组中的 lprcTargetRectBackgroundColor 参数以及DXVA_VideoSample2结构的 rcSrcrcDst 成员指示转换每个流。

如果将需要多个引用流的去隔行模式与渐进式视频一起使用,则即使不需要这些帧来生成输出,这些帧仍会发送到驱动程序。 有关详细信息,请参阅 输入缓冲区顺序的示例 5。

对于 在 pDDSrcSurfaces 参数中传递的数组中的参考视频示例,样本的 DXVA_VideoSample2 结构的 rtStartrtEnd 成员指示样本的时态位置。 对于数组中的每个视频子流示例,每个样本的 DXVA_VideoSample2 结构的 rtStartrtEnd 成员将被清除为 0。

只能向驱动程序提供采用 AI44、IA44 和 AYUV FOURCC 像素格式的视频子流。 有关详细信息,请参阅 提供视频子流和目标图面

对于托盘化视频子流像素格式,每个视频子流的DXVA_VideoSample2结构的调色板成员包含一个由 16 个调色板条目组成的数组,驱动程序在组合子流示例时应使用这些项。 对于非pallet 化像素格式,调色板条目将被清除为零,可以忽略。

每个输入示例的 DXVA_VideoSample2 结构的 SampleFlags 成员包含一组标志,这些标志指示当前示例中与上一个示例的更改。 标志反映对样本的调色板、颜色数据、源矩形和目标矩形的更改。 可以使用这些标志来优化驱动程序代码。 换句话说,如果对上一个示例帧没有发生任何更改,则代码不需要对当前示例帧执行操作。

dwNumSurfaces 参数指示 lpDDSrcSurface 数组中的元素数。 视频引用示例首先位于 数组中,然后是 Z 顺序的视频子流。 有关详细信息,请参阅 输入缓冲区顺序。 驱动程序接收的视频子流数范围为 0 到 15。 调用 DeinterlaceBltEx 时,驱动程序通常会接收 0 或 1 个视频子流。 但是,必须实现驱动程序,以便它可以处理多个视频子流。

DeinterlaceBltEx 函数直接映射到对 DD_MOTIONCOMPCALLBACKS 结构的 RenderMoComp 成员的调用。 RenderMoComp 成员指向引用DD_RENDERMOCOMPDATA结构的显示驱动程序提供的函数。 DD_RENDERMOCOMPDATA结构填充如下。

成员 Value

dwNumBuffers

指示 lpBufferInfo 指向的数组中的条目数。 此数字为 1 加上源样本数。

lpBufferInfo

指向 DDMOCOMPBUFFERINFO 结构的数组,每个输入引用源示例或子流示例一个,一个用于目标示例。 目标示例是数组的第一个元素。

dwFunction

指示 dxva.h 中定义的DXVA_DeinterlaceBltExFnCode常量。

lpInputData

指向填充 DXVA_DeinterlaceBltEx 结构。

lpOutputData

设置为 NULL,当前未使用。

对于用于去隔行处理的 DirectX VA 设备,调用 RenderMoComp 指向的驱动程序提供的回调,而无需调用显示驱动程序提供的 BeginMoCompFrameEndMoCompFrame 函数。

要求

目标平台

桌面

版本

版本:仅 Windows Server 2003 SP1 及更高版本以及 Windows XP SP2 及更高版本。

另请参阅

DXVA_AYUVsample2

DXVA_DeinterlaceBltEx

DXVA_DeinterlaceCaps

DXVA_DestinationFlags

DXVA_VideoSample2

DDMOCOMPBUFFERINFO

DD_MOTIONCOMPCALLBACKS

DD_RENDERMOCOMPDATA