视频呈现器筛选器

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

视频呈现器筛选器是一种可靠的全用途视频呈现器。

注意

在 Windows XP 及更高版本上,默认视频呈现器是 视频混合呈现器筛选器 7 (VMR-7) 。 VMR-7 和视频呈现器都具有友好名称“视频呈现器”。在早期平台上,视频呈现器是默认呈现器。 请参阅 选择正确的呈现器

 

视频呈现器使用 DirectDraw 和覆盖图面(如果视频卡支持它们)。 Filter Graph 管理器公开 IVideoWindow 接口,使应用程序能够在视频呈现器上设置和检索属性。 对于较新的视频卡,视频呈现器支持全屏呈现。 否则,筛选器图形管理器会自动切换到 全屏呈现器 筛选器,以用于全屏模式。 有关详细信息,请参阅 IVideoWindow::p ut_FullScreenMode

  • ![重要提示]

    通常,此筛选器的视频窗口处理 Filter Graph 管理器创建的辅助角色线程上的消息。 Howerver,如果应用程序直接使用 CoCreateInstance 创建筛选器,则视频窗口将处理应用程序线程上的消息。 在这种情况下,应用程序线程必须具有消息循环,以便将消息调度到视频窗口。 此外,在最终 发布 调用视频呈现器之前,线程不得退出,这在 Filter Graph 管理器关闭时发生。 否则,应用程序可能会死锁。

     

Label
筛选器接口 IBaseFilterIBasicVideoIBasicVideo2IDirectDrawVideoIKsPropertySetIMediaPositionIMediaSeekingIQualityControlIQualPropIVideoWindow
输入引脚媒体类型 未压缩的视频格式。
输入引脚接口 IMemInputPinIOverlayIPinIPinConnectionIQualityControl
输出引脚媒体类型 不适用。
输出引脚接口 不适用。
筛选器 CLSID CLSID_VideoRenderer
属性页 CLSID 无属性页。
可执行文件 quartz.dll
优点 Windows XP 及更高版本: MERIT_UNLIKELY
筛选器类别 CLSID_LegacyAmFilterCategory

 

备注

在 Quartz.dll 的调试版本中,如果LOG_TRACE调试级别设置为 5 或更高,则视频呈现器会在视频窗口中显示每个帧的时间戳。 这些数字不会显示在 DLL 的零售版本中。 有关详细信息,请参阅 调试输出函数

以下说明适用于筛选器开发人员:

如果视频图形卡支持 YUV 覆盖图面,则视频呈现器接受 YUV 格式。 但是,当它首次连接到上游筛选器时,视频呈现器需要与当前监视器设置的颜色深度匹配的 RGB 格式。 例如,如果当前显示设置为 24 位颜色,则上游筛选器必须能够提供 24 位 RGB 视频。 当筛选器图切换到运行状态时,视频呈现器会协商对相应 YUV 颜色空间进行动态格式更改。

通过连接 RGB 类型,视频呈现器可确保在 DirectDraw 不可用时可以使用 GDI。 如果另一个应用程序正在使用视频内存、视频矩形跨多监视器系统上的两个监视器,或者视频矩形被另一个窗口完全遮挡,则它将切换到 GDI。

注意

视频混合呈现器不执行这种类型的动态格式更改,也不需要 RGB 媒体类型,因为它永远不会使用 GDI 进行呈现。

 

为了协商格式更改,视频呈现器使用新媒体类型调用 IPin::QueryAccept 。 如果上游筛选器返回S_OK,则视频呈现器会将新媒体附加到下一个示例。 上游筛选器应在每个示例中调用 IMediaSample::GetMediaType。 如果 GetMediaType 返回非 NULL 值,则表示格式更改,上游筛选器应通过切换输出类型做出响应。 (不要在 QueryAccept 方法中切换类型。) 上游 筛选器应至少接受主要 RGB 类型,理想情况下应支持常见的 YUV 类型。 在流式处理期间,视频呈现器可能会在 YUV 和 RGB 类型之间来回切换任意次数。 视频呈现器不接受上游筛选器启动的动态格式更改。

当视频呈现器绘制到 DirectDraw 覆盖图面时,它会为其输入引脚分配单个缓冲区。 如果上游筛选器尝试使用多个缓冲区强制连接,则视频呈现器将无法使用覆盖图面。

DirectShow 筛选器