Hi Mauro,

On Sunday 16 November 2008, Mauro Grauso wrote:
> Hi again Laurent,
>
> Right after writing to you I started playing with uvcdynctrl controls
> and I've found out that setting  'Exposure (Absolute)' to a lower
> value solves my problem.
>
> Now what remains to understand is how come the settings are changed.
>
> > > I compiled the latest uvcdynctrl (0.2) and here is some output:
> >
> > I'm afraid that's outdated :-/ Could you please check the last version
> > out from the SVN repository ?
>
> As I wrote before I identified the setting that gave me problems, but
> on your request I tried also the SVN version and I can confirm you
> that the 0.20 is the latest.

Don't rely on the version number, it hasn't been updated in SVN. Please use 
the SVN version.

> > Please try to modify the exposure controls using the -s option to
> > uvcdynctrl.
>
> That's exactly what I did and got me a smooth stream (the 'Exposure
> (Absolute)' control).
>
> > Set the driver trace parameter to 64 before plugging the camera (echo 64
> >
> >> /sys/modules/uvcvideo/parameters/trace). The driver will then log a
> >> message
> >
> > when an ioctl is called. Plug the camera and check if a userspace
> > application invokes VIDIOC_S_CTRL to restore controls.
>
> This is the syslog after enabling the trace when I plug the camera:
> Nov 16 17:22:02 greywolf kernel: [24925.857046] usb 2-1: new high
> speed USB device using ehci_hcd and address 10
> Nov 16 17:22:02 greywolf kernel: [24926.102991] usb 2-1: configuration
> #1 chosen from 1 choice
> Nov 16 17:22:02 greywolf kernel: [24926.103473] uvcvideo: Found UVC
> 1.00 device <unnamed> (046d:09a4)
> Nov 16 17:22:02 greywolf kernel: [24926.135418] input: UVC Camera
> (046d:09a4) as
> /devices/pci0000:00/0000:00:02.1/usb2/2-1/2-1:1.0/input/input11 Nov 16
> 17:22:03 greywolf kernel: [24926.397739]
> VIDIOC_QUERYCAPVIDIOCGCAPVIDIOC_QUERYCAPVIDIOC_ENUMINPUTVIDIOC_ENUMINPUTVID
>IOC_ENUM_FMTVIDIOC_TRY_FMT<3>10:3:1: cannot set freq 16000 to ep 0x86
> Nov 16 17:22:03 greywolf kernel: [24927.400217] uvcvideo: Failed to
> query (1) UVC control 1 (unit 0) : -110 (exp. 26).
> Nov 16 17:22:04 greywolf kernel: [24927.515251]
> VIDIOC_QUERYCAPVIDIOC_G_FMTVIDIOC_S_FMT<3>uvcvideo: Failed to query
> (1) UVC control 1 (unit 0) : -32 (exp. 26).
> Nov 16 17:22:05 greywolf kernel: [24927.849383]
> VIDIOC_G_FMTVIDIOC_S_FMT<3>uvcvideo: Failed to query (1) UVC control 1
> (unit 0) : -110 (exp. 26).
> Nov 16 17:22:05 greywolf kernel: [24928.848506]
> VIDIOC_ENUMINPUTVIDIOC_G_INPUTVIDIOC_ENUMINPUTVIDIOC_ENUMSTD<7>uvcvideo:
> Unsupported ioctl 0xc0405619
> Nov 16 17:22:06 greywolf kernel: [24928.848769]
> VIDIOC_ENUMINPUTVIDIOC_ENUM_FMTVIDIOC_ENUM_FMTVIDIOC_ENUM_FMTVIDIOC_G_FMTVI
>DIOC_S_FMTVIDIOC_G_FMTVIDIOC_S_FMTVIDIOC_G_FMTVIDIOC_S_FMTVIDIOC_G_FMTVIDIOC
>_S_FMTVIDIOC_G_FMTVIDIOC_S_FMTVIDIOC_G_FMTVIDIOC_S_FMTVIDIOC_G_FMTVIDIOC_S_F
>MTVIDIOC_G_FMTVIDIOC_S_FMTVIDIOC_G_FMTVIDIOC_S_FMTVIDIOC_G_FMTVIDIOC_S_FMTVI
>DIOC_G_FMTVIDIOC_S_FMTVIDIOC_G_FMTVIDIOC_S_FMTVIDIOC_G_FMTVIDIOC_S_FMT<3>uvc
>video: Failed to query (1) UVC control 1 (unit 0) : -110 (exp. 26).
> Nov 16 17:22:07 greywolf kernel: [24929.849271]
> VIDIOC_G_FMTVIDIOC_S_FMTVIDIOC_G_FMTVIDIOC_S_FMTVIDIOC_G_FMTVIDIOC_S_FMTVID
>IOC_G_FMTVIDIOC_S_FMTVIDIOC_G_FMTVIDIOC_S_FMTVIDIOC_G_FMTVIDIOC_S_FMTVIDIOC_
>G_FMTVIDIOC_S_FMTVIDIOC_G_FMTVIDIOC_S_FMTVIDIOC_G_FMTVIDIOC_S_FMTVIDIOC_G_FM
>TVIDIOC_S_FMT<3>uvcvideo: Failed to query (1) UVC control 1 (unit 0) : -110
> (exp. 26).

