DirectDraw 独占模式

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

注意

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

 

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

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

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

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

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

    pExclModeConfig->SetXlcModeDDObjAndPrimarySurface(...);
    
  4. 将新的分配器演示者插入 VMR。

  5. 以通常的方式构建筛选器图的其余部分。

VMR作模式