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


Размещение и перемещение прямоугольников видео в пространстве композиции

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

Когда VMR смешивает несколько входных потоков, каждый поток помещает в нормализованный прямоугольник, называемый "пространством композиции". В пространстве композиции координаты (0,0, 0,0) до (1,0, 1,0) образуют видимый прямоугольник видео. Все координаты, которые находятся за пределами этого прямоугольника, обрезаются.

Приложение может выполнять специальные эффекты с перемещением, растягиванием и сжатием видео из входного потока, изменяя целевой прямоугольник в пространстве композиции для этого потока. Если указанный прямоугольник отличается от размера собственного видео, то собственное видео будет сжато или растянуто в соответствии с размером. Целевой прямоугольник задается путем вызова метода IVMRMixerControl::SetOutputRect .

Например, предположим, что поток 0 (который соответствует закреплению 0) содержит main видеопоток, а поток 1 (соответствующий закреплению 1) содержит дополнительное видео. Поток 1 можно разместить полностью за кадром, указав нормализованный прямоугольник { -1.0f, 0.0f, 0.0f, 1.0f }. Затем поток 1 можно переместить в видимую область, изменив левую и правую стороны прямоугольника при последовательных вызовах SetOutputRect:

Метка Значение
Time Прямоугольник
t + 0 { -1.0f, 0.0f, 0.0f, 1.0f }
t + 1 { -0.9f, 0.0f, 0.1f, 1.0f }
t + 2 { -0.8f, 0.0f, 0.2f, 1.0f }
... ...
t + 10 { 0.0f, 0.0f, 1.0f, 1.0f }

 

перемещение видеопотока в пространстве композиции

Во время t+10 видео из потока 1 полностью видно. В этом примере при перемещении сохранялся собственный размер потока 1. Вы также можете растянуть или сжать прямоугольник, чтобы создать интересные эффекты. Вы также можете перевернуть видео по вертикали, указав большее значение для верхнего, чем нижнего, или зеркало видео по горизонтали, указав большее значение для левого, чем справа.

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