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


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

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

Примечание

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

 

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

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

  1. Создайте граф фильтра и добавьте в него VMR с помощью метода IFilterGraph::AddFilter . Пример кода см. в разделе VmR Windowless Mode.

  2. Создайте монопольный режим распределителя-докладчика:

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

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

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

Режимы работы VMR