Наложение Qt поверх GStreamer

У меня есть вопрос относительно текущей настройки:

  • Yocto Linux на iMX6
  • Ни оконный, ни дисплейный менеджер
  • Полнофункциональное приложение Qt, протестированное на Debian 9.

Приложение состоит из двух основных элементов:

  • Часть GStreamer с imxg2dvideosink
  • Полупрозрачный оверлей Qt, который должен отображаться поверх потока.

Вопрос:

Как я могу отобразить наложение поверх потока, имея обе части в полноэкранном режиме (заполняя весь экран)? Возможные решения:

  • /dev/fb1 в качестве наложения на /dev/fb0 (Как разделить одно приложение на два fb?)
  • Использовать дисплей-менеджер?
  • Использовать оконный менеджер?
  • linuxfb вместо eglfs ?

Мое текущее (не работающее) решение:

  • Использование -platform eglfs
  • Приложение сначала запустится GStreamer, а затем покажет оверлей

person chrizbee    schedule 22.01.2018    source источник
comment
Вам нужно написать собственный приемник GStreamer, если вы не знаете, как заставить imxg2dvideosink отображать то, что вы хотите.   -  person Alexander V    schedule 23.01.2018


Ответы (1)


Я сам нашел решение. Поделился ниже:

1) Запустите приложение Qt на /dev/fb1:

  • export QT_QPA_EGLFS_FB=/dev/fb1 (укажите /dev/fb1 как eglfs кадровый буфер)
  • echo 0 > /sys/class/graphics/fb1/blank (Очистить фреймбуфер)
  • fbset -fb /dev/fb1 --geometry <your geometry here> (Установить геометрию фреймбуфера)
  • ./YourApplication -platform eglfs (Запустить приложение)

Используйте цветовой ключ, если вы хотите получить полную непрозрачность при наличии полностью прозрачных частей вашего наложения.

2) Запустите GStreamer на /dev/fb0:

  • gst-launch-1.0 videotestsrc ! imxg2dvideosink framebuffer=/dev/fb0

Это решение для eglfs. Другие возможности: linuxfb.

person chrizbee    schedule 01.02.2018