raspberry pi + logitech C270 kamera

Fórumok

Sziasztok!

D-link HUB-D4 aktív USB HUB-on keresztül összekötve az PRI-t és a webkamerát (TP-LINK wifi-t is)
nem megy. :(
Infók:

uname -r:
3.2.21

lsmod:

Module Size Used by
evdev 6508 1
snd_usb_audio 67940 0
snd_pcm 47960 1 snd_usb_audio
snd_timer 13188 1 snd_pcm
snd_page_alloc 2624 1 snd_pcm
snd_hwdep 3952 1 snd_usb_audio
uvcvideo 52472 0
snd_usbmidi_lib 12736 1 snd_usb_audio
videodev 66364 1 uvcvideo
i2c_core 13004 1 videodev
snd_rawmidi 12992 1 snd_usbmidi_lib
snd_seq_device 3612 1 snd_rawmidi
snd 31552 7 snd_usb_audio,snd_pcm,snd_timer,snd_hwdep,snd_usbmidi_lib,snd_rawmidi,snd_seq_device
fuse 48316 3
arc4 832 2
ath9k_htc 42332 0
mac80211 176552 1 ath9k_htc
ath9k_common 1160 1 ath9k_htc
ath9k_hw 328428 2 ath9k_htc,ath9k_common
ath 12548 3 ath9k_htc,ath9k_common,ath9k_hw
cfg80211 127040 3 ath9k_htc,mac80211,ath

lsusb:

Bus 001 Device 007: ID 046d:0825 Logitech, Inc. Webcam C270
Bus 001 Device 005: ID 2101:8501 ActionStar
Bus 001 Device 006: ID 0cf3:9271 Atheros Communications, Inc. AR9271 802.11n
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp.
Bus 001 Device 004: ID 2101:8500 ActionStar
Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

dmesg az fswebcam előtt:

uvcvideo: Found UVC 1.00 device (046d:0825)
input: UVC Camera (046d:0825) as /devices/platform/bcm2708_usb/usb1/1-1/1-1.3/1$
usbcore: registered new interface driver uvcvideo
USB Video Class driver (1.1.1)
7:3:1: cannot set freq 16000 to ep 0x86
7:3:2: cannot set freq 24000 to ep 0x86
7:3:3: cannot set freq 32000 to ep 0x86
7:3:4: cannot set freq 48000 to ep 0x86
usbcore: registered new interface driver snd-usb-audio

Az fswebcam-mal próbáltam volna képet készíttetni:
....
Using palette MJPEG
Adjusting resolution from 384x288 to 352x288.
src_v4l2_set_mmap,693: mmap information:
src_v4l2_set_mmap,694: frames=4
src_v4l2_set_mmap,741: 0 length=102400
src_v4l2_set_mmap,741: 1 length=102400
src_v4l2_set_mmap,741: 2 length=102400
src_v4l2_set_mmap,741: 3 length=102400
Error starting stream.
VIDIOC_STREAMON: Unknown error 4008
Unable to use mmap. Using read instead.
Unable to use read.
Segmentation fault

Ez lett az eredmény :(((
dmesg az fswebcam után:
uvcvideo: Failed to submit URB 0 (-4008).
INFO:: periodic_channel_available: Total channels: 8, Periodic: 5, Non-periodic: 3

INFO:: schedule_periodic: No host channel available for periodic transfer.

ERROR::dwc_otg_hcd_urb_enqueue:487: DWC OTG HCD URB Enqueue failed adding QTD. Error status -4008

uvcvideo: Failed to submit URB 0 (-4008).
INFO:: periodic_channel_available: Total channels: 8, Periodic: 5, Non-periodic: 3

INFO:: schedule_periodic: No host channel available for periodic transfer.

ERROR::dwc_otg_hcd_urb_enqueue:487: DWC OTG HCD URB Enqueue failed adding QTD. Error status -4008

uvcvideo: Failed to submit URB 0 (-4008).

Találkoztatok már ilyennel?
Mi lehet? gugliztam nem keveset, de érdemi infót nem találtam :(
Az aktív HUB lehet nem megfelelő???

Hozzászólások

A bibi az fswebcam-ban lehet. Én mjpeg_streamerrel küzdüöttem hasonló problémával. Nincs benne olyan freq sor, amihez szinkronizálni tudna;
" 7:3:1: cannot set freq 16000 to ep 0x86
7:3:2: cannot set freq 24000 to ep 0x86
7:3:3: cannot set freq 32000 to ep 0x86
7:3:4: cannot set freq 48000 to ep 0x86 "

Nem rpi-n csináltam, hanem routeren. Valójában nem sok különbség van, csak nincs rajta video be/kimenet.... Innen ismerős a hiba jelenség.
Próbáld meg letölteni a forrását, és rpi alá lefordítani hátha segít. HA webkamerázgatni akarsz, akkor ez az egyik legkisebb erőforrás igényű progi a kategóriájában.

Azokat valószínűleg feleslegesen tetted

Én erre gondoltam, ezt használtam. Működik egyszerre több kamerával is.
http://sourceforge.net/projects/mjpg-streamer/
Annyi bibi van, hogy egy kamera képes lefoglalni az adott usb-n a teljes port sávszélességet. Tehát még egy kamerát vagy eszközt ugyan oda már nem tudsz felrakni, hiába 2.0-ás a port. Ezért elképzelhető, hogy a meghajtóját némi matatás után érdemes újra fordítani, a lefoglalható sávszél értékét módosítani kell... Nem mindegyiknél van meg ez a probléma, de C110 kameránál igen. Egyéb kamerából pl hub-on keresztül akár 3 kamera is ment ua porton!

Direktbe kötve ar RPI-be, nem HUB-on keresztül:
Ez lett az eredmény:

[root@alarmpi mjpg-streamer-r63]# ./mjpg_streamer -i "input_uvc.so -r 320x240" -o "output_http.so -p 8090"
MJPG Streamer Version.: 2.0
i: Using V4L2 device.: /dev/video0
i: Desired Resolution: 320 x 240
i: Frames Per Second.: 5
i: Format............: MJPEG
Unable to set format: Input/output error
Init v4L2 failed !! exit fatal
i: init_VideoIn failed
[root@alarmpi mjpg-streamer-r63]#

YUV-ra ugyanez.
:=((

dmesg:
uvcvideo: Failed to set UVC probe control : -110 (exp. 26).

Ahham! Nyomon vagy, de!
Én a következő bibit látom. Nincs betöltve a kamera szenzorhoz szükséges meghajtó. Csak az uvcvideo, és a v4l. Az pedig kevés.
Itt az említett router lsmod-ja, 2 részletben kiemelve a lényeget:

xxxx@OpenWrt:~# lsmod
Module Size Used by Not tainted
uvcvideo 54576 2
gspca_zc3xx 37872 0
gspca_vc032x 20768 0
gspca_spca561 7616 0
gspca_spca508 6208 0
gspca_spca506 9056 0
gspca_spca505 3728 0
gspca_spca501 12160 0
ovcamchip 15840 0
gspca_main 18384 7 gspca_zc3xx,gspca_vc032x,gspca_spca561,gspca_spca508,gspca_spca506,gspca_spca505,gspca_spca501
usbvideo 20576 0
v4l2_common 12960 1 ovcamchip
videodev 30864 7 uvcvideo,ovcamchip,gspca_main,usbvideo,v4l2_common
v4l1_compat 12912 2 uvcvideo,videodev
-------------------
usbcore 107040 13 uvcvideo,gspca_zc3xx,gspca_vc032x,gspca_spca561,gspca_spca508,gspca_spca506,gspca_spca505,gspca_spca501,gspca_main,usbvideo,usb_storage,uhci_hcd

Amint látod, én több kamerát is betöltöttem, mert ha hirtelen valamelyiket le kellene cserélnem, vagy továbbiakat adok a rendszerhez, akkor nem sokat kell matatnom. Felismeri és használja rögtön.

Neked is valami ilyet kellene látod!
Ha jól emléxem az ovcamchip kell a c110-hez, a többi egyéb kamerákhoz való (gspca... stb) Ezt meg kell nézned, h mivel van szerelve. Megmondanám, de épp áll az a szerver amin tudom, h össze van szedve típus és id alapján. googlizz!

Még nem sikerült!!! :(
Már alakul a hiba meghatározása, de a megoldás meg nem akaródzik menni...

Ezt nézd meg, érdekes:
https://github.com/raspberrypi/linux/issues/29
Keress rá popcormix hozzászólására.

A módosított dwc_otg_hcd_queue.c file-lal viszont nem tudtam fordítani kernelt:

CHK include/linux/version.h
CHK include/generated/utsrelease.h
make[1]: `include/generated/mach-types.h' is up to date.
CALL scripts/checksyscalls.sh
CHK include/generated/compile.h
CHK kernel/config_data.h
CC drivers/usb/host/dwc_otg/dwc_otg_hcd_queue.o
drivers/usb/host/dwc_otg/dwc_otg_hcd_queue.c: In function 'dwc_otg_hcd_qh_free':
drivers/usb/host/dwc_otg/dwc_otg_hcd_queue.c:55:2: error: unknown type name 'dwc_irqflags_t'
drivers/usb/host/dwc_otg/dwc_otg_hcd_queue.c:59:2: warning: passing argument 2 of 'DWC_SPINLOCK_IRQSAVE' from incompatible pointer type [enabled by default]
In file included from drivers/usb/host/dwc_otg/../dwc_common_port/usb.h:44:0,
from drivers/usb/host/dwc_otg/dwc_otg_hcd.h:37,
from drivers/usb/host/dwc_otg/dwc_otg_hcd_queue.c:42:
drivers/usb/host/dwc_otg/../dwc_common_port/dwc_os.h:732:13: note: expected 'uint64_t *' but argument is of type 'int *'
drivers/usb/host/dwc_otg/dwc_otg_hcd_queue.c: At top level:
drivers/usb/host/dwc_otg/dwc_otg_hcd_queue.c:291:15: error: conflicting types for 'dwc_otg_hcd_qh_create'
In file included from drivers/usb/host/dwc_otg/dwc_otg_hcd_queue.c:42:0:
drivers/usb/host/dwc_otg/dwc_otg_hcd.h:611:22: note: previous declaration of 'dwc_otg_hcd_qh_create' was here
drivers/usb/host/dwc_otg/dwc_otg_hcd_queue.c: In function 'dwc_otg_hcd_qh_create':
drivers/usb/host/dwc_otg/dwc_otg_hcd_queue.c:298:2: error: too many arguments to function 'dwc_otg_hcd_qh_alloc'
In file included from drivers/usb/host/dwc_otg/dwc_otg_hcd_queue.c:42:0:
drivers/usb/host/dwc_otg/dwc_otg_hcd.h:629:29: note: declared here
drivers/usb/host/dwc_otg/dwc_otg_hcd_queue.c: In function 'dwc_otg_hcd_qh_add':
drivers/usb/host/dwc_otg/dwc_otg_hcd_queue.c:486:12: error: 'dwc_otg_hcd_t' has no member named 'periodic_qh_count'
drivers/usb/host/dwc_otg/dwc_otg_hcd_queue.c:491:6: error: 'dwc_otg_hcd_t' has no member named 'periodic_qh_count'
drivers/usb/host/dwc_otg/dwc_otg_hcd_queue.c: In function 'dwc_otg_hcd_qh_remove':
drivers/usb/host/dwc_otg/dwc_otg_hcd_queue.c:537:6: error: 'dwc_otg_hcd_t' has no member named 'periodic_qh_count'
drivers/usb/host/dwc_otg/dwc_otg_hcd_queue.c:538:11: error: 'dwc_otg_hcd_t' has no member named 'periodic_qh_count'
drivers/usb/host/dwc_otg/dwc_otg_hcd_queue.c: At top level:
drivers/usb/host/dwc_otg/dwc_otg_hcd_queue.c:639:16: error: conflicting types for 'dwc_otg_hcd_qtd_create'
In file included from drivers/usb/host/dwc_otg/dwc_otg_hcd_queue.c:42:0:
drivers/usb/host/dwc_otg/dwc_otg_hcd.h:634:23: note: previous declaration of 'dwc_otg_hcd_qtd_create' was here
drivers/usb/host/dwc_otg/dwc_otg_hcd_queue.c: In function 'dwc_otg_hcd_qtd_create':
drivers/usb/host/dwc_otg/dwc_otg_hcd_queue.c:643:2: error: too many arguments to function 'dwc_otg_hcd_qtd_alloc'
In file included from drivers/usb/host/dwc_otg/dwc_otg_hcd_queue.c:42:0:
drivers/usb/host/dwc_otg/dwc_otg_hcd.h:641:30: note: declared here
drivers/usb/host/dwc_otg/dwc_otg_hcd_queue.c: At top level:
drivers/usb/host/dwc_otg/dwc_otg_hcd_queue.c:695:5: error: conflicting types for 'dwc_otg_hcd_qtd_add'
In file included from drivers/usb/host/dwc_otg/dwc_otg_hcd_queue.c:42:0:
drivers/usb/host/dwc_otg/dwc_otg_hcd.h:636:12: note: previous declaration of 'dwc_otg_hcd_qtd_add' was here
drivers/usb/host/dwc_otg/dwc_otg_hcd_queue.c: In function 'dwc_otg_hcd_qtd_add':
drivers/usb/host/dwc_otg/dwc_otg_hcd_queue.c:699:2: error: unknown type name 'dwc_irqflags_t'
drivers/usb/host/dwc_otg/dwc_otg_hcd_queue.c:714:2: warning: passing argument 2 of 'DWC_SPINLOCK_IRQSAVE' from incompatible pointer type [enabled by default]
In file included from drivers/usb/host/dwc_otg/../dwc_common_port/usb.h:44:0,
from drivers/usb/host/dwc_otg/dwc_otg_hcd.h:37,
from drivers/usb/host/dwc_otg/dwc_otg_hcd_queue.c:42:
drivers/usb/host/dwc_otg/../dwc_common_port/dwc_os.h:732:13: note: expected 'uint64_t *' but argument is of type 'int *'
make[4]: *** [drivers/usb/host/dwc_otg/dwc_otg_hcd_queue.o] Error 1
make[3]: *** [drivers/usb/host/dwc_otg] Error 2
make[2]: *** [drivers/usb/host] Error 2
make[1]: *** [drivers/usb] Error 2
make: *** [drivers] Error 2

Ezzel küzdök...

Valamit már sikerült összehozni! :)
Szóval kellett egy rpi-update parancs, az eredmény:

pi@raspberrypi:~$ uname -a
Linux raspberrypi 3.2.27+ #54 PREEMPT Wed Aug 22 13:22:32 BST 2012 armv6l GNU/Linux

És egy "dwc_otg.microframe_schedule=1" a cmdline.txt-be.

Már működik szuperül, de a felbontás csak alapértelmezett (352x288) :((

Ezeket látom a syslogban:

v4l2_next: VIDIOC_DQBUF: EIO

Erre keresem a megoldást, néhol azt írják, hogy USB 2 kell, de nem az van az RPI-n?!

A fordítást még nem adtam fel, de nem megy még :(

Kezdem elfogadni, hogy egy 25-35 dolláros panelocskától ne akarjak nagyobb felbontást, tízenx fps-t...
Már 1-másfél órát megy a motion is, saján opencv-s alkalmazás is, mielőtt select timeouttal feltenné a kezét.

Az azért foglalkoztat, hogy másnak megy nagyobb felbontással, fps-sel?

Kizárt, hogy ne menne többel. De ezek szerint szoftveres gondod van.
Ha belegondolsz abba, h az általam emlegetett routeres megoldás is csak egy valójában ehhez hasonló pár dolláros megoldás, és hónapok óta üzemszerűen 30 fps-el megy... akkor a Pi-nek is mennie kell ugyanígy.
Csak még nem tart ott az optimalizálás, a hibák kiszűrése, a kód átírása, hogy üzemszerű állapot legyen rajta is minden, amit x86-on rendben működő kernel tud, vagy ígér.

Értsd: van egy régebbi routerem (3com - tehát nem túl vacak), Atheros chippel szerelve. A Fonera is ezt használja, tehát átjárhatóak. Az enyémen mégsem megy rendesen amit ígér a kernelben. Most írta át egy finn srác rendesen, hogy működjön az enyémen is, mert találkozott a problémámmal. De amíg ki nem derítettem addig én is elég sokat görcsöltem vele, h mi lehet a baj. Nem tudom megszámolni hány órát öltem bele, hányszor flasheltem rá különféle verziókat hibakeresés gyanánt mire sikerült kiderítenem az alap okokat.