Overlay Mixer 筛选器
[与此页面关联的功能 DirectShow 是旧版功能。 它已被 MediaPlayer、 IMFMediaEngine 和 Media Foundation 中的音频/视频捕获所取代。 这些功能已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能在 Media Foundation 中使用 MediaPlayer、 IMFMediaEngine 和 音频/视频捕获 ,而不是 DirectShow。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]
覆盖混音器筛选器是一种视频呈现器,专为使用 21 行隐藏式字幕的 DVD 播放和广播视频流而设计。 覆盖混音器还支持视频端口扩展 (VPE) ,使其能够与硬件 MPEG-2 解码器或模拟电视调谐器配合使用,这些解码器将视频直接发送到图形卡,而不是通过 PCI 总线。
注意
视频混合呈现器 9 现在优先于覆盖混合器筛选器,VPE 方案除外。
覆盖混合器使用 DirectDraw 进行呈现。 它要求在图形卡上设置覆盖图面。 主视频流应连接到引脚 0。 (关闭描述文字图形或 DVD 子图片) 的辅助流连接到引脚 1 及更高版本。 覆盖混音器将辅助流直接点燃到主表面;它不会混合或 alpha 混合它们。
覆盖混合器使用视频呈现器进行窗口管理。 视频呈现器连接到覆盖混音器的输出引脚。
当应用程序使用 IDvdGraphBuilder 和 ICaptureGraphBuilder2 接口创建该图时,此筛选器会自动添加到筛选器图中。 筛选器图形管理器不会自动将覆盖混音器添加到图形中。
注意
在下表中,输入引脚 0 上接受的媒体子类型依赖于硬件。 在创建 DirectDraw 图面之前,覆盖混合器无法确定特定子类型是否受支持。 因此,上游筛选器确定是否支持子类型的唯一方法是尝试与该子类型建立连接。
Label | 值 |
---|---|
筛选器接口 | IAMOverlayFX、 IAMVideoDecimationProperties、 IBaseFilter、 IDDrawExclModeVideo、 IKsPropertySet、 IMediaPosition、 IMediaSeeking、 IMixerOCX、 IQualProp、 IVPNotify、 IVPNotify2 |
输入引脚媒体类型 | 主要类型:MEDIATYPE_Video 亚:
|
输入引脚接口 | IAMVideoAccelerator、 IKsPin、 IKsPropertySet、 IMemInputPin、 IMixerPinConfig、 IMixerPinConfig2、 IOverlay (引脚 0 仅) 、 IPin、 IPinConnection、 IQualityControl、 IVPNotify、 IVPNotify2 |
输出引脚媒体类型 | MEDIATYPE_Video、MEDIASUBTYPE_Overlay |
输出引脚接口 | IMediaPosition、 IMediaSeeking、 IPin、 IQualityControl |
筛选器 CLSID | CLSID_OverlayMixer |
属性页 CLSID | 无属性页。 |
可执行文件 | qdvd.dll |
优点 | MERIT_DO_NOT_USE |
筛选器类别 | CLSID_LegacyAmFilterCategory |
备注
覆盖混合器使用目标颜色键控将视频图面与覆盖混合。 它将颜色键和辅助视频点燃到主图面,并将主视频发送到覆盖图面。 然后,图形卡将两个图面组合到其帧缓冲区中。
若要测试图形驱动程序是否支持硬件覆盖,请调用 IDirectDraw7::GetCaps。 如果 DDCAPS 结构中的 dwMaxVisibleOverlays 字段大于零,则驱动程序支持硬件覆盖。
应用程序可以通过 IMixerPinConfig2 接口控制覆盖混音器上的某些行为。 游戏开发人员可以使用覆盖混合器在 DirectDraw 独占模式下显示视频,如本部分稍后所述。 但是, 视频混合呈现器筛选器 9 (VMR-9) 现在为游戏中的视频提供更好的支持。 有关详细信息,请参阅 使用视频混合呈现器。
提供以下信息是为了筛选器开发人员和想要在 DirectDraw 独占模式下使用覆盖混合器的游戏开发人员的利益。
覆盖混合器内部操作
覆盖混音器为每个传入流公开一个输入引脚。 通常,有三个输入引脚:用于视频数据的引脚 0,第 1 行 21 和 DVD 子图片数据的引脚 1 和 2。 在内部,覆盖混合器创建一个 DirectDraw 对象,该对象的主要表面包括整个桌面,以及一个覆盖表面,其矩形由固定 0 上的视频流大小定义。 如果解码器未指定颜色键,则覆盖混音器使用默认颜色键:深灰色用于较新的图形卡,对较旧的 256 色卡使用洋红色。
注意
如果解码器在覆盖图面上的同一位置同时传送两个辅助视频流,则结果未定义。 (这有时发生在包含子图片和行 21 streams 的 DVD 中。) 视频可能会闪烁或仅显示其中一个流。
在 Windows Vista 或更高版本上,如果显示驱动程序支持硬件覆盖,则覆盖混合器会禁用桌面窗口管理器 (DWM) 组合。 应用程序应避免使用覆盖混合器筛选器;请改用 VMR-9 或增强的视频呈现器 (EVR) 。
使用视频解码器的上游连接
通常,覆盖混音器的输入引脚连接到上游视频解码器。 主视频流必须连接到引脚 0。 第 21 行或子图片流连接到引脚 1 或更高版本。 如果解码器是独占使用主机 CPU 的软件解码器,则解码器和 Pin 0 之间的连接是 IMemInputPin 连接。 如果解码器使用硬件加速,则与 Pin 0 的连接必须使用 IAMVideoAccelerator 推理接口。 这两种类型的连接是互斥的。
如果解码器直接绘制到覆盖图面上,则应使用引脚 0 上的 IOverlay 接口并实现 IOverlayNotify 接口。
包装硬件解码器并通过视频端口连接到覆盖混合器的筛选器必须实现 IVPConfig 接口。 覆盖混合器实现 IVPNotify 接口。 这两个接口使解码器能够指定所需的覆盖图面,并使覆盖混音器能够通知解码器这些图面在视频内存中的位置。
覆盖混合器还可以确保视频矩形正确缩放。 视频捕获涉及缩放预览图像和捕获交错视频帧方面的某些问题。 如果要为硬件视频捕获设备开发筛选器或 WDM 驱动程序,请参阅 IVPConfig 和 IVPNotify 参考页,了解有关这些主题的详细信息。
覆盖混合器不用于 1394 或 USB 捕获方案。 它用于通过 PCI 总线进行视频捕获。
视频呈现器的下游连接
覆盖混合器具有连接到 视频呈现器 筛选器的输出引脚。 在这种情况下,视频呈现器不呈现视频;它只是管理视频窗口。
引脚连接使用 IOverlay 接口,而不是 IMemInputPin 接口。 视频呈现器将其窗口句柄通过覆盖混音器传递到 DirectDraw,后者管理矩形剪辑。 应用程序可以通过 Filter Graph Manager 上的 IVideoWindow 和 IBasicVideo2 接口控制视频呈现器。
DirectDraw 独占模式
覆盖混音器的 DirectDraw 独占模式使游戏能够在屏幕的某个部分显示视频。 在此模式下,覆盖混音器将视频直接呈现到由游戏应用程序创建的 DirectDraw 图面,而不是呈现器提供的窗口。 这使游戏能够控制颜色键。 覆盖混音器在 DirectDraw 独占模式下仅公开一个输入引脚,这意味着在此模式下无法混合第 21 行或 DVD 子图片。
若要在 DirectDraw 独占模式下使用覆盖混音器,请创建覆盖混音器的实例,并在生成筛选器图之前查询 IDDrawExclModeVideo 接口。 然后调用 IDDrawExclModeVideo::SetDDrawSurface 以指定用于呈现的 DirectDraw 图面。 此模式的一个重要限制是游戏无法访问实际视频位。 如果使用 IDDrawExclModeVideo,应用程序将创建主图面,而覆盖混音器将创建覆盖图面。
还可以使用 DirectDraw 独占模式执行无窗口呈现(例如,在网页中),但不建议这样做,因为覆盖混音器在此模式下不执行任何混合。 这意味着无法显示第 21 行或子图片数据。
相关主题