I have a problem with this webcam (ID - 046d:0892, driver gspca) on Acer Travelmate 8200 with Ubuntu 14.04.
When using cheese or skype with preloaded v4l1compat.so library, it has bad image - it has lot of horizontal lines and my face is tripled on screen. But when I use guvcview to view camera stream and I choose one particular (YVYU) pixel format, it looks perfect. I tried to set or force this pixel format somehow for applications like cheese or skype, but without success. I also tried to change it using gstreamer-properties in Video tab using a lot of variations of custom pipe string (v4l2src device=/dev/video0 ! video/x-raw,format=YVYU and so on), but none of these worked - it tells me either invalid syntax or previewed image is still garbage.
Do anyone have some idea how to solve this please?
1 Answer
It is a bug in the kernel driver gspca/vc032x, that sets wrong bytesperline (640 instead of 1280). The problem raised with recent version of v4l-utils (>=0.9.1), because the new libraries take in account bytesperline. I opened a bug at bugzilla.kernel.org. You can fix by yourself by recompiling kernel after applying the following patch:
--- drivers/media/usb/gspca/vc032x.c.orig 2014-08-04 00:25:02.000000000 +0200
+++ drivers/media/usb/gspca/vc032x.c 2015-01-11 23:52:51.249386410 +0100
@@ -68,12 +68,12 @@ static const struct v4l2_pix_format vc0321_mode[] = { {320, 240, V4L2_PIX_FMT_YVYU, V4L2_FIELD_NONE,
- .bytesperline = 320,
+ .bytesperline = 320*2, .sizeimage = 320 * 240 * 2, .colorspace = V4L2_COLORSPACE_SRGB, .priv = 1}, {640, 480, V4L2_PIX_FMT_YVYU, V4L2_FIELD_NONE,
- .bytesperline = 640,
+ .bytesperline = 640*2, .sizeimage = 640 * 480 * 2, .colorspace = V4L2_COLORSPACE_SRGB, .priv = 0},
@@ -97,12 +97,12 @@ }; static const struct v4l2_pix_format bi_mode[] = { {320, 240, V4L2_PIX_FMT_YUYV, V4L2_FIELD_NONE,
- .bytesperline = 320,
+ .bytesperline = 320*2, .sizeimage = 320 * 240 * 2, .colorspace = V4L2_COLORSPACE_SRGB, .priv = 2}, {640, 480, V4L2_PIX_FMT_YUYV, V4L2_FIELD_NONE,
- .bytesperline = 640,
+ .bytesperline = 640*2, .sizeimage = 640 * 480 * 2, .colorspace = V4L2_COLORSPACE_SRGB, .priv = 1},