Hi Alexey,

On Sunday 16 January 2011 09:57:53 Alexey Fisher wrote:
> Hi,
> i helping my friend to install linux on his new laptop "fujisu lifebook
> a340". It is cheap one (350€) but seems to work good with linux. But web
> cam has some issues, which i will discuss with you.
> 
> It is uvc webcam (0408:1fc3 Quanta Computer, Inc.).
> For most frame sizes it aims to support 10, 15,25, 30 fps. In real life it
> stream only with 30fps, if i try to set 10fps, it will silently ignore it.
> The real problem - there is no exposure control and autoexposure do not
> working with 30fps too. So with normal light the image will be dark and
> noisy.
> 
> With frame sizes 1280x960 and 1280x1024, it has max frame rate 9fps
> (aims to support 9 and 5 fps). Interesting thing is, autoexposure seems
> to work here. If i close the cam, frame rate will drop to ~4fps, and if
> i add extra light it will go to ~9fps. The image with this framerate is
> better than with 30fps.
> 
> By tracing i also found "uvcvideo: Dropping payload (out of sync)."
> messages. So i added two quirks for this cam: UVC_QUIRK_STREAM_NO_FID
> for out of sync;

Did UVC_QUIRK_STREAM_NO_FID make any difference ?

> UVC_QUIRK_RESTRICT_FRAME_RATE for dummy frame rates.
>
> Now my question: is it possible to pull/force some registers to test if
> auto exposure can work with 30fps too?

The camera doesn't report exposure/auto exposure controls in its descriptors. 
You could hack the driver to make it think the camera supports those controls. 
You should then be able to set them from userspace to see if they make any 
difference.

The easiest way would be to modify uvc_ctrl_init_device() in uvc_ctrl.c. Add

static const u8 camera_controls[3] = { 0x0e, 0x00, 0x00 };

at the beginning of the function, and replace

                } else if (UVC_ENTITY_TYPE(entity) == UVC_ITT_CAMERA) {
                        bmControls = entity->camera.bmControls;
                        bControlSize = entity->camera.bControlSize;
                }

with

                } else if (UVC_ENTITY_TYPE(entity) == UVC_ITT_CAMERA) {
                        bmControls = camera_controls;
                        bControlSize = entity->camera.bControlSize;
                }

> If not, is it possible to notify user space about broken auto exposure?
> So user space apps can make right decision?

There's no API for that that I know of.

> PS: in attachment is quirks_patch, and lsusb.

-- 
Regards,

Laurent Pinchart
_______________________________________________
Linux-uvc-devel mailing list
Linux-uvc-devel@lists.berlios.de
https://lists.berlios.de/mailman/listinfo/linux-uvc-devel

Reply via email to