Водяной знак + фильтр DirectShow

Я хочу поставить водяной знак на свое видео. Можно ли обойтись фильтром directshow. Хотите наложить изображение на видео, например логотип канала. так что изображение будет зафиксировано при воспроизведении видео.

Пожалуйста, предоставьте ценную помощь или примеры (VC++)


person Sijith    schedule 06.04.2010    source источник


Ответы (1)


Я делал это раньше. У вас есть два варианта.

  1. Используйте возможности микшера VMR-7 или VMR-9. Я гарантирую вам, что это будет выглядеть очень уродливо, потому что фильтры VMR вообще не могут выполнять альфа-смешивание. Ваш водяной знак будет иметь грубые края.

  2. Реализуйте класс фильтра, производный от CTransInPlaceFilter.

Вы реализуете следующие методы:

  CheckMediaType   (accept all RGB formats)
   SetMediaType     (accept all RGB formats)
   Transform        (this is where you do the overlay)

В конструкторе вашего фильтра (или в каком-либо другом методе, который вызывается перед запуском графика) загрузите водяной знак из файла или ресурсов. Сохраните биты растрового изображения файла изображения в буфер.

При вызове Transform откройте переданный IMediaSample, получите доступ к его буферу и создайте цикл с двойным вложением for для копирования каждого пикселя водяного знака в буфер изображения.

Одна проблема со всем этим заключается в том, что ваш источник входного сигнала может не быть родным RGB. Например, большинство веб-камер являются источниками YUV (или, что еще хуже, MJPG). Ограничение вашего фильтра только приемом типов RGB заставит загружать фильтры преобразователя цвета DShow. Таким образом, к вашему графику может быть добавлена ​​​​дополнительная задержка. Что касается альфа-смешивания (если вы этого хотите), здесь вы сами — исходный буфер, который вы накладываете поверх него, скорее всего, будет RGB24 без альфа-канала.

person selbie    schedule 06.04.2010
comment
Существует более простой вариант 3: используйте Sample Grabber и изменяйте видеоконтент на месте, когда он вызывает ваш обратный вызов. - person Dee Mon; 11.09.2012