Ник:
Пароль:

Контакты

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

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

Ник:
Пароль:

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

ОбновитьПодробнееВсегоВсего:4
Форум » starterkit.ru » Вспомогательные средства
SK-TW6869
sasamy
Добавлено 17.01.2018 11:28 Редактировалось 17.01.2018 11:42 Сообщение: 21
sasamy
4.70

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

В результате пришел к потребности получить данную счетверенную картинку напрямую с драйвера TW6869 чтоб склейка производиласть аппаратно через DMA.


это точно не выйдет - контроллер DMA у tw6869 не поддерживает Blit - вставку прямоугольной области в произвольную позицию другой прямоугольной области памяти.

Цитата

Возможно ли такое, и если да то куда копать?


тут прямой и очевидный путь - написать свой плагин для Gstreamer с нужной обработкой изображения с учетом особенностей gstreamer-imx. Понятно что не имея такого опыта ранее можно встрять надолго, Ноя бы начал именно с этого - не так уж там все страшно.

https://gstreamer.freedesktop.org/documentation/plugin-development/index.html

навскидку можно попробовать вариант

Цитата

Про v4l2loopback знаю. Этот подход (с пайплайном вида imxv4l2videosrc -> imxipucompositor -> v4l2loopback) дает нужное мне новое устройство /dev/video, но опять загружает CPU так что что на дальнейшую обработку ресурсов уже не остается.


только подправить его для zero-copy - в последней версии gstreamer-imx появился плагин для v4l2sink

https://github.com/Freescale/gstreamer-imx/commit/8247e38beb3ec3fca9ff365417b6cb9bdf4e4151
Спуститься к концу Подняться к началу
Персональная информация
Sol
Добавлено 17.01.2018 14:42 Сообщение: 22
Sol
0

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

это точно не выйдет - контроллер DMA у tw6869 не поддерживает Blit - вставку прямоугольной области в произвольную позицию другой прямоугольной области памяти.

Понял. То что вставить прямоугольник не получится - предсказуемо.
А в линейной модели памяти? Т.е. слепить кадр за кадром последовательно посредством того что все DMA транзакции пишут в идущие друг за другом куски памяти?

Цитата

тут прямой и очевидный путь - написать свой плагин для Gstreamer с нужной обработкой изображения с учетом особенностей gstreamer-imx. Понятно что не имея такого опыта ранее можно встрять надолго, навскидку можно попробовать вариант

Спасибо за наводку, буду альтернативно смотреть насколько это тяжело.

Цитата

только подправить его для zero-copy - в последней версии gstreamer-imx появился плагин для v4l2sink


Подправить драйвер v4l2loopback? Или речь про плагин v4l2sink?
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 17.01.2018 14:54 Редактировалось 17.01.2018 14:56 Сообщение: 23
sasamy
4.70

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

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


и что с этой мешаниной потом делать ? если вы представите потом эту область памяти как прямоугольник 1440х960:

1 канал 1 строка, 1 канал 2 строка
1 канал 3 строка, 1 канал 4 строка
...
4 канал 479 строка, 4 канал 480 строка

Цитата

Подправить драйвер v4l2loopback? Или речь про плагин v4l2sink?


скорей всего обоих надо будет подправить
Спуститься к концу Подняться к началу
Персональная информация
Sol
Добавлено 17.01.2018 17:08 Редактировалось 17.01.2018 17:09 Сообщение: 24
Sol
0

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


и что с этой мешаниной потом делать ? если вы представите потом эту область памяти как прямоугольник 1440х960:

1 канал 1 строка, 1 канал 2 строка
1 канал 3 строка, 1 канал 4 строка
...
4 канал 479 строка, 4 канал 480 строка



Перефразирую: с учетом входного интерлейсинга это будет кадр вида:

[1 канал нечетное поле] [1 канал четное поле]
[2 канал нечетное поле] [2 канал четное поле]
[3 канал нечетное поле] [3 канал четное поле]
[4 канал нечетное поле] [4 канал четное поле]

