视频质量管理

本主题介绍对 Windows 7 中视频管道的一些改进,适用于 Microsoft Media Foundation 和 Microsoft DirectShow。

在完美的世界中,无论视频分辨率或 CPU/GPU 负载如何,视频都不会出现故障。 当然,在现实中,视频管道必须能够处理有限的硬件资源,并且必须根据系统环境自适应定制播放。 视频质量管理的目标是:

  • 减少 (丢帧或延迟帧) 故障。
  • 减少内存使用量,尤其是在 GPU 中。
  • 降低能耗,尤其是在使用电池供电的笔记本电脑中。
  • 在给定资源约束的情况下,尽可能获得最佳图像质量。
  • 使视频与音频保持同步。

其中一些目标是相反的,特别是在低端系统上。 通常,速度和质量之间存在权衡。 与视觉质量的适度降低相比,故障更令人反感。 能耗的相对重要性因环境而异:在使用电池电源运行的笔记本电脑中,这一点非常重要。

在 Windows 7 中,增强的视频呈现器 (EVR) 对视频质量管理具有更好的支持。 Media Foundation 管道和 DirectShow 管道都已更新,以利用这些功能。 使用双管齐下的方法:

  • 在播放开始之前,管道可以根据用户的电源管理设置和有关硬件的信息执行静态优化。
  • 播放开始后,管道可以根据运行时性能应用动态优化。

媒体基础中的质量管理

若要启用静态优化,请在解析拓扑之前在部分拓扑上设置 MF_TOPOLOGY_STATIC_PLAYBACK_OPTIMIZATIONS 属性。 拓扑加载程序在其 IMFTopoLoader::Load 方法中查询此属性。

如果启用静态优化,则应在拓扑上设置另外两个属性:

Attribute 说明
MF_TOPOLOGY_PLAYBACK_MAX_DIMS
指定视频播放窗口的最大大小。
MF_TOPOLOGY_PLAYBACK_FRAMERATE
指定监视器刷新率。

 

这两个属性可帮助管道计算最有效的质量管理设置。

动态优化由质量经理执行。 无需执行任何操作即可启用质量经理;它将自动启用。 质量管理器存在于 Windows Vista 中;在 Windows 7 中,EVR 可以更好地响应来自质量管理器的消息。

DirectShow 中的质量管理

DirectShow 支持对 DVD 播放进行静态和动态优化。 若要在 DVD 播放应用程序中启用这些优化,请在 IDvdGraphBuilder::RenderDvdVideoVolume 方法的 dwFlags 参数中设置以下标志:

标志 描述
AM_DVD_ADAPT_GRAPH 启用静态优化。
AM_DVD_EVR_QOS 启用动态优化。

 

其他 DirectShow 应用程序可以通过直接在 EVR 筛选器上调用 IEVRFilterConfigEx::SetConfigPrefs 方法来启用动态优化。 指定 EVRFilterConfigPrefs_EnableQoS 标志。

注意

DirectShow 中的静态优化仅限于 DVD 播放。

 

EVR 中的质量管理

EVR 支持一些用于质量管理的新配置标志。 如果启用前面所述的质量管理优化,则无需直接设置这些标志。 但是,这些记录适用于需要对 EVR 进行更精细控制的应用程序。

通过调用 IMFVideoMixerControl2::SetMixingPrefs 方法在 EVR 混音器上设置以下标志:

Flags 说明
  • MFVideoMixPrefs_ForceHalfInterlace
  • MFVideoMixPrefs_AllowDropToHalfInterlace
跳过每个交错帧的第二个字段。
  • MFVideoMixPrefs_AllowDropToBob
  • MFVideoMixPrefs_ForceBob
使用 bob 去隔行扫描,即使驱动程序支持更高质量的去交错模式。

 

通过调用 IMFVideoDisplayControl::SetRenderingPrefs 方法,在 EVR 演示者上设置以下标志:

Flags 说明
  • MFVideoRenderPrefs_ForceOutputThrottling
  • MFVideoRenderPrefs_AllowOutputThrottling
限制输出以匹配 GPU 带宽。
  • MFVideoRenderPrefs_ForceBatching
  • MFVideoRenderPrefs_AllowBatching
Batch Direct3D Present 调用。 这种优化使系统能够更频繁地进入空闲状态,从而减少功耗。
  • MFVideoRenderPrefs_ForceScaling
  • MFVideoRenderPrefs_AllowScaling
使用小于输出矩形的矩形执行视频混合。 将结果缩放为正确的输出大小。

 

此外,EVR 媒体接收器支持与以下每个标志对应的配置属性:

在开始播放之前,可以直接在 EVR 媒体接收器上设置这些属性,作为调用 IMFVideoMixerControl2IMFVideoDisplayControl 方法的替代方法。 若要设置这些属性,请查询 IMFAttributes 的 EVR 媒体接收器。

媒体会话