Ник:
Пароль:

Контакты

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
Добавлено 19.01.2018 16:39 Редактировалось 19.01.2018 16:39 Сообщение: 31
sasamy
4.70

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

RGB888


# gst-inspect-1.0 imxipuvideotransform
....
SRC template: 'src'
Availability: Always
Capabilities:
video/x-raw
format: { (string)RGB16, (string)BGR, (string)RGB, (string)BGRx, (string)BGRA, (string)RGBx, (string)RGBA, (string)ABGR, (string)UYVY, (string)v308, (string)NV12, (string)YV12, (string)I420, (string)Y42B, (string)Y444 }
Спуститься к концу Подняться к началу
Персональная информация
Sol
Добавлено 19.01.2018 17:33 Сообщение: 32
Sol
0

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

RGB888


# gst-inspect-1.0 imxipuvideotransform
....
SRC template: 'src'
Availability: Always
Capabilities:
video/x-raw
format: { (string)RGB16, (string)BGR, (string)RGB, (string)BGRx, (string)BGRA, (string)RGBx, (string)RGBA, (string)ABGR, (string)UYVY, (string)v308, (string)NV12, (string)YV12, (string)I420, (string)Y42B, (string)Y444 }


Это понятно, иначе бы я получал "element can't handle caps".
А я получаю голый сегфолт:

"videotestsrc ! video/x-raw, format=RGBx, width=1440, height=960 ! videoconvert ! video/x-raw, format=BGR, width=1440, height=960 ! appsink"
Работает.

"videotestsrc ! video/x-raw, format=RGBx, width=1440, height=960 ! imxipuvideotransform ! video/x-raw, format=BGR, width=1440, height=960 ! appsink"

Segmentation fault при первой же попытке заграбить кадр (т.е. старте пайплайна).
По GST_DEBUG судя по всему на функции "gst_imx_ipu_map_phys_mem".

Тот же сегфолт и на imxpxpvideotransform и на imxg2dvideotransform.

Проблема возникает именно при использовании appsink. Если вместо него взять imxg2dvideosink (с еще одним videoconvert чтоб он смог принять format=BGR) и запустить данный пайплайн через gst-launch, то все работает, но с предсказуемо отвратительным fps.

Т.е. пока вердикт что videoconvert тормозит но работает. Все аппаратные аналоги - сегфолтятся.
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 20.01.2018 23:33 Редактировалось 20.01.2018 23:34 Сообщение: 33
sasamy
4.70

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

Проблема возникает именно при использовании appsink.
...
Т.е. пока вердикт что videoconvert тормозит но работает. Все аппаратные аналоги - сегфолтятся.


проблемы скорей всего у вас в коде, попробуйте у себя

https://yadi.sk/d/pm5y_v563RdZFQ

собирать например так

make BRDIR=/home/user/buildroot-2017.08-sk

BRDIR должна содержать путь к собранному buildroot на вашей системе.

запуск

./tst

У меня работает и не сегфолтится, вывод изображения на HDMI 1920х1080, бинарник в архиве собран с buildroot-2017.08-sk
Спуститься к концу Подняться к началу
Персональная информация
Sol
Добавлено 22.01.2018 16:44 Сообщение: 34
Sol
0

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

проблемы скорей всего у вас в коде, попробуйте у себя

https://yadi.sk/d/pm5y_v563RdZFQ
У меня работает и не сегфолтится, вывод изображения на HDMI 1920х1080, бинарник в архиве собран с buildroot-2017.08-sk