Т.е. 4 поля слева, 4 справа. На первый взгляд вполне удобоваримо.
Есть надежда что подав все это в GPU можно будет аппаратно посредством шейдеров сделать деинтерлейсинг в стиле blending, и сразу отрендерить в нужном виде с коррекцией геометрических искажений.

Тем более что как я понимаю сейчас в памяти даже один кадр с TW6869 составлен из отдельных кусков Y и UV, которые вроде как традиционно располагаются друг под другом (поправьте если не так).
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 17.01.2018 17:27 Редактировалось 17.01.2018 18:18 Сообщение: 25
sasamy
4.70

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

Есть надежда что подав все это в GPU можно будет аппаратно посредством шейдеров сделать деинтерлейсинг в стиле blending, и сразу отрендерить в нужном виде с коррекцией геометрических искажений.


мне только непонятно - для чего все это если есть готовый композитор ? под вашу хотелку надо драйвер полностью переписывать причем сути это не поменяет - вам все равно надо писать плагин для коррекции, деинтерлейсинг проще до ума готовый довести - аппаратный на IPU, после композитора один поток и с ним уже можно любой режим использовать.

Кстати, я правильно понимаю что проблема только в том чтобы данные в свое приложение забрать из конвеера Gstreamer ? По-моему вам просто нужен

https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-appsink.html
Спуститься к концу Подняться к началу
Персональная информация
Sol
Добавлено 18.01.2018 09:58 Редактировалось 18.01.2018 09:58 Сообщение: 26
Sol
0

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

мне только непонятно - для чего все это если есть готовый композитор ? под вашу хотелку надо драйвер полностью переписывать причем сути это не поменяет - вам все равно надо писать плагин для коррекции, деинтерлейсинг проще до ума готовый довести - аппаратный на IPU, после композитора один поток и с ним уже можно любой режим использовать.


Да, теперь уже понятно что так проще, спасибо за ценную информацию. Без вас бы не разобрался.

Для чего - лелеял надежду что смогу просто взять поток с этой виртуальной счетверенной камеры как с обычного /dev/video и дальше обрабатывать посредством OpenCV к которой привык. Думаю не одному бы мне это пригодилось - можно было бы умное детектирование движения делать для нескольких камер, обнаружение заданных объектов и т.п.

На той же RaspberryPi данный подход работает на ура и с неплохой производительностью. А вот на iMX получается что адекватной производительности можно добиться только использованием аппаратных средств на всех этапах.

Цитата

Кстати, я правильно понимаю что проблема только в том чтобы данные в свое приложение забрать из конвеера Gstreamer ? По-моему вам просто нужен
https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-appsink.html


Да, именно через appsink я и подаю поток с камеры в OpenCV (если не использовать стандартный подход с /dev/video, мечты о котором и были выше). Одна из проблем тут в том что перед appsink приходится обязательно втыкать плагин videoconvert. А в gstreamer-imx он как я понимаю работает на основе CPU, и на 4-х каналах все это захлебывается еще только на этапе захвата. А мне еще обработку делать надо. Да и подозреваю что если разбираться как работает appsink то там memcpy внутри. В общем данный вариант отпал.

Еще сразу маленький вопрос в эту тему - а какой ваш драйвер для TW6869 можно считать последним? Тот что на github?
Поясню - я использую драйвер который идет в поставке buildroot-2017.08-sk. Но он дает мне синий экран при отсутствии сигнала (что хорошо).
Однако наткнулся на тему 2016 года http://www.starterkit.ru/html/index.php?name=forum&op=view&id=26029 где есть такой текст:
Цитата
в новой версии драйвер не показывает "синий экран" - tw6869 часто путает местами четные и нечетные поля при старте DMA, мне удалось свести к минимуму проявление этого аппаратного бага но синим экраном пришлось пожертвовать


Еще помню была тема что проблему с четным-нечетным полем предложили решать опросом i2c регистров чипа перед началом захвата, и были патчи драйвера под это без отбивки помогло или нет.

Т.е. какой все же драйвер и с какими патчами следует использовать?
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 18.01.2018 11:11 Редактировалось 18.01.2018 12:12 Сообщение: 27
sasamy
4.70

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

