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