视频呈现器筛选器

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

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

注意

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

 

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

  • ![重要提示]

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

     

标签 价值
筛选器接口 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 类型进行连接,视频呈现器可确保它可以使用 GDI,以防 DirectDraw 不可用。 如果另一个应用程序使用视频内存,如果视频矩形跨多监视器系统上的两个监视器,或者视频矩形被另一个窗口完全遮盖,它将切换到 GDI。

注意

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

 

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

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

DirectShow 筛选器