Для чего - лелеял надежду что смогу просто взять поток с этой виртуальной счетверенной камеры как с обычного /dev/video и дальше обрабатывать посредством OpenCV
...
На той же RaspberryPi данный подход работает на ура и с неплохой производительностью.


извините но я не верю даже если вы ошиблись с версией (в RPi3 64 битный cortex-a53), opencv продвигает Intel основной продукт которой - десктопные/серверные процессоры с соответствующим потреблением

Цитата

А вот на iMX получается что адекватной производительности можно добиться только использованием аппаратных средств на всех этапах.


это суть любой SoC с CPU ARM - чудес не бывает

Цитата

Думаю не одному бы мне это пригодилось


я думаю по-другому

Цитата

Одна из проблем тут в том что перед appsink приходится обязательно втыкать плагин videoconvert. А в gstreamer-imx он как я понимаю работает на основе CPU, и на 4-х каналах все это захлебывается еще только на этапе захвата.


неправильно думаете - посмотрите пример vcv4.sh (в части imxipuvideotransform) - захват с 4 каналов с отображением на экране и одновременным кодированием и сохранением на носитель - он не "захлёбывается" даже на одноядерном solo

Цитата

Еще сразу маленький вопрос в эту тему - а какой ваш драйвер для TW6869 можно считать последним?


в исходниках драйвера написана версия

https://github.com/sasamy/tw6869/blob/master/tw6869-core.c#L27

на данный момент

MODULE_VERSION("0.5.2");

Цитата

Т.е. какой все же драйвер и с какими патчами следует использовать?


в buildroot-2017.08-sk версия такая же как на github (branch linux-4.x). Патч (если он нужен вам) надо накладывать отдельно

http://www.starterkit.ru/html/index.php?name=forum&op=view&id=27568&last#28786

в следующей всрсии я его допишу в драйвере
Спуститься к концу Подняться к началу
Персональная информация
Sol
Добавлено 19.01.2018 11:07 Редактировалось 19.01.2018 11:08 Сообщение: 28
Sol
0

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

извините но я не верю даже если вы ошиблись с версией (в RPi3 64 битный cortex-a53), opencv продвигает Intel основной продукт которой - десктопные/серверные процессоры с соответствующим потреблением


Да, речь о RPi3.
Чтоб не быть голословным - входной кадр 1280 * 1024 (по площади равен обсуждаемому 1440 * 960), обработка - коррекция искажений широкоугольной линзы по всему кадру. Дальше еще один этап обработки по запросу (не realtime) + отображение по HDMI либо трансляция в сеть. На выходе приемлемые под задачу 10fps. Давайте лично вам пришлю код, сами попробуете если такое недоверие. Кстати ничего не оптимизировано под многоядерность, можно сделать быстрее через OpenMP. И захват по USB, по опыту если это делать через CSI то было бы быстрее. Но CSI часть в RPi проприетарна и закрыта. Есть какие-то потуги с реверс-инжинирингом этой части но сейчас речь не об этом.

Цитата

я думаю по-другому


Имеете полное право так думать.
Но сейчас на iMX6Dual в своем приложении я выжимаю 3-4fps на счетверенном посредством compositor'а и пропущенном через v4l2loopback потоке. Причем заметно тормозит именно этот входной пайплайн в части v4l2loopback и перед ним (по top'у только он ест 30-40% CPU), т.к. голая обработка на статичном кадре без захвата дает требуемые по ТЗ минимальные 10fps.

Зато весь код который понадобилось написать - 30 строк с использованием OpenCV, без vendor-specific решений, в результате он работает без изменений и на обычном ПК.

Я прекрасно понимаю что по сути предлагал "переложить с больной головы на здоровую" - решить проблемы производительности не написанием GST плагина самому, а модификацией драйвера видеозахвата чужими руками. Поэтому эта идея еще несколько постов назад мной же была признана нездоровой.

