我在使用 Ubuntu 14.04 的 Acer Travelmate 8200 上的这个网络摄像头(ID - 046d:0892,驱动程序 gspca)遇到了问题。
当使用预装了 v4l1compat.so 库的 cheese 或 skype 时,图像质量很差 - 有很多水平线,我的脸在屏幕上被放大了三倍。但是当我使用 guvcview 查看摄像头流并选择一种特定的 (YVYU) 像素格式时,它看起来很完美。我尝试以某种方式为 cheese 或 skype 等应用程序设置或强制使用这种像素格式,但没有成功。我还尝试使用视频选项卡中的 gstreamer-properties 更改它,使用了许多自定义管道字符串变体(v4l2src device=/dev/video0 ! video/x-raw,format=YVYU 等等),但这些都不起作用 - 它告诉我语法无效或预览图像仍然是垃圾。
有人知道如何解决这个问题吗?
答案1
这是内核驱动程序 gspca/vc032x 中的一个错误,它设置了错误的 bytesperline(640 而不是 1280)。这个问题出现在最新版本的 v4l-utils(>=0.9.1)中,因为新库考虑了 bytesperline。我在 bugzilla.kernel.org 上发现了一个错误。您可以在应用以下补丁后重新编译内核,自行修复:
--- 驱动程序/媒体/usb/gspca/vc032x.c.orig 2014-08-04 00:25:02.000000000 +0200 +++ 驱动程序/媒体/usb/gspca/vc032x.c 2015-01-11 23:52:51.249386410 +0100 @@ -68,12 +68,12 @@ 静态 const 结构 v4l2_pix_format vc0321_mode[] = { {320,240,V4L2_PIX_FMT_YVYU,V4L2_FIELD_NONE, - .bytesperline = 320, +.字节数 = 320*2, .sizeimage = 320 * 240 * 2, .颜色空间 = V4L2_COLORSPACE_SRGB, .priv = 1}, {640,480,V4L2_PIX_FMT_YVYU,V4L2_FIELD_NONE, - .bytesperline = 640, +.字节数 = 640*2, .sizeimage = 640 * 480 * 2, .颜色空间 = V4L2_COLORSPACE_SRGB, .priv = 0}, @@ -97,12 +97,12 @@ }; 静态 const 结构 v4l2_pix_format bi_mode[] = { {320,240,V4L2_PIX_FMT_YUYV,V4L2_FIELD_NONE, - .bytesperline = 320, +.字节数 = 320*2, .sizeimage = 320 * 240 * 2, .颜色空间 = V4L2_COLORSPACE_SRGB, .priv = 2}, {640,480,V4L2_PIX_FMT_YUYV,V4L2_FIELD_NONE, - .bytesperline = 640, +.字节数 = 640*2, .sizeimage = 640 * 480 * 2, .颜色空间 = V4L2_COLORSPACE_SRGB, .priv = 1},