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


VMR с несколькими потоками (режим микширования)

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

VMR может визуализировать несколько входных потоков. В этой конфигурации, называемой режимом смешивания, VMR загружает микшер и композитатор для выполнения смешивания и смешивания перед отрисовкой. Режим микширования можно использовать, когда VMR находится в оконном режиме или в режиме без окон.

Режим смешивания требует, чтобы графический драйвер поддерживал флаги возможностей DDCAPS_BLTFOURCC и DDCAPS_BLTSTRETCH (преобразование цветового пространства и растягивание соответственно). Почти все новые графические драйверы имеют эти возможности. Кроме того, драйвер должен поддерживать создание целевых объектов отрисовки Direct3D для текущей глубины отображения пикселей. Некоторые устройства не поддерживают операции Direct3D, если для дисплея задано значение 24 бита на пиксель. Дополнительные сведения см. в документации по пакету SDK для графики DirectX.

Примечание

Когда VMR смешивает несколько видеопотоков, граф фильтра не ищет правильно. Если необходимо искать несколько видеопотоков, необходимо создать отдельные графы фильтров, которые совместно используют один и тот же пользовательский объект распределителя и докладчика.

 

Настройка VMR-7 для нескольких потоков

Чтобы отобразить несколько входных потоков с помощью VMR-7, выполните следующие действия.

  1. Перед подключением любого из входных контактов VMR вызовите метод IVMRFilterConfig::SetNumberOfStreams с количеством потоков. Это приводит к загрузке виртуальной машины микшера и композитора и созданию указанного числа входных контактов.
  2. Вызовите IVMRFilterConfig::SetRenderingPrefs , чтобы указать различные параметры отрисовки.
  3. Подключите контакты к фильтрам вышестоящий. Самый простой способ сделать это — вызвать IGraphBuilder::RenderFile для каждого входного потока. Если выходной контакт на фильтре вышестоящий (обычно это декодер) и входной контакт в VMR не могут согласовать подключение, будет создан новый экземпляр VMR с параметрами по умолчанию. Это приведет к созданию нового окна с "ActiveMovie" в строке заголовка. Чтобы предотвратить это, приложение всегда должно проверять, используется ли правильный экземпляр VMR, путем вызова метода , например IPin::ConnectedTo. Другой вариант — добавить исходный фильтр, а затем подключить контакты с помощью IGraphBuilder::Connect.
  4. Используйте интерфейс IVMRMixerControl в VMR для управления параметрами для каждого потока, такими как альфа-значение, Z-порядок и выходной прямоугольник.
  5. Запустите граф фильтра.

Настройка VMR-9 для нескольких потоков

По умолчанию VMR-9 создает четыре входных контакта. Если вы хотите использовать более четырех видеопотоков, вызовите IVMRFilterConfig9::SetNumberOfStreams перед подключением любых входных контактов. Используйте интерфейс IVMRMixerControl9 для задания параметров потока, таких как альфа-, Z-порядок и положение.

Использование режима смешивания VMR