DirectDraw 独占模式

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

注意

本主题仅适用于 VMR-7。 在 VMR-9 中,通过提供自己的独占模式分配器表示器来启用独占模式。 如果使用 IVMRSurfaceAllocatorNotify9::AllocateSurfaceHelper 方法,则此操作相对简单。 VMR9Allocator 示例演示如何实现自定义分配器表示器。

 

在 DirectDraw 独占模式下,应用程序独占控制图形硬件。 这对于游戏等应用程序或全屏视频应用程序非常有用。 通常,VMR 会创建 DirectDraw 对象并将协作级别设置为 normal。 但是,若要在 DirectDraw 独占模式下运行 VMR,应用程序本身必须创建 DirectDraw 对象和主图面,并调用 SetCooperativeLevel 以指定独占模式。

VMR 具有特殊的分配器表示器,使它能够在 DirectDraw 独占模式下运行。 若要将 VMR 配置为使用此分配器-演示者,请执行以下操作:

  1. 创建 Filter Graph 并使用 IFilterGraph::AddFilter 方法向其添加 VMR。 有关代码示例,请参阅 VMR 无窗口模式

  2. 创建独占模式分配器-演示者:

    IVMRImagePresenterExclModeConfig* pExclModeConfig;
    CoCreateInstance(
            CLSID_AllocPresenterDDXclMode,
            NULL,
            CLSCTX_INPROC_SERVER,
            IID_IVMRImagePresenterExclModeConfig,
            (void**)&pExclModeConfig
            );
    
  3. 配置新的分配器-演示者:

    pExclModeConfig->SetXlcModeDDObjAndPrimarySurface(...);
    
  4. 将新的分配器呈现器插入 VMR。

  5. 以常用方式生成筛选器图的其余部分。

VMR 操作模式