Но мысль предыдущего поста была в том, что если вдруг не мне одному нужно делать какую-то обработку на борту счетверенного потока и нет квалификации по написанию gst plugin - драйвер со встроенной поддержкой этой функции и работающий без загрузки CPU - имел бы смысл.

Цитата

неправильно думаете - посмотрите пример vcv4.sh (в части imxipuvideotransform) - захват с 4 каналов с отображением на экране и одновременным кодированием и сохранением на носитель - он не "захлёбывается" даже на одноядерном solo


Данный скипт как пример harware-based обработки очень показателен и отлично работает. Но мне нужна обработка на CPU, которую загнать в какой-то hardware блок iMX6 очень затруднительно.

Впихнуть imxipuvideotransform (как и imxipuvideotransform и imxpxpvideotransform) вместо videoconvert пробовал неоднократно, не вышло как ни крутил. А videoconvert это 100% CPU-based решение, разве нет?

Дополнительно как я понял если сделать всю обработку на GPU - придется лицензировать у Freescale их реализацию OpenGL, так?
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 19.01.2018 11:56 Редактировалось 19.01.2018 13:09 Сообщение: 29
sasamy
4.70

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

обработка - коррекция искажений широкоугольной линзы по всему кадру
...
На выходе приемлемые под задачу 10fps.


так у вас только одна корррекция нагрузила CPU на 100 % - больше половины кадров дропается, теперь попробуйте туда деинтерлейсинг хотя бы добавить

Цитата

Давайте лично вам пришлю код, сами попробуете если такое недоверие.


тут и без кода всё понятно и предсказуемо - я вам написал в предыдущем ответе

Цитата

Зато весь код который понадобилось написать - 30 строк


тут просто нет слов, при этом вы мне предлгаете переписать драйвер на выходе которого получится такая дичь что ее потом никакими готовыми стандартными средствами тем более аппаратно на imx6 не обработать

Цитата

вдруг не мне одному нужно делать какую-то обработку на борту счетверенного потока


ага - очереди выстроятся из желающих

Цитата

Впихнуть imxipuvideotransform (как и imxipuvideotransform и imxpxpvideotransform) вместо videoconvert пробовал неоднократно, не вышло как ни крутил.


какие форматы приемлемы на входе вашего приложения ?

Цитата

Дополнительно как я понял если сделать всю обработку на GPU - придется лицензировать у Freescale их реализацию OpenGL, так?


если вы собираетесь продавать устройства с их проприетарными библиотеками - да, нужны какие-то отчисления, для собственных разработок которые вы сами используете - нет. Если уж на то пошло - для GPU есть драйвер в ванильном ядре и gallium драйвер в майнстримной mesa (etnaviv) на основе reverse engineering, но я не знаю насколько они сейчас работоспособны и полноценны.
Спуститься к концу Подняться к началу
Персональная информация
Sol
Добавлено 19.01.2018 13:24 Сообщение: 30
Sol
0

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

так у вас только одна корррекция нагрузила CPU на 100 % - больше половины кадров дропается, теперь попробуйте туда деинтерлейсинг хотя бы добавить.
тут и без кода всё понятно и предсказуемо

Цитата

ага - очереди выстроятся из желающих

Цитата

тут просто нет слов, при этом вы мне предлгаете переписать драйвер на выходе которого получится такая дичь что ее потом аппаратно на imx6 не обработать


Александр, давайте поумерим тон и пыл. Идея переписать драйвер из моих уст изжила себя уже несколько постов назад, давайте ее окончательно похороним на этом сообщении и возвращаться к ней уже не будем.
Защищать здесь адекватность решаемых мной задач embedded machine vision на базе CPU-only решений на ARM чипах тоже не буду, нет ни времени ни желания. В приватной беседе - пожалуйста, есть о чем поговорить, тем более с человеком вашей квалификации.

Цитата

какие форматы приемлемы на входе вашего приложения ?

RGB888, возможно с какими-то дополнительными ограничениями которые мне пока не совсем очевидны.
Спуститься к концу Подняться к началу
Персональная информация
Форум » starterkit.ru » Вспомогательные средства