提供自定义视频大小调整器

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

[此 API 不受支持,将来可能会更改或不可用。]

注意

此功能需要 DirectX 9.0 或更高版本。

 

当 DirectShow 编辑服务 (DES) 调整视频源剪辑的大小时,默认行为是 StretchBlt,这是快速的,但不抗锯齿。 可以通过将自定义调整大小器实现为 DirectShow 转换筛选器来更改大小调整行为。 筛选器必须公开 IResize 接口,使 DES 能够指定输入和输出视频大小。 有关编写转换筛选器的信息,请参阅 编写转换筛选器。 建议将 CTransformFilter 基类作为起点。 实现筛选器时,请注意以下事项:

  • 支持筛选器上的 IResize 接口 (而不是引脚) 。
  • 筛选器应仅接受 VIDEOINFOHEADER 格式 (FORMAT_VideoInfo) 。 拒绝其他格式类型。
  • DES 中的视频格式可以是任何未压缩的 RGB 类型,包括具有 alpha (MEDIASUBTYPE_ARGB32) 的 32 位 RGB。 筛选器可以安全地拒绝 具有 biHeight< 0 的格式。
  • 在呈现引擎连接筛选器的输出引脚之前,它会调用 IResize::p ut_MediaType 来设置输出类型。 它还可能调用 IResize::p ut_Size 来调整输出大小。 它可以在连接输出引脚之前,以任意顺序、任意次数调用这两种方法。
  • 呈现引擎连接输出引脚后,可能会再次调用 put_Size 。 调整器筛选器应使用新大小重新连接其输出引脚。
  • 在筛选器的 CTransformFilter::Transform 方法中,将输入视频拉伸为输出大小。
  • 筛选器绝不应在输出样本上设置不连续标志,或将媒体类型附加到输出示例。
  • 若要将筛选器的状态保存在 GraphEdit (.grf) 文件中,请实现 IPersistStream 接口。 (这是可选的,但对 testing.)

若要使用调整器筛选器,必须在用户的系统上将筛选器注册为 COM 对象。 在应用程序呈现视频项目之前,请查询呈现引擎以获取 IRenderEngine2 接口,并使用调整器筛选器的 CLSID 调用 IRenderEngine2::SetResizerGUID

呈现项目