PDD_VPORTCB_GETBANDWIDTH回调函数 (ddrawint.h)

DdVideoPortGetBandwidth 回调函数基于指定的 VPE 对象输出格式报告设备的帧缓冲区内存的带宽限制。

语法

PDD_VPORTCB_GETBANDWIDTH PddVportcbGetbandwidth;

DWORD PddVportcbGetbandwidth(
  PDD_GETVPORTBANDWIDTHDATA unnamedParam1
)
{...}

参数

unnamedParam1

指向 DD_GETVPORTBANDWIDTHDATA 结构,该结构包含驱动程序返回带宽数据所需的信息。

返回值

DdVideoPortGetBandwidth 返回以下回调代码之一:

备注

DdVideoPortGetBandwidth 必须在支持 VPE 的 DirectDraw 驱动程序中实现。

DdVideoPortGetBandwidth 告知客户端任何指定格式的带宽要求,帮助他们选择格式并更好地了解其限制。 驱动程序只能在创建 VPE 对象后提供准确的带宽信息,因为驱动程序需要 DDVIDEOPORTDESC 结构中的信息。

通常调用 DdVideoPortGetBandwidth 两次,以获取指定硬件视频端口的带宽参数。 根据 lpGetVideoPortBandwidth DD_GETVPORTBANDWIDTHDATA 结构的 dwFlags 成员,驱动程序应执行以下操作:

  • 当标志DDVPB_TYPE时,驱动程序应通过在 DDVIDEOPORTBANDWIDTH 结构的 dwCaps 成员中设置以下标志之一来指示设备的类型,lpBandwidth 成员DD_GETVPORTBANDWIDTHDATA指向该结构:
    • DDVPBCAPS_DESTINATION指示设备将按照覆盖拉伸因子描述其带宽功能;也就是说,驱动程序在下一次调用 DdVideoPortGetBandwidth 时返回的带宽信息将引用目标覆盖的大小。 此标志最能描述同时从主图面和覆盖图面刷新的硬件。 随着目标视频的拉伸,硬件有更多的时间从覆盖图面读取像素,从而减少所需的内存带宽。
    • DDVPBCAPS_SOURCE指示设备将按照所需的源覆盖大小来描述其带宽功能;也就是说,下一次调用 DdVideoPortGetBandwidth 返回的带宽信息是指源覆盖的大小。 此标志最能描述将覆盖数据预提取到行缓冲区或大型 FIFO 的硬件。 此类硬件不需要额外的带宽,但要求源覆盖数据完全适合硬件支持的缓冲区/FIFO 大小。

    在返回之前,驱动程序还应设置 DDVIDEOPORTBANDWIDTH 结构的 dwSize 成员。

  • 当标志DDVPB_VIDEOPORT时,DD_GETVPORTBANDWIDTHDATA结构中的 dwWidthdwHeight 成员引用硬件视频端口将作为源覆盖写入帧缓冲区的视频数据的预缩放大小。 驱动程序应返回一个覆盖拉伸因子,设备可在其中显示 DDVIDEOPORTBANDWIDTH 结构的每个 dwOverlaydwColorkeydwYInterpAndColorkey 成员中的覆盖(乘以 1000)。 例如,值为 2000 表示设备在显示覆盖层时具有将覆盖拉伸到源指定大小的两倍的带宽。 值为 1000 表示无需对指定的数据大小执行拉伸操作。 值为 500 表示设备有足够的带宽将覆盖目标缩小一半。 驱动程序必须在 dwOverlay 中设置有效值,但可以在它不支持的其他三个成员中的任何一个中返回 -1。

    DDVPB_VIDEOPORT标志假定设备最好由DDVPBCAPS_DESTINATION标志描述。 如果不是这种情况,驱动程序应使调用失败。

  • 设置DDVPB_OVERLAY标志后,DD_GETVPORTBANDWIDTHDATA结构中的 dwWidthdwHeight 成员将引用源覆盖大小。 驱动程序应返回此覆盖大小的百分比(乘以 1000),这样它就可以支持在 DDVIDEOPORTBANDWIDTH 结构的每个 dwOverlaydwColorkeydwYInterpAndColorkey 成员中显示覆盖。 例如,值为 750 表示设备需要将指定的源覆盖缩小到其原始大小的 75%,以便设备成功显示它。 值为 1000 表示不需要收缩。 此类设备的驱动程序通常不会返回大于 1000 的值。 驱动程序必须在 dwOverlay 中设置一个有效值,但如果其他三个成员不支持颜色键和/或 Y 轴内插,则可以在任意三个成员中返回 0。

    DDVPB_OVERLAY标志假定使用 DDVPBCAPS_SOURCE 标志最好地描述设备。 如果不是这种情况,驱动程序应使调用失败。

要求

   
目标平台 桌面
标头 ddrawint.h (包括 Winddi.h)

另请参阅

DDVIDEOPORTBANDWIDTH

DDVIDEOPORTDESC

DD_GETVPORTBANDWIDTHDATA

DdVideoPortCreate