Поделиться через


Монопольный режим DirectDraw

[Функция, связанная с этой страницей, DirectShow, является устаревшей функцией. Он был заменен MediaPlayer, IMFMediaEngineи аудио и видеозахват в Media Foundation. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует использовать новый код MediaPlayer, IMFMediaEngine и аудио-видеозахват в Media Foundation вместо DirectShowпо возможности. Корпорация Майкрософт предлагает, что существующий код, использующий устаревшие API, будет перезаписан для использования новых API, если это возможно.]

Заметка

Этот раздел относится только к VMR-7. В VMR-9 можно включить монопольный режим, предоставив собственный монопольный режим allocator-докладчика. Это относительно просто, если вы используете метод IVMRSurfaceAllocatorNotify9::AllocateSurfaceHelper. В примере VMR9Allocator показано, как реализовать настраиваемого докладчика-распределителя.

 

В монопольном режиме DirectDraw приложение управляет графическим оборудованием. Это полезно для таких приложений, как игры или, возможно, полноэкранные видео приложения. Как правило, VMR создает объекты DirectDraw и устанавливает общий уровень в нормальном режиме. Однако для запуска VMR в режиме directDraw Exclusive, само приложение должно создать объект DirectDraw и основную поверхность, а также вызвать SetCooperativeLevel, чтобы указать монопольный режим.

VmR имеет специальный выступающий распределитель, который позволяет запускать его в монопольном режиме DirectDraw. Чтобы настроить виртуальную машину для использования этого докладчика-распределителя, выполните следующие действия.

  1. Создайте граф фильтра и добавьте в нее виртуальную машину с помощью метода IFilterGraph::AddFilter. Пример кода см. в режиме без окон vmR.

  2. Создайте выступающий в монопольном режиме:

    IVMRImagePresenterExclModeConfig* pExclModeConfig;
    CoCreateInstance(
            CLSID_AllocPresenterDDXclMode,
            NULL,
            CLSCTX_INPROC_SERVER,
            IID_IVMRImagePresenterExclModeConfig,
            (void**)&pExclModeConfig
            );
    
  3. Настройте новый ведущий распределителя:

    pExclModeConfig->SetXlcModeDDObjAndPrimarySurface(...);
    
  4. Подключите новый ведущий распределителя к vmR.

  5. Создайте остальную часть графа фильтров обычными способами.

режимы работы vmR