Sorry for the garbage in the kernel log. I've fixed the uvcvideo driver and 
pushed the patch to the repository.

Anyway, the log clearly shows that a userspace process plays with VIDIOC_G_FMT 
and VIDIOC_S_FMT. Could you please apply the attached patch (on top of the 
latest driver source from the Mercurial tree) ? It prints the task name in 
kernel log messages.

> >> If I click on "auto exposure off" I still get "Set Auto Exposure off
> >> error" in stderr.
> >
> > Please try to set the auto exposure control with uvcdynctrl.
>
> Setting auto exposure fails even with uvcdynctrl. It's on by default
> and doesn't seen to be changable (Even if the control is correcrly
> identified).
>
>   Exposure, Auto
>     ID      : 0x00000000,
>     Type    : Choice,
>     Flags   : { CAN_READ, CAN_WRITE },
>     Values  : { 'Auto Mode'[0], 'Manual Mode'[1], 'Shutter Priority
> Mode'[2], 'Aperture Priority Mode'[3] },
>     Default : 3
>
> but:
> /uvcdynctrl-0.2 --get='Exposure, Auto'
> [libwebcam] Unknown V4L2 control ID encountered: 10094849
> [libwebcam] Unknown V4L2 control ID encountered: 10094850
> [libwebcam] Unknown V4L2 control ID encountered: 10094851
> ERROR: Unknown control specified.
>
> and:
> ./uvcdynctrl-0.2 --set='Exposure, Auto' 0
> [libwebcam] Unknown V4L2 control ID encountered: 10094849
> [libwebcam] Unknown V4L2 control ID encountered: 10094850
> [libwebcam] Unknown V4L2 control ID encountered: 10094851
> ERROR: Unknown control specified.

Please use the SVN version. It should fix the problem.

> When I do that the syslog shows:
> Nov 16 17:24:46 greywolf kernel: [24930.848233]
> VIDIOC_G_FMTVIDIOC_S_FMTVIDIOC_G_FMTVIDIOC_S_FMTVIDIOC_G_FMTVIDIOC_S_FMTVID
>IOC_G_FMTVIDIOC_S_FMTVIDIOC_G_FMTVIDIOC_S_FMTVIDIOC_QUERYCTRLVIDIOC_QUERYCTR
>LVIDIOC_QUERYCTRLVIDIOC_QUERYCTRLVIDIOC_QUERYCTRLVIDIOC_QUERYCTRLVIDIOC_QUER
>YCTRLVIDIOC_QUERYCTRLVIDIOC_QUERYCTRLVIDIOC_QUERYCTRLVIDIOC_QUERYCTRLVIDIOC_
>QUERYCTRLVIDIOC_QUERYCTRLVIDIOC_QUERYCTRLVIDIOC_QUERYCTRLVIDIOC_QUERYCTRLVID
>IOC_QUERYCTRLVIDIOC_QUERYCTRLVIDIOC_QUERYCTRLVIDIOC_QUERYCTRLVIDIOC_QUERYCTR
>LVIDIOC_QUERYCTRLVIDIOC_QUERYCTRLVIDIOC_QUERYCTRLVIDIOC_QUERYCTRLVIDIOC_QUER
>YMENUVIDIOC_QUERYMENUVIDIOC_QUERYMENUVIDIOC_QUERYCTRLVIDIOC_QUERYCTRLVIDIOC_
>QUERYCTRLVIDIOC_QUERYCTRLVIDIOC_QUERYCTRLVIDIOC_QUERYCTRLVIDIOC_QUERYCTRLVID
>IOC_CROPCAPVIDIOC_S_CROPVIDIOC_S_INPUTVIDIOC_QUERYCTRLVIDIOC_S_CTRLVIDIOC_QU
>ERYCTRLVIDIOC_S_CTRLVIDIOC_QUERYCTRLVIDIOC_S_CTRLVIDIOC_QUERYCTRLVIDIOC_QUER
>YCTRLVIDIOC_STREAMOFFVIDIOC_QUERYCAPVIDIOC_QUERYCTRLVIDIOC_QUERYCTRLVIDIOC_Q
>UERYCTRLVIDIOC_QUERYCTRLVIDIOC_QUERYCTRLVIDIOC_QUERYCTRLVIDIOC_QUERYC Nov 16
> 17:25:29 greywolf kernel:
> RLVIDIOC_QUERYMENUVIDIOC_QUERYMENUVIDIOC_QUERYMENUVIDIOC_QUERYCTRLVIDIOC_QU
>ERYCTRLVIDIOC_QUERYCTRLVIDIOC_QUERYCTRLVIDIOC_QUERYMENUVIDIOC_QUERYMENUVIDIO
>C_QUERYMENUVIDIOC_QUERYMENUVIDIOC_QUERYCTRLVIDIOC_QUERYCTRLVIDIOC_QUERYCTRLV
>IDIOC_QUERYCAPVIDIOC_QUERYCTRLVIDIOC_QUERYCTRLVIDIOC_QUERYCTRLVIDIOC_QUERYCT
>RLVIDIOC_QUERYCTRLVIDIOC_QUERYCTRLVIDIOC_QUERYCTRLVIDIOC_QUERYMENUVIDIOC_QUE
>RYMENUVIDIOC_QUERYMENUVIDIOC_QUERYCTRLVIDIOC_QUERYCTRLVIDIOC_QUERYCTRLVIDIOC
>_QUERYCTRLVIDIOC_QUERYMENUVIDIOC_QUERYMENUVIDIOC_QUERYMENUVIDIOC_QUERYMENUVI
>DIOC_QUERYCTRLVIDIOC_QUERYCTRLVIDIOC_QUERYCTRLVIDIOC_QUERYCAPVIDIOC_QUERYCTR
>LVIDIOC_QUERYCTRLVIDIOC_QUERYCTRLVIDIOC_QUERYCTRLVIDIOC_QUERYCTRLVIDIOC_QUER
>YCTRLVIDIOC_QUERYCTRLVIDIOC_QUERYMENUVIDIOC_QUERYMENUVIDIOC_QUERYMENUVIDIOC_
>QUERYCTRLVIDIOC_QUERYCTRLVIDIOC_QUERYCTRLVIDIOC_QUERYCTRLVIDIOC_QUERYMENUVID
>IOC_QUERYMENUVIDIOC_QUERYMENUVIDIOC_QUERYMENUVIDIOC_QUERYCTRLVIDIOC_QUERYCTR
>LVIDIOC_QUERYCTRLVIDIOC_QUERYCAPVIDIOC_QUERYCTRLVIDIOC_QUERYCTRLVIDIOC_QUERY
>CTR LVIDI
>
> > I really doubt the camera includes an EEPROM to store control values (but
> > I might of course be wrong). Please try to set auto-exposure off with
> > uvcdynctrl. If it works the problem is probably in luvcview. If it
> > doesn't we'll have a look somewhere else.
>
> As told, the auto exposure can't be set with any software. Maybe I
> open the camera to see if there's an EPROM?

Start by trying the attached patch and let's see what task accesses the 
device.

Best regards,

Laurent Pinchart
diff -r 283b73ee3b3a linux/drivers/media/video/uvc/uvcvideo.h
--- a/linux/drivers/media/video/uvc/uvcvideo.h	Mon Nov 17 22:32:11 2008 +0100
+++ b/linux/drivers/media/video/uvc/uvcvideo.h	Tue Nov 18 00:11:44 2008 +0100
@@ -698,8 +698,15 @@
 			printk(KERN_INFO "uvcvideo: " msg); \
 	} while (0)
 
-#define uvc_printk(level, msg...) \
-	printk(level "uvcvideo: " msg)
+#define uvc_printk(level, msg, args...) \
+	do { \
+		char comm[TASK_COMM_LEN]; \
+		task_lock(current); \
+		strncpy(comm, current->comm, sizeof(current->comm)); \
+		task_unlock(current); \
+		comm[TASK_COMM_LEN-1] = '\0'; \
+		printk(level "uvcvideo[%s]: " msg, comm, ##args); \
+	} while (0)
 
 #define UVC_GUID_FORMAT "%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-" \
 			"%02x%02x%02x%02x%02x%02x"
_______________________________________________
Linux-uvc-devel mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/linux-uvc-devel

Reply via email to