| DV-Kamera Panasonic NV-GS180 als Webcam unter Suse 10.3
Frage von Eckart Pluennecke:
Hallo
Ich hab mal aus Langerweile probiert, meine Videokamera NV-GS 180 als Webcam unter Suse 10.3 zum laufen zu bringen. Die Kamera ist bei USB-Anschluss im Webcam-Modus. Nach Anschluss der Kamera und Installation des Moduls uvcvideo funktioniert das auch schon fast, aber eben nur fast.
Das einzige Programm, welches mir ein Bild anzeigt, ist luvcview. Mit dem Aufruf von luvcview -d /dev/video -i 12 bekomme ich ein Bild mit ca. 12 fps zu sehen und luvcview meldet:
luvcview 0.2.4
SDL information: Video driver: x11 A window manager is available Device information: Device path: /dev/video Stream settings: Frame format: MJPG Frame size: 320x240 (;requested size 640x480 is not supported by device) Frame rate: 25/2 fps (;requested frame rate 12 fps is not supported by device)
Soweit geht das also.
Aber z.B. in Kopete kommt nur ein schwarzes Bild. vlc meldet "[00000322] v4l demuxer error: cannot get channel infos (;Das Argument ist ungültig)". xawtv ist etwas gesprächiger, aber für mich unverständlich:
This is xawtv-3.95, running on Linux/i686 (;2.6.22.18-0.2-bigsmp) xinerama 0: 1680x1050 0 0 /dev/video0 [v4l2]: no overlay support v4l-conf had some trouble, trying to continue anyway ioctl: VIDIOC G STD(;std%0xb7fb65dfbfaf8a60 [PAL D,PAL D1,PAL N,PAL 60,?,SECAM B,SECAM D,SECAM G,SECAM H,SECAM K1,?ATSC 8 VSB,ATSC 16 VSB (;null),(;null),(;null),(;null),(;null),(;null),(;null),(;null),(;null),(;null) (;null),(;null),(;null),(;null),(;null),(;null),(;null),(;null),(;null),(;null) (;null),(;null),(;null),(;null),(;null),(;null),(;null),(;null),(;null),(;null)]): Das Argument ist ungültig ioctl: VIDIOC S STD(;std%0x0 []): Das Argument ist ungültig no way to get: 384x288 32 bit TrueColor (;LE: bgr-)
Und jetzt steh ich auf dem besagten Schlauch und weiss nicht mehr, wo weitersuchen. Kann es sein dass es an der Gösse vom 320x240 liegt oder der etwas eigenartigen 25/2 fps? Oder daran, dass das ganze als MJPG ankommt?
Ich würde mich freuen, wenn mir jemand sagen könnte, wie ich das Videobild, was ja offensichtlich im PC ankommt, in kopete oder vlc oder ähnliches bekomme.
Danke schonmal und Grüsse aus dem Emmental Ecki
Antwort von Dirk Thierbach:
Eckart Pluennecke wrote: > Ich hab mal aus Langerweile probiert, meine Videokamera NV-GS 180 als Webcam > unter Suse 10.3 zum laufen zu bringen. Die Kamera ist bei USB-Anschluss im > Webcam-Modus. Nach Anschluss der Kamera und Installation des Moduls > uvcvideo funktioniert das auch schon fast, aber eben nur fast.
> Das einzige Programm, welches mir ein Bild anzeigt, ist luvcview. [...] > Aber z.B. in Kopete kommt nur ein schwarzes Bild. vlc meldet "[00000322] v4l > demuxer error: cannot get channel infos (;Das Argument ist ungültig)". xawtv > ist etwas gesprächiger, aber für mich unverständlich:
> ioctl: VIDIOC G STD(;std%0xb7fb65dfbfaf8a60 [...] > Das Argument ist ungültig
> Und jetzt steh ich auf dem besagten Schlauch und weiss nicht mehr, wo > weitersuchen. Kann es sein dass es an der Gösse vom 320x240 liegt oder der > etwas eigenartigen 25/2 fps? Oder daran, dass das ganze als MJPG ankommt?
> Ich würde mich freuen, wenn mir jemand sagen könnte, wie ich das Videobild, > was ja offensichtlich im PC ankommt, in kopete oder vlc oder ähnliches > bekomme.
Ich kann Dir das nicht sagen, aber ich kann Dir grob sagen, was schiefgeht: Die Anwendungsprogramme (;vlc usw.) kommunizieren mit dem Treiber (;= Kernel-Modul) ueber sogenannte "ioctl"s. Der Treiber, den Du da geladen hast, unterstuetzt aber mindestens einen ioctl, naemlich "VIDIOC G STD" (;fragt ab, ob das Bild in PAL/NTSC/SECAM etc. ankommt), nicht. Daraufhin bekommen offenbar die meisten Programme einen Schluckauf und wissen nicht mehr so recht, was sie tun sollen.
Ich habe kein Suse, und kenne auch "uvcvideo" nicht, aber dem Namen nach scheint "luvcview" enger damit verwandt zu sein, und verwendet daher moeglicherweise nur die iotcl's, die der Treiber auch versteht.
Wenn nicht jemand anderem, der sich besser auskennt, etwas schlaueres einfaellt, wuerde ich mal feststellen, welcher Treiber (;= welches Kernel-Modul) da jetzt wirklich aktiv ist (;oder meintest Du mit "Modul" oben bereits das Kernel-Modul?). Der Quelltext dazu sagt Dir dann auch, warum VIDIOC G STD nicht unterstuetzt wird (;wenn Du kein C lesen kannst, tut's vielleicht auch eine freundliche E-Mail an die Autoren des Moduls, die stehen im Quelltext auch drin.) Ausfuehrliches Lesen jeglicher Dokumentation, die bei dem Kernel-Modul dabei ist, schadet auch nicht.
Von der Situation her ist von "der Treiber hat seine eigene ioctl-Schnittstelle, und unterstuetzt v4l/v4l2 gar nicht" bis zu "mal eben ein halbes Dutzend Zeilen C in den Quellcode einfuegen, dann laeuft's" alles drin. Muss man halt nachsehen.
- Dirk
Antwort von Eckart Pluennecke:
Dirk Thierbach wrote:
> Eckart Pluennecke wrote: >> Ich hab mal aus Langerweile probiert, meine Videokamera NV-GS 180 als >> Webcam unter Suse 10.3 zum laufen zu bringen. Die Kamera ist bei >> USB-Anschluss im Webcam-Modus. Nach Anschluss der Kamera und Installation >> des Moduls uvcvideo funktioniert das auch schon fast, aber eben nur fast. > >> Das einzige Programm, welches mir ein Bild anzeigt, ist luvcview. > [...] >> Aber z.B. in Kopete kommt nur ein schwarzes Bild. vlc meldet "[00000322] >> v4l demuxer error: cannot get channel infos (;Das Argument ist ungültig)". >> xawtv ist etwas gesprächiger, aber für mich unverständlich: > >> ioctl: VIDIOC G STD(;std%0xb7fb65dfbfaf8a60 > [...] >> Das Argument ist ungültig > >> Und jetzt steh ich auf dem besagten Schlauch und weiss nicht mehr, wo >> weitersuchen. Kann es sein dass es an der Gösse vom 320x240 liegt oder >> der etwas eigenartigen 25/2 fps? Oder daran, dass das ganze als MJPG >> ankommt? > >> Ich würde mich freuen, wenn mir jemand sagen könnte, wie ich das >> Videobild, was ja offensichtlich im PC ankommt, in kopete oder vlc oder >> ähnliches bekomme. > > Ich kann Dir das nicht sagen, aber ich kann Dir grob sagen, was > schiefgeht: Die Anwendungsprogramme (;vlc usw.) kommunizieren mit dem > Treiber (;= Kernel-Modul) ueber sogenannte "ioctl"s. Der Treiber, den > Du da geladen hast, unterstuetzt aber mindestens einen ioctl, naemlich > "VIDIOC G STD" (;fragt ab, ob das Bild in PAL/NTSC/SECAM etc. ankommt), > nicht. Daraufhin bekommen offenbar die meisten Programme einen > Schluckauf und wissen nicht mehr so recht, was sie tun sollen.
Interessant, darauf bin ich nicht gekommen > > Ich habe kein Suse, und kenne auch "uvcvideo" nicht, aber dem Namen > nach scheint "luvcview" enger damit verwandt zu sein, und verwendet daher > moeglicherweise nur die iotcl's, die der Treiber auch versteht. > > Wenn nicht jemand anderem, der sich besser auskennt, etwas schlaueres > einfaellt, wuerde ich mal feststellen, welcher Treiber (;= welches > Kernel-Modul) da jetzt wirklich aktiv ist (;oder meintest Du mit > "Modul" oben bereits das Kernel-Modul?). Der Quelltext dazu sagt Dir
Ja, "uvcvideo" ist bereits das Kernelmodul und stammt von http://linux-uvc.berlios.de (;bei packman gibts ein rpm dazu). Das Kernelmodul ist geladen und wird auch mit v4l genutzt:
eckart@linux:~> lsmod | grep uvc uvcvideo 68616 0 compat ioctl32 17664 1 uvcvideo videodev 42752 2 uvcvideo,saa7146 vv v4l2 common 32896 3 uvcvideo,saa7146 vv,videodev v4l1 compat 28676 3 uvcvideo,saa7146 vv,videodev usbcore 136812 7 snd usb audio,snd usb lib,uvcvideo,usb storage,uhci hcd,ehci hcd
luvcview stammt von http://www.quickcamteam.net/software/linux/v4l2-software/luvcview/
und meldet beim Aufruf von luvcview -L (;damit werden die gültigen Videoformate abgefragt) folgendes:
luvcview 0.2.4
SDL information: Video driver: x11 A window manager is available Device information: Device path: /dev/video0 /dev/video0 does not support read i/o { pixelformat = 'MJPG', description = 'MJPEG' } { discrete: width = 320, height = 240 } Time interval between frame: {min { 2/25 } .. max { 2/25 } / stepsize { 1/10000000 } },
Warum da steht "/dev/video0 does not support read i/o" ist mir auch nicht ganz klar. Vielleicht liegt es ja daran, dass die anderen Programme klemmen
Wenn ich bei luvcview übrigens den Parameter für dir Framerate (;-i 12) nicht angebe, dann verabschiedet sich auch das Programm und meldet nur:
Unable to set frame rate: Input/output error Init v4L2 failed !! exit fatal
Offenbar erkennt das Programm nicht automagisch die Framrate des Devices.
> dann auch, warum VIDIOC G STD nicht unterstuetzt wird (;wenn Du kein C > lesen kannst, tut's vielleicht auch eine freundliche E-Mail an die > Autoren des Moduls, die stehen im Quelltext auch drin.) Ausfuehrliches > Lesen jeglicher Dokumentation, die bei dem Kernel-Modul dabei ist, > schadet auch nicht.
In der Mailinglist des Treiber-Projekts gabs letztes Jahr schonmal eine Frage wegen der gleichen Kamera, aber leider keine abschliessende Klärung. Aber eine Anfrage in der Mailinglist kann ja nicht schaden.
Ich danke dir aber auf jeden Fall für die Infos.
Ecki
Antwort von Dirk Thierbach:
Eckart Pluennecke wrote: > Ja, "uvcvideo" ist bereits das Kernelmodul und stammt von > http://linux-uvc.berlios.de (;bei packman gibts ein rpm dazu).
Ok. Kurzes Suchen in der V4L2 Standarddefinition ergibt:
http://www.linuxtv.org/downloads/video4linux/API/V4L2 API/spec-single/v4l2.html
: To query and select the standard used by the current video input or : output applications call the VIDIOC G STD and VIDIOC S STD ioctl, : respectively. The received standard can be sensed with the : VIDIOC QUERYSTD ioctl. Note parameter of all these ioctls is a pointer : to a v4l2 std id type (;a standard set), not an index into the standard : enumeration.[7] Drivers must implement all video standard ioctls when : the device has one or more video inputs or outputs. : : Special rules apply to USB cameras where the notion of video : standards makes little sense. More generally any capture device, : output devices accordingly, which is : : - incapable of capturing fields or frames at the nominal rate of the : video standard, or : - where timestamps refer to the instant the field or frame was : received by the driver, not the capture time, or : : - where sequence numbers refer to the frames received by the driver, : not the captured frames. : : Here the driver shall set the std field of struct v4l2 input and : struct v4l2 output to zero, the VIDIOC G STD, VIDIOC S STD, : VIDIOC QUERYSTD and VIDIOC ENUMSTD ioctls shall return the EINVAL : error code.[8]
Der Teiber-Code tut das mehr oder weniger, vergisst aber dabei, die Felder auf Null zu setzen:
http://svn.berlios.de/svnroot/repos/linux-uvc/linux-uvc/trunk/uvc v4l2.c
/* Analog video standards make no sense for digital cameras. */ case VIDIOC ENUMSTD: case VIDIOC QUERYSTD: case VIDIOC G STD: case VIDIOC S STD:
case VIDIOC OVERLAY:
case VIDIOC ENUMAUDIO: case VIDIOC ENUMAUDOUT:
case VIDIOC ENUMOUTPUT: uvc trace(;UVC TRACE IOCTL, "Unsupported ioctl 0xx
", cmd); return -EINVAL;
Das erklaert die Fehlermeldung bei xawtv:
: ioctl: VIDIOC G STD(;std%0xb7fb65dfbfaf8a60 : [PAL D,PAL D1,PAL N,PAL 60,?,SECAM B,SECAM D,SECAM G,SECAM H,SECAM K1, : ?ATSC 8 VS,B,ATSC 16 VSB : (;null),(;null),(;null),(;null),(;null),(;null),(;null),(;null),(;null),(;null) : (;null),(;null),(;null),(;null),(;null),(;null),(;null),(;null),(;null),(;null) : (;null),(;null),(;null),(;null),(;null),(;null),(;null),(;null),(;null),(;null)]): : Das Argument ist ungültig : ioctl: VIDIOC S STD(;std%0x0 []): Das Argument ist ungültig
"Das Argument ist ungültig" entspricht wohl EINVAL, und wird hier offenbar nicht als die Ausnahme fuer USB-Kameras erkannt. Vieleicht deshalb, weil eben std%0xb7fb65dfbfaf8a60 nicht Null ist. Moegliche Abhilfen also:
1) Treiber aendern, so dass er die Felder wirklich auf Null setzt. 2) Die Anwendungsprogramme inspizieren, ob sie die Ausnahme fuer USB-Kameras richtig verarbeiten.
Fuer letzteres sollte man sich zuerst mal die neuesten Versionen besorgen. Laut Wiki funktioniert mindestens eine aeltere Version von Kopete nicht:
http://openfacts.berlios.de/index-en.phtml?title%Linux UVC
Neueste Versionen von Kopete und xawtv scheinen danach zu funktionieren. Wenn's damit immer noch haengt, die Entwickler kontaktieren, und Problem mit obigen Details beschreiben. Oder besser: spendiere einem Freund, der programmieren kann, bei Dir zu Hause ein Bier, und lass ihn schnell den Patch schreiben und direkt ausprobieren.
Kann natuerlich immer noch sein, dass das nur der erste Stolperstein ist, und es noch an anderen Dingen haengt.
- Dirk
| |