Требуется вывести видео с камеры в приложении на Qt, чтоб рисовалось на виджете, Qt без иксов (QWS). Плата c imx53.
Т.к. до этого тестил видео с камеры с использованием gst-launch, попробовал воспользоваться QtGstreamer, с ним получается воспроизвести видео файл с использованием playbin2, видео рисуется на виджете, но без аппаратного ускорения. При попытки создания кастомной pipeline без использования playbin2 получаю internal data flow error - если подключаюсь к кастомным sink например "qtvideosink"(в консоли пишет что подгружает нужные плагины). Когда sink это mfw_v4lsink, выводится видео на полный экран.
При использовании Qt Phonon с камерой работать я как понял нельзя. Но с ним видео из файла в окно выводит с аппаратным ускорением нормально (фрискейловские патчи ставятся).
Может кто решал подобную задачу, подскажите в каком направлении копать.
Проблема вроде бы в том, что mfw_v4lsrc выдает видео в yuv, а "qtvideosink" работает с rgb.
Удалось отрисовывать видео на виджете, когда добавил в pipeline "ffmpegcolorspace ! video/x-raw-rgb". Но ffmpegcolorspace нагружает процессор, и нормально выводить получается видео только низкого разрешения 320x240.
Кто нибудь знает, как пофиксить проблему?
позиционирует вывод видео нормально,
а если брать с камеры:
вывод не позиционируется никак- только полный экран.
Ну и посмотрев патч, я понял так, что здесь просто область экрана, которая соответствует координатам виджета-окна вывода видео затирается картинкой, которую плагин выводит. Т.е. я не могу сверху наложить свои виджеты сверху, например кнопки. В варианте с QtGstreamer, вывод видео происходит на виджете.
Надо будет проверить - я не пробовал если честно. Есть еще вариант - mfw_v4lsrc может выводить preview в оверлей без mfw_v4lsinc. Кстати - судя по конвееру у вас какой-то свой сенсор а не adv7180 ?
вам типа OSD нужно что-ли ? тогда наверно не получится, хотя надо смотреть - должен быть выход.
Кстати не вижу проблем с OSD - там же не затирвается содержимое fb0 - т.е. наоборот получается что оверлей куда отрисовывается картинка на заднем плане находится.
Отпишитесь плз если разберетесь - я могу ошибаться. Я сужу по тому что если переместить окно с видео - иногда наблюдается эффект что видео остается на месте при этом декорации Qt отрисовываются нормально и перекрывают видео-изображение. Мне просто нереально пробовать все подряд от ядра до юзерспейс и дистрибутивов :)
С mfw_v4lsink ничего не получилось- окно не ресайзится. Зато получилось решить задачу с mfw_isink. Правда опять же, решение немного "костыльное" - напрямую на виджете рисовать не удалось- рисуется в оверлей на заднем фоне.
Создаю кастомный pipeline, например:
Затем, перед запуском конвеера, инициализация оверлея setOverlay(), как в патчах к QtPhonon.
В результате могу накладывать сверху виджеты на видео.
Для mfw_isink VSALPHA в енвайромент добавлять не надо.
очень странно, основная цель mfw_isink - вывод двух независимых видеопотоков на два экрана , т.е. оверлей для fb0 и для fb1
почему костыльное - у них в phonoe так и сделано. Костыль - это отрисовывать в RGB средствами Qt с програмным CSC с падением производительности до уровня at91 :-)
В QtGstreamer отрисовывать можно зайдестовав OpenGL. Тогда видео в окне ресайзится нормально (без задержек) и при переносе окна с видео нет проблем с его отставанием от окна (видео проигрывается из файла). Правда нагрузка на проц все равно на порядок выше :)