运动补偿

运动补偿是压缩数字视频解码过程的重要阶段的术语。 许多图形加速器设备提供某种类型的加速功能来支持压缩的视频解码。 由于运动补偿过程是视频解码中最常支持的一部分,因此支持压缩视频解码的设备驱动程序接口称为运动补偿 DDI。 除了运动补偿之外,某些设备还可以执行 IDCT (反向离散余弦变换) 以及软件视频解码器可用于加速解码过程的其他硬件功能。 运动补偿 DDI 足够灵活,可以处理提供这些其他功能的设备。

软件 MPEG 解码器的输入数据已明确定义。 如果解码器专为 MPEG-2 设计,则输入采用 MPEG-2 格式。 解码器的输出也已明确定义。 它是各种格式的未压缩帧。 但是,软件解码器和显示设备之间的临时格式定义不明确,许多设备需要自己的专有数据格式。 因此,运动补偿设备驱动程序接口很灵活,临时格式描述为 GUID。 显示驱动程序报告表示其支持的功能的 GUID,软件解码器选择最符合其要求的 GUID。

若要启用运动补偿功能,驱动程序必须执行以下步骤:

  • 实现 DdGetDriverInfo 函数,并将 DD_HALINFO 结构的 GetDriverInfo 成员设置为在调用 DrvGetDirectDrawInfo 时指向此函数。 驱动程序的 DdGetDriverInfo 函数必须分析GUID_MotionCompCallbacks GUID。

  • 使用 GUID_MotionCompCallbacks GUID 调用 DdGetDriverInfo 函数时,使用相应的驱动程序回调指针和回调类型标志填充DD_MOTIONCOMPCALLBACKS结构。 然后,驱动程序必须将此初始化结构复制到 microsoft DirectDraw 分配的缓冲区中,DD_GETDRIVERINFODATA 结构中的 lpvData 成员指向该缓冲区,并返回写入到 dwActualSize 缓冲区中的字节数。