从 Windows 7 开始, Windows Media Foundation 将基于 AVStream 的媒体组件表示为用户模式媒体基础转换 (MRT) 。
通过使用此功能,供应商可以将基于硬件的解码器、编码器和视频处理器呈现为 MMFT,进而可以在应用程序级别进行操作。
AVStream 模型在 Windows 7 中保持不变,只需向微型驱动程序添加少量内容即可启用此功能。
转码拓扑如下图所示:
为了获得最佳性能,图表底部行中显示的媒体处理应在专用硬件中进行。 在此方案中,专用转码硬件称为安全硬件编码器解码器 (SHED) 。 SHED 可以打包为主板的插件模块,也可以打包为显示适配器上的集成功能。
Windows 7 仍支持基于软件的转码。 但是,由于系统在专用硬件而不是 CPU 上执行转码工作,因此与基于软件的解决方案相比,基于 SHED 的解决方案可显著改善用户体验。
如上图所示,用户模式客户端可以使用在每个 MFT 上公开的 IMFTransform 接口访问用户模式转换。 IMFTransform 在 Vista 和更高版本的 Windows 中可用,但将基于硬件的媒体处理公开给用户模式应用程序的机制仅从 Windows 7 开始可用。
系统提供的设备代理(或 Devproxy)模块在 DirectShow 流式处理模型中充当与 KSProxy 相同的角色。 Devproxy 代理内核模式下 Ks.sys 与用户模式下的 MFT 组件之间的通信。
生成的包装硬件媒体处理函数称为设备代理 MFT。 若要利用此机制,AVStream 微型驱动程序应执行以下操作:
将转换函数公开为 AVStream 微型驱动程序的单个 KS 筛选器。 例如,如果设备具有解码、编码和视频处理功能,则应将这些函数表示为三个不同的 KS 筛选器。
编码器:用于从未压缩格式转换为压缩格式。
解码器:用于从压缩格式转换为未压缩格式,其中必须包含 NV12。
视频处理器:用于执行缩放、隔行/反交错和格式转换。 请勿在解码器或编码器筛选器中包含视频处理支持。
Microsoft 强烈建议供应商提供基于硬件的缩放支持。 但是,如果选择不提供基于硬件的缩放支持,则可以使用系统提供的视频处理 MFT 以降低的性能级别执行缩放操作。 如果未提供基于硬件的缩放支持,Media Foundation 拓扑生成器会自动将系统提供的缩放 MFT 插入拓扑。
在 Windows 7 及更高版本的 Windows 中提供的以下 KS 类别之一下注册其媒体处理 KS 筛选器:
此外,还定义了以下类别以用于其他转码方案:
然后,媒体基础应用程序可以使用 MFTEnumEx 函数,使用前面提到的类别枚举注册为 MMT 的设备。