Comment 30 for bug 224559

Revision history for this message
Hans de Goede (j-w-r-degoede) wrote :

Hi all,

Short self intro: I'm a v4l kernel subsystem developer and the author and maintainer of libv4l. So when it comes to upside down mounted webcams in laptops there are 3 important points to keep in mind:

1) Video processing in the kernel is wrong, and the kernel patch which some here have referred to is doubly wrong because it will flip the image of all uvc devices not just those mounted upside down in some webcams. Please stop mucking around with kernel patches, they are not the solution to this problem!

2) The proper solution for this is flipping the image in userspace which is being handled by libv4l. libv4l has a large list of known to have a mounted upside down webcam laptop models which is constantly updated. There is a ppa available which is tracking upstream libv4l (now part of v4l-utils) pretty closely, follow the instructions here to install libv4l from this ppa:
http://radu.cotescu.com/2009/11/05/flipped-images-ubuntu-webcam/

3) Unfortunately not all programs are using libv4l, some try to talk to the /dev/video node directly, please test with "cheese" and if the image is not upside down there, the problem you are seeing is not in libv4l, but an app which does not use libv4l, see below for a workaround for this.

If the image is still upside down in cheese *after* installing the latest libv4l / v4l-utils from the above link, then your laptop model is not in the list of libv4l, please do (as root):
lsusb > lsusb.log
dmidecode > dmi.log

And send me <email address hidden>, a mail with the 2 generated files attached. Do *NOT* copy and paste them I need them 100% unmodified.

I'll then add your laptop to libv4l's upside down table and get back to you with testing instructions.

4) Programs which are not using libv4l, notorious examples of which are skype and the google chat firefox plugin, can be made to use libv4l by pre-loading a libc wrapper, launch the program in question from a cmdline like this to use this wrapper:
LD_PRELOAD=/usr/lib/libv4l/v4l1compat.so application_name

For example for skype:
LD_PRELOAD=/usr/lib/libv4l/v4l1compat.so skype

Note that when running 32 bit apps such as skype (even the so called 64 bit download of skype is 32 bits!!) and the google chat firefox plugin on a 64 bit install, you must use the following line to get the 32 bit version if the wrapper:
LD_PRELOAD=/usr/lib32/libv4l/v4l1compat.so skype

Note that for the google chat plugin, firefox must be started with this wrapper, first close *all* firefox windows and then do:
LD_PRELOAD=/usr/lib/libv4l/v4l1compat.so firefox
Or on 64 bit installs:
LD_PRELOAD=/usr/lib32/libv4l/v4l1compat.so firefox

Regards,

Hans