本主题介绍对 Windows 7 中的视频管道的一些改进,适用于 Microsoft Media Foundation 和 Microsoft DirectShow。
在完美的世界中,无论视频分辨率或 CPU/GPU 负载如何,视频都不会出现故障。 当然,实际上,视频管道必须能够应对有限的硬件资源,并且必须自适应地定制对系统环境的播放。 视频质量控制的目标是:
- 减少故障(丢弃或延迟帧)。
- 减少内存使用量,尤其是在 GPU 中。
- 降低能耗,尤其是在电池电量上运行的笔记本电脑。
- 根据资源约束,尽可能获得最佳的图像质量。
- 使视频与音频保持同步。
其中一些目标是相反的,特别是在低端系统上。 一般情况下,速度和质量之间存在权衡。 故障比视觉质量的适度减少更令人反感。 能耗的相对重要性因环境而异:在电池电源上运行的笔记本电脑中,它非常重要。
在 Windows 7 中,增强的视频呈现器(EVR)对视频质量控制有更好的支持。 Media Foundation 管道和 DirectShow 管道都已更新,以利用这些功能。 使用双管齐下的方法:
- 在播放开始之前,管道可以根据用户的电源管理设置和硬件信息执行静态优化。
- 播放开始后,管道可以根据运行时性能应用动态优化。
媒体基础中的质量控制
若要启用静态优化,在解析拓扑之前,在部分拓扑上设置 MF_TOPOLOGY_STATIC_PLAYBACK_OPTIMIZATIONS 属性。 拓扑加载程序在其 IMFTopoLoader::Load 方法中查询此属性。
如果启用静态优化,则应在拓扑上设置另外两个属性:
属性 | 描述 |
---|---|
MF_TOPOLOGY_PLAYBACK_MAX_DIMS |
指定视频播放窗口的最大大小。 |
MF_TOPOLOGY_PLAYBACK_FRAMERATE |
指定监视器刷新速率。 |
这两个属性有助于管道计算质量控制的最有效设置。
动态优化由质量管理器执行。 无需执行任何作即可启用质量经理;它会自动启用。 质量管理器存在于 Windows Vista 中;在 Windows 7 中,EVR 可以更好地响应来自质量管理器的消息。
DirectShow 中的质量控制
DirectShow 支持 DVD 播放的静态和动态优化。 若要在 DVD 播放应用程序中启用这些优化,请设置 IDvdGraphBuilder::Render DvdVideoVolume 方法的 dwFlags 参数中的以下标志:
旗 | 描述 |
---|---|
AM_DVD_ADAPT_GRAPH | 启用静态优化。 |
AM_DVD_EVR_QOS | 启用动态优化。 |
其他 DirectShow 应用程序可以通过直接在 EVR 筛选器上调用 IEVRFilterConfigEx::SetConfigPrefs 方法来实现动态优化。 指定 EVRFilterConfigPrefs_EnableQoS 标志。
注意
DirectShow 中的静态优化仅限于 DVD 播放。
EVR 中的质量控制
EVR 支持一些用于质量控制的新配置标志。 如果启用前面所述的质量控制优化,则无需直接设置这些标志。 但是,这些记录适用于希望对 EVR 进行更精细控制的应用程序。
通过调用 IMFVideoMixerControl2::SetMixingPrefs 方法在 EVR 混音器上设置以下标志:
标志 | 描述 |
---|---|
|
跳过每个交错帧的第二个字段。 |
|
使用 bob 去交错,即使驱动程序支持更高质量的反交错模式。 |
通过调用 IMFVideoDisplayControl::SetRenderingPrefs 方法,在 EVR 演示者上设置以下标志:
标志 | 描述 |
---|---|
|
限制输出以匹配 GPU 带宽。 |
|
Batch Direct3D 演示调用。 这种优化使系统能够更频繁地进入空闲状态,从而减少能耗。 |
|
使用小于输出矩形的矩形执行视频混合。 将结果缩放为正确的输出大小。 |
此外,EVR 媒体接收器还支持与以下每个标志对应的配置属性:
- EVRConfig_AllowBatching
- EVRConfig_AllowDropToBob
- EVRConfig_AllowDropToHalfInterlace
- EVRConfig_AllowScaling
- EVRConfig_AllowDropToThrottle
- EVRConfig_ForceBatching
- EVRConfig_ForceBob
- EVRConfig_ForceHalfInterlace
- EVRConfig_ForceScaling
- EVRConfig_ForceThrottle
在播放开始之前,可以直接在 EVR 媒体接收器上设置这些属性,作为调用 IMFVideoMixerControl2 和 IMFVideoDisplayControl 方法的替代方法。 若要设置这些属性,请查询 EVR 媒体接收器 IMFAttributes。
相关主题