视频质量管理
本主题介绍对 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 | 说明 |
---|---|
|
跳过每个交错帧的第二个字段。 |
|
使用 bob 去隔行扫描,即使驱动程序支持更高质量的去交错模式。 |
通过调用 IMFVideoDisplayControl::SetRenderingPrefs 方法,在 EVR 演示者上设置以下标志:
Flags | 说明 |
---|---|
|
限制输出以匹配 GPU 带宽。 |
|
Batch Direct3D Present 调用。 这种优化使系统能够更频繁地进入空闲状态,从而减少功耗。 |
|
使用小于输出矩形的矩形执行视频混合。 将结果缩放为正确的输出大小。 |
此外,EVR 媒体接收器支持与以下每个标志对应的配置属性:
- EVRConfig_AllowBatching
- EVRConfig_AllowDropToBob
- EVRConfig_AllowDropToHalfInterlace
- EVRConfig_AllowScaling
- EVRConfig_AllowDropToThrottle
- EVRConfig_ForceBatching
- EVRConfig_ForceBob
- EVRConfig_ForceHalfInterlace
- EVRConfig_ForceScaling
- EVRConfig_ForceThrottle
在开始播放之前,可以直接在 EVR 媒体接收器上设置这些属性,作为调用 IMFVideoMixerControl2 和 IMFVideoDisplayControl 方法的替代方法。 若要设置这些属性,请查询 IMFAttributes 的 EVR 媒体接收器。
相关主题