非平方混合
[与此页面关联的功能 DirectShow 是一项旧功能。 它已被 MediaPlayer、 IMFMediaEngine 和 媒体基金会中的音频/视频捕获取代。 这些功能已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能使用 MediaPlayer、 IMFMediaEngine 和 Media Foundation 中的音频/视频捕获 ,而不是 DirectShow。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]
本主题适用于 Windows XP Service Pack 2 或更高版本。
当 VMR-9 混合两个或多个流时,有两个点可以进行缩放:当混音器复合输入流时,当分配器呈现复合图像时。
以前版本的 VMR-9 始终使用方形 (1:1) 像素纵横比 (PAR) 复合输入流,即使只有一个视频流也是如此。 如果输入流具有非平方像素,则会导致不必要的缩放操作。 当然,应尽可能避免缩放,因为这会降低最终图像质量。
从 Windows XP Service Pack 2 开始,VMR-9 支持两种不同的方法来避免双重缩放问题:
- 实现自定义分配器表示器并支持 IVMRSurfaceAllocatorEx9 接口。
- 使用非方形混合模式。
本部分介绍非正方形混合模式。 应用程序可以结合使用这两种方法。
非正方形混合的工作原理
在非平方混合模式下,VMR-9 选择一个输入流为目标大小和 PAR。 VMR 的混音器不会从该流或具有相同图像大小和 PAR 的任何其他流缩放视频。 具有不同大小或纵横比的流会进行缩放以匹配目标 PAR,并按字母框显示以适应最终输出图像大小。
流的选择取决于当前的混合模式:
- YUV 混合模式仅限于引脚 0 上的一个视频流。 (其他引脚可能具有子图片或关闭描述文字 streams.) 因此,VMR-9 始终为目标映像大小和 PAR 选择引脚 0。
- 在 RGB 混合模式下,VMR 选择图像大小最大的流。 如果有多个,则选择 z 顺序最高的一个;如果仍有平局,则选择引脚编号最低的流。
操作示例
示例 1。 流 0 为 720 x 480 像素,图片纵横比为 16:9。 流 1 是 640 x 480 像素,图片纵横比为 4:3。
在此示例中,流 0 具有最大的图像大小,因此 VMR 选择此流,而不考虑 RGB 混合模式或 YUB 混合模式。 PAR 为 32:27 (16:9 / 720:480) ,这意味着图像必须按此比例水平拉伸才能生成正确的 16:9 图片纵横比。
为了匹配目标 PAR,VMR 混音器按逆比 (27:32) 缩放流 1,生成 540 x 480 的图像。 然后将两个流组合到一个图面上。 若要正确显示生成的图像,分配器演示者必须水平拉伸图像以适应 16:9 的图片纵横比。
示例 2。 流 0 为 720 x 480 像素,图片纵横比为 16:9。 流 1 是 1024 x 768 像素,图片纵横比为 4:3。
如果 VMR-9 使用 YUV 混合模式,则始终选择流 0。 因此,它将流拉伸 1 到 540 x 480 像素,以匹配流 0 的 PAR。
如果 VMR-9 使用 RGB 混合模式,它将选择流 1 作为目标,因为该流具有最大的图像大小。 它将流 0 拉伸到 1024 x 576 像素的图像大小。 请注意,在这种情况下,复合图像的 PAR 为 1:1,因此分配器表示器不必更正非平方像素。 (它可能仍需要拉伸视频以考虑目标 rectangle.)
使用非正方形混合模式
如果满足以下任一条件,则建议使用非方形混合模式:
- 应用程序永远不会向 VMR-9 发送多个视频流。
- 应用程序呈现 DVD、电视或 ms-dvr 文件。 在这种情况下,如果图形硬件支持,则还应使用 YUV 混合模式。
如果应用程序混合了可能具有不同图像大小或像素纵横比的多个视频流,则建议使用默认的方形混合模式。
若要配置非正方形混合模式,必须停止筛选器图,并且 VMR-9 上的所有输入引脚都断开连接。 然后使用 MixerPref9_NonSquareMixing 标志调用 IVMRMixerControl9::SetMixingPrefs :
DWORD dwPrefs;
pMixControl->GetMixingPrefs(&dwPrefs);
dwPrefs |= MixerPref9_NonSquareMixing;
pMixControl->SetMixingPrefs(dwPrefs);
注意
如果将 MixerPref9_NonSquareMixing 标志与 MixerPref9_ARAdjustXorY 标志组合在一起,VMR-9 将忽略MixerPref9_ARAdjustXorY标志。
如果应用程序使用具有非正方形混合模式的自定义分配器表示器,请注意复合图像可能具有非方形 PAR。 分配器表示器必须将图像缩放为正方形 (1:1) PAR。
静态位图
如果使用 IVMRMixerBitmap9 接口将静态位图混合到视频中,则出于 VMR 混合模式的目的,应将位图视为第二个视频流。
VMR 将位图视为与目标具有相同的 PAR。 它不会缩放位图以根据目标的像素纵横比进行调整。 在 VMR 的默认配置中,目标具有与大多数位图匹配的 1:1 PAR。 在非平方混合模式下,目标可能具有非平方像素。 为了确保正确显示位图,应用程序应提供其 PAR 与目标 PAR 匹配的图像。
相关主题