sasamy, спасибо за код!
Да, у меня тоже он работает без сегфолта. Поставил gdb, прогнал и ничего дельного не получил кроме того что сегфолтится на стыке OpenCV и GStreamer (https://github.com/opencv/opencv/blob/3.1.0/modules/videoio/src/cap_gstreamer.cpp) в момент чтения кадра. Глубже пока раскопать не могу.

Т.е. проблема судя по всему в том что не нужно использовать OpenCV API для захвата кадра и лучше делать все на базе "голого" GStreamer'а.
Спуститься к концу Подняться к началу
Персональная информация
Sol
Добавлено 13.02.2018 13:05 Сообщение: 35
Sol
0

Пункты: 578
Регистрация: 01.07.2010
Уважаемый sasamy, добрый день!
Наступил на очередные грабли с TW6869, без вас судя по всему никак.

Суть: не могу переподключить TW6869 по mPCIE после remove
Плата iMX6S-SODIMM + SK-TW6869, buildroot2017.08

Цепочка действий:
1. Плата загрузилась.
2. /root/v1.sh - OK
3. echo 1 > /sys/bus/pci/devices/0000\:01\:00.0/remove - OK
4. echo 1 > /sys/class/pci_bus/0000\:01/rescan - OK
5. /root/v1.sh - уже не работает.

Вывод в консоль после пункта 4:
Код

pci 0000:01:00.0: Setting PCI class for tw6869/65 PCIe device
pcieport 0000:00:00.0: BAR 8: assigned [mem 0x01300000-0x013fffff]
pci 0000:01:00.0: BAR 0: assigned [mem 0x01100000-0x01100fff pref]
pcieport 0000:00:00.0: PCI bridge to [bus 01]
pcieport 0000:00:00.0: bridge window [mem 0x01300000-0x013fffff]
pcieport 0000:00:00.0: bridge window [mem 0x01100000-0x011fffff pref]
tw6869 0000:01:00.0: vch0 registered as video0
tw6869 0000:01:00.0: vch1 registered as video1
tw6869 0000:01:00.0: vch2 registered as video2
tw6869 0000:01:00.0: vch3 registered as video3
tw6869 0000:01:00.0: vch4 registered as video4
tw6869 0000:01:00.0: vch5 registered as video5
tw6869 0000:01:00.0: vch6 registered as video6
tw6869 0000:01:00.0: vch7 registered as video7
tw6869 0000:01:00.0: driver loaded


Ошибка в консоли после пункта 5:
Код

irq 306: nobody cared (try booting with the "irqpoll" option)
CPU: 0 PID: 0 Comm: swapper/0 Tainted: G O 4.1.15 #1
Hardware name: Freescale i.MX6 Quad/DualLite (Device Tree)
[<80016698>] (unwind_backtrace) from [<80012640>] (show_stack+0x10/0x14)
[<80012640>] (show_stack) from [<806e0f78>] (dump_stack+0x74/0xb4)
[<806e0f78>] (dump_stack) from [<80067588>] (__report_bad_irq+0x28/0xd0)
[<80067588>] (__report_bad_irq) from [<80067b1c>] (note_interrupt+0x27c/0x2cc)
[<80067b1c>] (note_interrupt) from [<80065580>] (handle_irq_event_percpu+0xe0/0x140)
[<80065580>] (handle_irq_event_percpu) from [<8006561c>] (handle_irq_event+0x3c/0x5c)
[<8006561c>] (handle_irq_event) from [<80068298>] (handle_fasteoi_irq+0xe0/0x198)
[<80068298>] (handle_fasteoi_irq) from [<80064bb8>] (generic_handle_irq+0x2c/0x3c)
[<80064bb8>] (generic_handle_irq) from [<80064e70>] (__handle_domain_irq+0x7c/0xec)
[<80064e70>] (__handle_domain_irq) from [<800093ec>] (gic_handle_irq+0x24/0x5c)
[<800093ec>] (gic_handle_irq) from [<80013140>] (__irq_svc+0x40/0x74)
Exception stack(0x809c3e48 to 0x809c3e90)
3e40: 00000000 80888314 80a180c0 00000000 00000202 00000000
3e60: 00000010 809c2000 00000001 809c4080 88008000 00000000 00000001 809c3e90
3e80: 800304d4 800304e4 200f0113 ffffffff
[<80013140>] (__irq_svc) from [<800304e4>] (__do_softirq+0xa4/0x23c)
[<800304e4>] (__do_softirq) from [<80030934>] (irq_exit+0xc0/0xfc)
[<80030934>] (irq_exit) from [<80064e74>] (__handle_domain_irq+0x80/0xec)
[<80064e74>] (__handle_domain_irq) from [<800093ec>] (gic_handle_irq+0x24/0x5c)
[<800093ec>] (gic_handle_irq) from [<80013140>] (__irq_svc+0x40/0x74)
Exception stack(0x809c3f18 to 0x809c3f60)
3f00: 809c3f60 fffffff7
3f20: ffb899f9 0000000c 8bb25e90 00000000 ffb899f9 0000000c ff223f16 0000000c
3f40: 00000001 00000000 00000017 809c3f60 a6aaaaab 80492dfc 800f0013 ffffffff
[<80013140>] (__irq_svc) from [<80492dfc>] (cpuidle_enter_state+0xcc/0x1f8)
[<80492dfc>] (cpuidle_enter_state) from [<8005ca34>] (cpu_startup_entry+0x1f8/0x318)
[<8005ca34>] (cpu_startup_entry) from [<80975c60>] (start_kernel+0x39c/0x3a8)
handlers:
[<802b8158>] pcie_pme_irq
Disabling IRQ #306


Проверял, IRQ #306 завязана именно на TW6869. Номер самого прерывания каждый раз разный.

Т.е. симптомы: цепочка remove-rescan проходит без видимых ошибок в консоли.
Но при попытке после этого использовать TW6869 ядро ругается на необработанное IRQ и захват видео уже не работает. Помогает только полный reboot.

Как с этим можно побороться?
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 13.02.2018 18:07 Сообщение: 36
sasamy
4.70

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

Т.е. симптомы: цепочка remove-rescan проходит без видимых ошибок в консоли.


станно - у меня сразу trace с ошибкой. Ошибка эта не в драйвере tw6869 - по какой-то причине после remove-rescan ядро назначает для tw6869 левое прерывание от контроллера GPIO

cat /proc/interrupts

после загрузки

310: 0 0 0 0 GPC 123 Level PCIe PME, tw6869

после remove-rescan

54: 100000 0 0 0 gpio-mxc 18 Edge tw6869
Спуститься к концу Подняться к началу
Персональная информация
Sol
Добавлено 13.02.2018 18:48 Сообщение: 37
Sol
0

Пункты: 578
Регистрация: 01.07.2010
Цитата
Ошибка эта не в драйвере tw6869 - по какой-то причине после remove-rescan ядро назначает для tw6869 левое прерывание от контроллера GPIO


Ну пусть трейса у меня нет, но остальные симптомы те же с "левым" прерыванием.
Может будут какие-то советы куда копать?

Гуглинг дал что-то более менее близкое тут https://community.nxp.com/thread/385372 с отсылкой на Errata от i.MX6
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 13.02.2018 21:00 Редактировалось 13.02.2018 21:06 Сообщение: 38
sasamy
4.70

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

Гуглинг дал что-то более менее близкое тут https://community.nxp.com/thread/385372 с отсылкой на Errata от i.MX6


еррата тут думаю не в тему - проблема с маппингом legacy interrupt, вот более близкая тема

https://community.nxp.com/thread/353000

почему после remove-rescan преывание мапится неправильно - я не знаю ну и основная проблема - tw6869 не работает с MSI
Спуститься к концу Подняться к началу
Персональная информация
Sol
Добавлено 29.05.2018 13:08 Сообщение: 39
Sol
0

Пункты: 578
Регистрация: 01.07.2010
Уважаемый sasamy, добрый день!

Снова нужна ваша помощь, наступил на ранее не замеченную тонкость в работе драйвера TW6869 и не пойму как ее обойти.

Кратко суть:
1. Для чистоты перезагружаем систему.
2. Запускаем gstreamer без физически подключенной камеры (например /root/v1.sh).
Пайплайн резонно не работает.
3. Подключаем камеру - в консоли видно что TW6869 факт появления видеосигнала видит, но DMA поток не стартует. На экране пусто.
4. Убиваем gstreamer и снова его запускаем уже при подключенной камере. Все работает отлично.
5. А вот теперь интересно - если теперь повторить пункт 2 (сначала запустить gstreamer, а только потом подключить камеру), то DMA поток стартует нормально и опять же все работает отлично.

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

Вывод консоли для вышеописанного:
(2) Запускаем gstreamer без физически подключенной камеры:
Код
/root/v1.sh 1
Setting pipeline to PAUSED ...
tw6869 0000:01:00.0: tw6869_querystd: vch1: unknown std detected
tw6869 0000:01:00.0: tw6869_querystd: vch1: unknown std detected
tw6869 0000:01:00.0: tw6869_g_std: vch1: PAL video standard
Pipeline is live and does not need PREROLL ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock

(gst-launch-1.0:492): GStreamer-tw6869 0000:01:00.0: tw6869_vch_dma_wait: vch1: video not present
tw6869 0000:01:00.0: tw_dma_enable: DMA 1
CRITICAL **: Registering meta implementation 'GstImxV4l2Meta' without init function
tw6869 0000:01:00.0: tw6869_irq: ch1: signal lost
tw6869 0000:01:00.0: tw6869_dma_reset: DMA 1
tw6869 0000:01:00.0: tw6869_vch_dma_wait: vch1: video not present


(3) Подключаем камеру при в первый раз запущенном пайплайне:
Код
tw6869 0000:01:00.0: tw6869_irq: ch1: signal recovered
tw6869 0000:01:00.0: tw6869_dma_reset: DMA 1
tw6869 0000:01:00.0: tw6869_vch_dma_wait: vch1: odd field
tw6869 0000:01:00.0: tw6869_vch_dma_wait: vch1: odd field
tw6869 0000:01:00.0: tw6869_vch_dma_wait: vch1: even field
tw6869 0000:01:00.0: tw6869_vch_dma_wait: vch1: odd field
tw6869 0000:01:00.0: tw6869_vch_dma_wait: vch1: odd field
tw6869 0000:01:00.0: tw6869_vch_dma_wait: vch1: even field
tw6869 0000:01:00.0: tw6869_vch_dma_wait: vch1: even field
tw6869 0000:01:00.0: tw6869_vch_dma_wait: vch1: odd field
tw6869 0000:01:00.0: tw6869_vch_dma_wait: vch1: even field
tw6869 0000:01:00.0: tw6869_vch_dma_wait: vch1: even field
tw6869 0000:01:00.0: tw6869_vch_dma_wait: vch1: odd field
tw6869 0000:01:00.0: tw6869_dma_reset: DMA 1
....
Далее то же самое по кругу


(4) Убиваем gstreamer и снова его запускаем уже при подключенной камере:
Код
# /root/v1.sh 1
Setting pipeline to PAUSED ...
tw6869 0000:01:00.0: tw6869_querystd: vch1: NTSC std detected
tw6869 0000:01:00.0: tw6869_querystd: vch1: NTSC std detected
tw6869 0000:01:00.0: tw6869_g_std: vch1: NTSC video standard
Pipeline is live and does not need PREROLL ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock

(gst-launch-1.0:502): GStreamer-tw6869 0000:01:00.0: tw6869_vch_dma_wait: vch1: odd field
tw6869 0000:01:00.0: tw6869_vch_dma_wait: vch1: even field
tw6869 0000:01:00.0: tw_dma_enable: DMA 1
CRITICAL **: Registering meta implementation 'GstImxV4l2Meta' without init function
Все работает


(5.1) Запускаем gstreamer не в первый раз, но камера отключена:
Код
# /root/v1.sh 1
Setting pipeline to PAUSED ...
tw6869 0000:01:00.0: tw6869_querystd: vch1: unknown std detected
tw6869 0000:01:00.0: tw6869_querystd: vch1: unknown std detected
tw6869 0000:01:00.0: tw6869_g_std: vch1: NTSC video standard
Pipeline is live and does not need PREROLL ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock

(gst-launch-1.0:511): GStreamer-tw6869 0000:01:00.0: tw6869_vch_dma_wait: vch1: video not present
tw6869 0000:01:00.0: tw_dma_enable: DMA 1
CRITICAL **: Registering meta implementation 'GstImxV4l2Meta' without init function
tw6869 0000:01:00.0: tw6869_irq: ch1: signal lost
tw6869 0000:01:00.0: tw6869_dma_reset: DMA 1
tw6869 0000:01:00.0: tw6869_vch_dma_wait: vch1: video not present


(5.2) теперь подключаем камеру:
Код
tw6869 0000:01:00.0: tw6869_irq: ch1: signal recovered
tw6869 0000:01:00.0: tw6869_dma_reset: DMA 1
tw6869 0000:01:00.0: tw6869_vch_dma_wait: vch1: even field
tw6869 0000:01:00.0: tw6869_dma_reset: DMA 1
tw6869 0000:01:00.0: tw6869_vch_dma_wait: vch1: even field
Все работает


Драйвер TW6869 использую свежий (из комплекта buildroot-2017.08-sk) + патч проверки четного/нечетного поля из http://www.starterkit.ru/html/index.php?name=forum&op=view&id=24324&num=3#28957
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 29.05.2018 13:46 Редактировалось 29.05.2018 14:03 Сообщение: 40
sasamy
4.70

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

2. Запускаем gstreamer без физически подключенной камеры (например /root/v1.sh).
Пайплайн резонно не работает.


у меня работает - синий экран если нет сигнала

Цитата

tw6869 0000:01:00.0: tw6869_g_std: vch1: PAL video standard
...
tw6869 0000:01:00.0: tw6869_g_std: vch1: NTSC video standard


какой стандарт на ваших камерах ? По умолчанию в ядре которое в buildroot

buildroot-2017.08-sk/output/build/linux-custom/drivers/media/pci/tw6869/tw6869.h


#define TW_DEFAULT_V4L2_STD V4L2_STD_PAL

и в этом кроется проблема - если нет видеосигнала конвеер стартует с дефолтными параметрами - PAL по умолчанию 720x576, если вы потом подклчаете камеру с NTSC у него другое разрешение 720x480. В общем если используете NTSC - поменяйте

#define TW_DEFAULT_V4L2_STD V4L2_STD_NTSC

конвеер не конфигурируется динамически. По хорошему - надо бы добавить параметр для плагина imxv4l2videosrc для дефолтного стандарта а не исходники в ядре править.
Спуститься к концу Подняться к началу
Персональная информация
Форум » starterkit.ru » Вспомогательные средства