Ник:
Пароль:

Контакты

E-mail: info@starterkit.ru
тел.: +7 922 680-21-73
тел.: +7 922 680-21-74
Телеграм: t.me/starterkit_ru
Партнеры:
otladka.com.ua - г.Киев

Способы оплаты

User Info


Добро пожаловать,
Guest

Регистрация или входРегистрация или вход
Потеряли пароль?Потеряли пароль?

Ник:
Пароль:

ПользователейПользователей:4
Поисковых ботовПоисковых ботов:3
ГостейГостей:1

ОбновитьПодробнееВсегоВсего:8
Форум » starterkit.ru » Embedded Linux
Qt и видео с камеры
z00b
Добавлено 29.01.2013 09:55 Редактировалось 05.02.2013 12:10
0
Сообщение: 1
z00b
0

Пункты: 5587
Регистрация: 11.02.2012
День добрый!

Требуется вывести видео с камеры в приложении на Qt, чтоб рисовалось на виджете, Qt без иксов (QWS). Плата c imx53.
Т.к. до этого тестил видео с камеры с использованием gst-launch, попробовал воспользоваться QtGstreamer, с ним получается воспроизвести видео файл с использованием playbin2, видео рисуется на виджете, но без аппаратного ускорения. При попытки создания кастомной pipeline без использования playbin2 получаю internal data flow error - если подключаюсь к кастомным sink например "qtvideosink"(в консоли пишет что подгружает нужные плагины). Когда sink это mfw_v4lsink, выводится видео на полный экран.
При использовании Qt Phonon с камерой работать я как понял нельзя. Но с ним видео из файла в окно выводит с аппаратным ускорением нормально (фрискейловские патчи ставятся).

Может кто решал подобную задачу, подскажите в каком направлении копать.
Спуститься к концу Подняться к началу
Персональная информация
z00b
Добавлено 30.01.2013 17:48 Редактировалось 30.01.2013 17:48 Сообщение: 2
z00b
0

Пункты: 5587
Регистрация: 11.02.2012
Проблема вроде бы в том, что mfw_v4lsrc выдает видео в yuv, а "qtvideosink" работает с rgb.
Удалось отрисовывать видео на виджете, когда добавил в pipeline "ffmpegcolorspace ! video/x-raw-rgb". Но ffmpegcolorspace нагружает процессор, и нормально выводить получается видео только низкого разрешения 320x240.
Кто нибудь знает, как пофиксить проблему?
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 30.01.2013 19:52 Редактировалось 30.01.2013 19:59 Сообщение: 3
sasamy
4.70

Пункты: 77100
Регистрация: 14.08.2009
Цитата

Когда sink это mfw_v4lsink, выводится видео на полный экран.


Посмотрите патч для phonon - там же сразу видно как они управляют плагином mfw_v4lsink в какое окно ему отрисовывать - координаты + высота/ширина

Цитата

+void WidgetRenderer::setVideoSize(void)
+{

- m_videoWidget->update();
+ int adj_x;
+ int adj_y;
+
+ QSize wSize = m_videoWidget->size();
+ m_drawFrameRect = m_videoWidget->calculateDrawFrameRect();
+ framePos = m_videoWidget->mapToGlobal(QPoint(0,0));
+
+ //Center the video in the widget
+
+ adj_x = (wSize.width()/2) - (m_drawFrameRect.width()/2);
+ adj_y = (wSize.height()/2) - (m_drawFrameRect.height()/2);
+ g_object_set(G_OBJECT(m_videoSink), "axis-left",adj_x + framePos.x(),(const char*)NULL);
+ g_object_set(G_OBJECT(m_videoSink), "axis-top", adj_y + framePos.y(), (const char*)NULL);
+ g_object_set(G_OBJECT(m_videoSink), "disp-width", m_drawFrameRect.width(), (const char*)NULL);
+ g_object_set(G_OBJECT(m_videoSink), "disp-height", m_drawFrameRect.height(), (const char*)NULL);
+ g_object_set(G_OBJECT(m_videoSink), "setpara", 1, (const char*)NULL);
}


только весь патч просмотрите - там все есть, в том числе как оверлей проинициализировать.
Спуститься к концу Подняться к началу
Персональная информация
z00b
Добавлено 01.02.2013 13:39 Сообщение: 4
z00b
0

Пункты: 5587
Регистрация: 11.02.2012
Проблема еще в том, что например
Код
gst-launch -v filesrc location=/home/capture.avi ! decodebin2 ! mfw_v4lsink axis-left=200 axis-top=300 disp-width=320 disp-height=240

позиционирует вывод видео нормально,
а если брать с камеры:
Код
gst-launch -v mfw_v4lsrc ! mfw_v4lsink axis-left=200 axis-top=300 disp-width=320 disp-height=240

вывод не позиционируется никак- только полный экран.

