VMR 中的坐标映射

[与此页面关联的功能 DirectShow 是旧版功能。 它已被 MediaPlayerIMFMediaEngineMedia Foundation 中的音频/视频捕获所取代。 这些功能已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能在 Media Foundation 中使用 MediaPlayerIMFMediaEngine音频/视频捕获 ,而不是 DirectShow。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]

本部分介绍在 VMR 映射到最终输出映像之前应用于源映像的五种转换。

  1. 转换 T (Src) 将源矩形映射到目标矩形。 这些由媒体类型中 VIDEOINFOHEADER 或 VIDEOINFOHEADER2 结构的 rcSourcercTarget 成员指定。 此映射在源映像传递到 VMR 时对其进行预处理。
  2. 转换 T (标志) 执行媒体示例中标志指定的任何图像操作。 其中包括垂直转换和缩放等转换,以适应 bob 交错标志。 交错转换会将图像高度加倍,如果图像位于奇数字段中,可能会将图像平移视频线的一半。
  3. 转换 T (AR) 根据图像纵横比将图像调整为方形像素。 对于 VIDEOINFOHEADER 媒体类型,纵横比由图像大小决定。 对于 VIDEOINFOHEADER2 类型,纵横比由 dwPictAspectRatioXdwPictAspectRatioY 字段决定,除非设置了AMCONTROL_PAD_TO_16x9或AMCONTROL_PAD_TO_4x3标志。 此转换假定监视器显示设置与监视器的物理纵横比匹配。 例如,如果用户的监视器纵横比为 4 x 3,但将显示器设置为 1280 x 768 像素 (5 x 3) ,则图像将没有正确的纵横比。
  4. 转换 T (Mix) 转换使用 IVMRMixerControl 方法中指定的规范化矩形将图像定位到目标图像中。 规范化矩形使应用程序能够组织源流相对于彼此的定位和缩放方式。 VMR 通过计算所有源图像的最大维度并将每个图像居中置于整体边界矩形内来计算目标图像。 边界矩形的角将范围 (0,0) 分配给 (1,1) 。 边界矩形在图形运行前固定,即使添加或删除流,该矩形也保持不变。 每个流的目标矩形可以位于 (0,0) 范围之外, (1,1) ,并且仍然有效。
  5. 最后,可以通过映射 T (Dst) 转换混合映像的一部分,该映射由 VMR 上的 IBasicVideo 接口中的源矩形和目标矩形指定。 如果替换了Allocator-Presenter并且未使用 IBasicVideo 接口,则应用程序必须实现 IVMRWindowlessControl 接口,并将坐标映射回 2D 线性空间。 返回到 DVD 导航器的鼠标坐标也必须在此空间中。 例如,如果应用程序将视频呈现到旋转的多维数据集上,它们将报告无窗口控件的整个显示,并返回相对于显示器的鼠标坐标。

从源数据到最终呈现器的总体图像转换是:

T = T (Src) * T (标志) T (Ar) T (Mix) * T (Dst) *

其中 * 表示可以在该阶段将图像剪裁到目标图像。 请注意,这些都是仿射转换,因此 VMR 可以将它们合并为单个转换。

转换的反数为:

反向转换

系数 T (Src) T (标志) T (Ar) 相对于源分辨率。 在因子 T (Mix) 中,规范化的源矩形相对于经过纵横校正的图像。 规范化目标矩形相对于输出分辨率。 下图显示了这些关系。

图像转换步骤

为 DirectShow 筛选器开发人员使用 VMR