LINUX.ORG.RU

Проблемы с захватом видео

 em28xx,


0

1

Уважаемые форумчане, с Новым годом всех! :)

Прошу помощи в решении одной проблемы, на которую напоролся на работе. Имеется промышленное оборудование, в которое встроен модуль для оцифровки видео с камеры, подключаемый к компьютеру по USB. В lsusb он представляется следующим образом:

Bus 002 Device 006: ID eb1a:2821 eMPIA Technology, Inc.
Однозначно определить, что-же это за устройство, не получилось. В документации последней версии ядра для модуля em28xx оно числится как «Unknown EM2750/28xx video grabber».

Методом проб и ошибок удалось подобрать параметр card=9 для этого модуля, при указании которого на рабочем ноутбуке (3-5-3-gentoo) появилась картинка и звук с микрофона (встроенного в пульт управления камерой).

При подключении в dmesg теперь появляется следующее (без параметра card были сообщения о невозможности определить устройство и выводился полный перечень поддерживаемых устройств):

Jan  3 23:02:16 pc2 kernel: [10129.895088] usb 1-3: new high-speed USB device number 2 using ehci_hcd
Jan  3 23:02:16 pc2 kernel: [10130.012535] usb 1-3: New USB device found, idVendor=eb1a, idProduct=2821
Jan  3 23:02:16 pc2 kernel: [10130.012540] usb 1-3: New USB device strings: Mfr=0, Product=1, SerialNumber=0
Jan  3 23:02:16 pc2 kernel: [10130.012542] usb 1-3: Product: USB 2821 Device
Jan  3 23:02:16 pc2 kernel: [10130.012947] em28xx: New device  USB 2821 Device @ 480 Mbps (eb1a:2821, interface 0, class 0)
Jan  3 23:02:16 pc2 kernel: [10130.012949] em28xx: Video interface 0 found
Jan  3 23:02:16 pc2 kernel: [10130.013025] em28xx #0: chip ID is em2820 (or em2710)
Jan  3 23:02:17 pc2 kernel: [10130.113530] em28xx #0: i2c eeprom 00: 1a eb 67 95 1a eb 21 28 90 00 11 03 6a 22 00 00
Jan  3 23:02:17 pc2 kernel: [10130.113540] em28xx #0: i2c eeprom 10: 00 00 04 57 06 21 01 00 00 00 00 00 00 00 00 00
Jan  3 23:02:17 pc2 kernel: [10130.113549] em28xx #0: i2c eeprom 20: 02 00 01 01 f0 10 00 00 00 00 00 00 5b 00 00 00
Jan  3 23:02:17 pc2 kernel: [10130.113558] em28xx #0: i2c eeprom 30: 00 00 20 40 20 80 02 20 10 01 03 01 00 00 00 00
Jan  3 23:02:17 pc2 kernel: [10130.113566] em28xx #0: i2c eeprom 40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Jan  3 23:02:17 pc2 kernel: [10130.113574] em28xx #0: i2c eeprom 50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Jan  3 23:02:17 pc2 kernel: [10130.113583] em28xx #0: i2c eeprom 60: 00 00 00 00 00 00 00 00 00 00 22 03 55 00 53 00
Jan  3 23:02:17 pc2 kernel: [10130.113591] em28xx #0: i2c eeprom 70: 42 00 20 00 32 00 38 00 32 00 31 00 20 00 44 00
Jan  3 23:02:17 pc2 kernel: [10130.113599] em28xx #0: i2c eeprom 80: 65 00 76 00 69 00 63 00 65 00 00 00 00 00 00 00
Jan  3 23:02:17 pc2 kernel: [10130.113608] em28xx #0: i2c eeprom 90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Jan  3 23:02:17 pc2 kernel: [10130.113616] em28xx #0: i2c eeprom a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Jan  3 23:02:17 pc2 kernel: [10130.113624] em28xx #0: i2c eeprom b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Jan  3 23:02:17 pc2 kernel: [10130.113633] em28xx #0: i2c eeprom c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Jan  3 23:02:17 pc2 kernel: [10130.113641] em28xx #0: i2c eeprom d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Jan  3 23:02:17 pc2 kernel: [10130.113649] em28xx #0: i2c eeprom e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Jan  3 23:02:17 pc2 kernel: [10130.113658] em28xx #0: i2c eeprom f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Jan  3 23:02:17 pc2 kernel: [10130.113667] em28xx #0: EEPROM ID= 0x9567eb1a, EEPROM hash = 0x37da7b8a
Jan  3 23:02:17 pc2 kernel: [10130.113669] em28xx #0: EEPROM info:
Jan  3 23:02:17 pc2 kernel: [10130.113671] em28xx #0:   AC97 audio (5 sample rates)
Jan  3 23:02:17 pc2 kernel: [10130.113672] em28xx #0:   500mA max power
Jan  3 23:02:17 pc2 kernel: [10130.113674] em28xx #0:   Table at 0x04, strings=0x226a, 0x0000, 0x0000
Jan  3 23:02:17 pc2 kernel: [10130.113677] em28xx #0: Identified as Pinnacle Dazzle DVC 90/100/101/107 / Kaiser Baas Video to DVD maker / Kworld DVD Maker 2 / Plextor ConvertX PX-AV100U (card=9)
Jan  3 23:02:17 pc2 kernel: [10130.296535] saa7115 7-0025: saa7113 found (1f7113d0e100000) @ 0x4a (em28xx #0)
Jan  3 23:02:17 pc2 kernel: [10130.680277] em28xx #0: Config register raw data: 0x90
Jan  3 23:02:17 pc2 kernel: [10130.692149] em28xx #0: AC97 vendor ID = 0x83847650
Jan  3 23:02:17 pc2 kernel: [10130.698158] em28xx #0: AC97 features = 0x6a90
Jan  3 23:02:17 pc2 kernel: [10130.698161] em28xx #0: Empia 202 AC97 audio processor detected
Jan  3 23:02:17 pc2 kernel: [10130.931154] em28xx #0: v4l2 driver version 0.1.3
Jan  3 23:02:18 pc2 kernel: [10131.398097] em28xx #0: V4L2 video device registered as video0
Jan  3 23:02:18 pc2 kernel: [10131.401910] ALSA mixer.c:887 2:1: cannot get min/max values for control 2 (id 2)
Jan  3 23:02:18 pc2 mtp-probe: checking bus 1, device 2: «/sys/devices/pci0000:00/0000:00:1a.7/usb1/1-3»
Jan  3 23:02:18 pc2 mtp-probe: bus: 1, device: 2 was not an MTP device

Однако при подключении к настольному компьютеру (HP Compaq 8000 desktop) с OpenSUSE 12.2 и ядром 3.6.9-pf-1-postfactum (пробовалось так-же и родное для этой версии дистрибутива ядро 3.4-11-2.16.1-desktop) ситуация резко изменилась. На изображении появились искажения, битые кадры. Выглядят они вот так и так, появляются примерно через каждые 2-5 секунд. Вот 10-секундный видеоролик (1.1 мб), демонстрирующий проблему.

Решил изучить параметры модуля на предмет того, что могло-бы помочь в диагностике или исправлении ошибки. Нашёл параметр isoc_debug, при указании которого в dmesg в процессе захвата видео пишется вот что:

Jan  3 21:50:46 pc2 kernel: [ 5839.479541] em28xx #0 buffer_filled :[ffff88007601a100/31] wakeup
Jan  3 21:50:46 pc2 kernel: [ 5839.495567] em28xx #0 em28xx_copy_video :Overflow of 4 bytes past buffer end(2)
Jan  3 21:50:46 pc2 kernel: [ 5839.495572] em28xx #0 em28xx_isoc_copy :Video frame 131, length=2576, odd
Jan  3 21:50:46 pc2 kernel: [ 5839.511538] em28xx #0 print_err_status :URB packet 5, status -71 [Bit-stuff error (bad cable?)].
Jan  3 21:50:46 pc2 kernel: [ 5839.511544] em28xx #0 print_err_status :URB packet 7, status -71 [Bit-stuff error (bad cable?)].
Jan  3 21:50:46 pc2 kernel: [ 5839.511546] em28xx #0 print_err_status :URB packet 8, status -71 [Bit-stuff error (bad cable?)].
Jan  3 21:50:46 pc2 kernel: [ 5839.519537] em28xx #0 em28xx_isoc_copy :Video frame 132, length=2576, even
Jan  3 21:50:46 pc2 kernel: [ 5839.519540] em28xx #0 buffer_filled :[ffff8800388b9700/0] wakeup
Jan  3 21:50:46 pc2 kernel: [ 5839.535595] em28xx #0 em28xx_copy_video :Overflow of 4 bytes past buffer end(2)
Jan  3 21:50:46 pc2 kernel: [ 5839.535601] em28xx #0 em28xx_isoc_copy :Video frame 133, length=2576, odd
Jan  3 21:50:46 pc2 kernel: [ 5839.559527] em28xx #0 em28xx_copy_video :Overflow of 1284 bytes past buffer end(2)
Jan  3 21:50:46 pc2 kernel: [ 5839.559531] em28xx #0 em28xx_isoc_copy :Video frame 134, length=2576, even
Jan  3 21:50:46 pc2 kernel: [ 5839.559534] em28xx #0 buffer_filled :[ffff8800388b9300/1] wakeup
Jan  3 21:50:46 pc2 kernel: [ 5839.575562] em28xx #0 print_err_status :URB packet 17, status -71 [Bit-stuff error (bad cable?)].
Jan  3 21:50:46 pc2 kernel: [ 5839.575567] em28xx #0 print_err_status :URB packet 18, status -71 [Bit-stuff error (bad cable?)].
Jan  3 21:50:46 pc2 kernel: [ 5839.575573] em28xx #0 print_err_status :URB packet 21, status -71 [Bit-stuff error (bad cable?)].
Jan  3 21:50:46 pc2 kernel: [ 5839.575575] em28xx #0 print_err_status :URB packet 22, status -71 [Bit-stuff error (bad cable?)].
Jan  3 21:50:46 pc2 kernel: [ 5839.575599] em28xx #0 em28xx_isoc_copy :Video frame 135, length=2576, odd
Jan  3 21:50:46 pc2 kernel: [ 5839.599537] em28xx #0 em28xx_copy_video :Overflow of 1284 bytes past buffer end(2)
Jan  3 21:50:46 pc2 kernel: [ 5839.599541] em28xx #0 em28xx_isoc_copy :Video frame 136, length=2576, even
Jan  3 21:50:46 pc2 kernel: [ 5839.599544] em28xx #0 buffer_filled :[ffff8800388b9500/2] wakeup

Строчки URB packet 7, status -71 как раз совпадают по времени появления с битыми кадрами. Поверхностный поиск по ним результатов не принёс, попадаются лишь фрагменты исходного кода драйверов.

Быть может кто-то сталкивался с аналогичной проблемой. Сообщите, какую ещё информацию нужно предоставить. Буду благодарен за любую помощь!

★★

URB packet 17, status -71 [Bit-stuff error (bad cable?)]

Чтобы исключить проблему с железом на стационарном ПК, может попробовать подключить камеру к ещё одной машине?

Suigintou ★★★★★
()
Ответ на: комментарий от Suigintou

Проблема действительно оказалась в железе, а именно в особом сочетании USB-кабелей и разъёмов: перепробовав с десяток USB-кабелей отобрали пару штук, на которых описанный глюк не проявляется вообще, однако только если подключать их к портам на материнке. Если подключаться к USB-разъёмам на передней панели ПК, глюки проскакивают, но нечасто. Очевидно, плохо согласована линия передачи. И похоже, что сэкономили не только китайцы со своим устройством захвата видео (которое вмонтировано в недешёвое американское оборудование, тунец), но и HP со своими десктопами: флешки, воткнутые во фронтальные разъёмы, тоже определяются через раз...

TwisteR ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.