Ну и посмотрев патч, я понял так, что здесь просто область экрана, которая соответствует координатам виджета-окна вывода видео затирается картинкой, которую плагин выводит. Т.е. я не могу сверху наложить свои виджеты сверху, например кнопки. В варианте с QtGstreamer, вывод видео происходит на виджете.
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 01.02.2013 13:44 Редактировалось 01.02.2013 13:59 Сообщение: 5
sasamy
4.70

Пункты: 77100
Регистрация: 14.08.2009
Цитата

вывод не позиционируется никак- только полный экран.


Надо будет проверить - я не пробовал если честно. Есть еще вариант - mfw_v4lsrc может выводить preview в оверлей без mfw_v4lsinc. Кстати - судя по конвееру у вас какой-то свой сенсор а не adv7180 ?

Цитата

Т.е. я не могу сверху наложить свои виджеты сверху, например кнопки.


вам типа OSD нужно что-ли ? тогда наверно не получится, хотя надо смотреть - должен быть выход.

Кстати не вижу проблем с OSD - там же не затирвается содержимое fb0 - т.е. наоборот получается что оверлей куда отрисовывается картинка на заднем плане находится.
Спуститься к концу Подняться к началу
Персональная информация
z00b
Добавлено 01.02.2013 14:43 Сообщение: 6
z00b
0

Пункты: 5587
Регистрация: 11.02.2012
Цитата
Кстати - судя по конвееру у вас какой-то свой сенсор а не adv7180 ?

Использую adv7180, просто конвеер такой написал для примера, а так использую "костыли" в коневеере чтобы видео не "бежало".

Цитата
вам типа OSD нужно что-ли ?

Вообще служебную инфу неплохо бы поверх видео выводить.

Цитата
Кстати не вижу проблем с OSD - там же не затирвается содержимое fb0 - т.е. наоборот получается что оверлей куда отрисовывается картинка на заднем плане находится.


Хм...Буду разбираться с этим.
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 01.02.2013 14:54 Редактировалось 01.02.2013 14:55 Сообщение: 7
sasamy
4.70

Пункты: 77100
Регистрация: 14.08.2009
Цитата

Хм...Буду разбираться с этим.


Отпишитесь плз если разберетесь - я могу ошибаться. Я сужу по тому что если переместить окно с видео - иногда наблюдается эффект что видео остается на месте при этом декорации Qt отрисовываются нормально и перекрывают видео-изображение. Мне просто нереально пробовать все подряд от ядра до юзерспейс и дистрибутивов :)
Спуститься к концу Подняться к началу
Персональная информация
z00b
Добавлено 05.02.2013 12:10 Редактировалось 05.02.2013 12:18 Сообщение: 8
z00b
0

Пункты: 5587
Регистрация: 11.02.2012
С mfw_v4lsink ничего не получилось- окно не ресайзится. Зато получилось решить задачу с mfw_isink. Правда опять же, решение немного "костыльное" - напрямую на виджете рисовать не удалось- рисуется в оверлей на заднем фоне.

Создаю кастомный pipeline, например:
Код
fw_v4lsrc capture-width=720 capture-height=576 sensor-width=720 sensor-height=288 typefind=1 preview=1 ! mfw_isink axis-top=100 axis-left=200 disp-width=320 disp-height=240


Затем, перед запуском конвеера, инициализация оверлея setOverlay(), как в патчах к QtPhonon.
В результате могу накладывать сверху виджеты на видео.

Для mfw_isink VSALPHA в енвайромент добавлять не надо.

Спасибо sasamy за наводку =)
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 05.02.2013 12:17 Редактировалось 05.02.2013 12:18 Сообщение: 9
sasamy
4.70

Пункты: 77100
Регистрация: 14.08.2009
Цитата

С mfw_v4lsink ничего не получилось- окно не ресайзится. Зато получилось решить задачу с mfw_isink.


очень странно, основная цель mfw_isink - вывод двух независимых видеопотоков на два экрана , т.е. оверлей для fb0 и для fb1

Цитата

решение немного "костыльное" - напрямую на виджете рисовать не удалось- рисуется в оверлей на заднем фоне.


почему костыльное - у них в phonoe так и сделано. Костыль - это отрисовывать в RGB средствами Qt с програмным CSC с падением производительности до уровня at91 :-)
Спуститься к концу Подняться к началу
Персональная информация
z00b
Добавлено 05.02.2013 13:08 Сообщение: 10
z00b
0

Пункты: 5587
Регистрация: 11.02.2012
Цитата
почему костыльное - у них в phonoe так и сделано. Костыль - это отрисовывать в RGB средствами Qt с програмным CSC с падением производительности до уровня at91 :-)

В QtGstreamer отрисовывать можно зайдестовав OpenGL. Тогда видео в окне ресайзится нормально (без задержек) и при переносе окна с видео нет проблем с его отставанием от окна (видео проигрывается из файла). Правда нагрузка на проц все равно на порядок выше :)
Спуститься к концу Подняться к началу
Персональная информация
Форум » starterkit.ru » Embedded Linux