GNOME Bugzilla – Bug 686176
gstreamer 1.0 ignores v4l2 quirk flags; video upside-down
Last modified: 2012-10-17 15:58:11 UTC
My Asus laptop's webcam is mounted upside-down (which seems to be rather common), and the v4l-utils libraries have a flag [1] to handle this issue, so programs using gstreamer-0.10 (such as Cheese) display the video correctly. However, the v4l flags are completely ignored in gstreamer-1.0 and it again displays everything upside-down, unless I manually LD_PRELOAD the "v4l2convert.so" library (which is provided by v4l-utils to make broken programs work). Normal: # unset LD_PRELOAD # gst-launch-0.10 v4l2src ! autovideosink Upside-down: # unset LD_PRELOAD # gst-launch-1.0 v4l2src ! autovideosink Normal again: # export LD_PRELOAD=/usr/lib/libv4l/v4l2convert.so # gst-launch-1.0 v4l2src ! autovideosink [1]: http://git.linuxtv.org/v4l-utils.git/commitdiff/d28aede850bb2c4076a7bc88764aac4150c7f9db
> However, the v4l flags are completely ignored in gstreamer-1.0 and it again > displays everything upside-down, unless I manually LD_PRELOAD the > "v4l2convert.so" library (which is provided by v4l-utils to make broken > programs work). Could you provide the output of: $ ldd /usr/lib/gstreamer-0.10/libgstvideo4linux2.so and $ ldd /usr/lib/gstreamer-1.0/libgstvideo4linux2.so ? Not sure if we should be doing anything special (should we?).
It seems that the 0.10 library is explicitly linked against libv4l2.so, which then loads libv4lconvert.so. $ ldd /usr/lib/gstreamer-0.10/libgstvideo4linux2.so linux-vdso.so.1 (0x00007fff571fb000) libgstbase-0.10.so.0 => /usr/lib/libgstbase-0.10.so.0 (0x00007f34a407e000) libgstcontroller-0.10.so.0 => /usr/lib/libgstcontroller-0.10.so.0 (0x00007f34a3e57000) libgstvideo-0.10.so.0 => /usr/lib/libgstvideo-0.10.so.0 (0x00007f34a3c3b000) libgstinterfaces-0.10.so.0 => /usr/lib/libgstinterfaces-0.10.so.0 (0x00007f34a3a28000) libgstreamer-0.10.so.0 => /usr/lib/libgstreamer-0.10.so.0 (0x00007f34a373f000) libgmodule-2.0.so.0 => /usr/lib/libgmodule-2.0.so.0 (0x00007f34a353b000) libxml2.so.2 => /usr/lib/libxml2.so.2 (0x00007f34a31de000) libX11.so.6 => /usr/lib/libX11.so.6 (0x00007f34a2ea5000) libXv.so.1 => /usr/lib/libXv.so.1 (0x00007f34a2c9f000) libXext.so.6 => /usr/lib/libXext.so.6 (0x00007f34a2a8b000) libv4l2.so.0 => /usr/lib/libv4l2.so.0 (0x00007f34a287f000) libgudev-1.0.so.0 => /usr/lib/libgudev-1.0.so.0 (0x00007f34a2675000) libgobject-2.0.so.0 => /usr/lib/libgobject-2.0.so.0 (0x00007f34a2426000) libgthread-2.0.so.0 => /usr/lib/libgthread-2.0.so.0 (0x00007f34a2224000) librt.so.1 => /usr/lib/librt.so.1 (0x00007f34a201c000) libglib-2.0.so.0 => /usr/lib/libglib-2.0.so.0 (0x00007f34a1d25000) libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007f34a1b09000) libc.so.6 => /usr/lib/libc.so.6 (0x00007f34a1762000) libdl.so.2 => /usr/lib/libdl.so.2 (0x00007f34a155d000) libm.so.6 => /usr/lib/libm.so.6 (0x00007f34a1263000) liborc-0.4.so.0 => /usr/lib/liborc-0.4.so.0 (0x00007f34a0fe8000) libpcre.so.1 => /usr/lib/libpcre.so.1 (0x00007f34a0d89000) libz.so.1 => /usr/lib/libz.so.1 (0x00007f34a0b73000) liblzma.so.5 => /usr/lib/liblzma.so.5 (0x00007f34a094f000) libxcb.so.1 => /usr/lib/libxcb.so.1 (0x00007f34a0730000) libv4lconvert.so.0 => /usr/lib/libv4lconvert.so.0 (0x00007f34a04b8000) libudev.so.1 => /usr/lib/libudev.so.1 (0x00007f34a02a6000) libffi.so.6 => /usr/lib/libffi.so.6 (0x00007f34a009e000) /usr/lib/ld-linux-x86-64.so.2 (0x00007f34a4530000) libXau.so.6 => /usr/lib/libXau.so.6 (0x00007f349fe99000) libXdmcp.so.6 => /usr/lib/libXdmcp.so.6 (0x00007f349fc93000) libjpeg.so.8 => /usr/lib/libjpeg.so.8 (0x00007f349fa42000) $ ldd /usr/lib/gstreamer-1.0/libgstvideo4linux2.so linux-vdso.so.1 (0x00007ffffe5e0000) libgstbase-1.0.so.0 => /usr/lib/libgstbase-1.0.so.0 (0x00007ff305cf7000) libgstvideo-1.0.so.0 => /usr/lib/libgstvideo-1.0.so.0 (0x00007ff305ab6000) libgstreamer-1.0.so.0 => /usr/lib/libgstreamer-1.0.so.0 (0x00007ff3057c3000) libgmodule-2.0.so.0 => /usr/lib/libgmodule-2.0.so.0 (0x00007ff3055be000) libgthread-2.0.so.0 => /usr/lib/libgthread-2.0.so.0 (0x00007ff3053bc000) librt.so.1 => /usr/lib/librt.so.1 (0x00007ff3051b4000) libX11.so.6 => /usr/lib/libX11.so.6 (0x00007ff304e7a000) libXv.so.1 => /usr/lib/libXv.so.1 (0x00007ff304c74000) libXext.so.6 => /usr/lib/libXext.so.6 (0x00007ff304a61000) libgudev-1.0.so.0 => /usr/lib/libgudev-1.0.so.0 (0x00007ff304856000) libgobject-2.0.so.0 => /usr/lib/libgobject-2.0.so.0 (0x00007ff304608000) libglib-2.0.so.0 => /usr/lib/libglib-2.0.so.0 (0x00007ff304312000) libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007ff3040f5000) libc.so.6 => /usr/lib/libc.so.6 (0x00007ff303d4e000) libdl.so.2 => /usr/lib/libdl.so.2 (0x00007ff303b4a000) liborc-0.4.so.0 => /usr/lib/liborc-0.4.so.0 (0x00007ff3038ce000) libm.so.6 => /usr/lib/libm.so.6 (0x00007ff3035d4000) libpcre.so.1 => /usr/lib/libpcre.so.1 (0x00007ff303376000) libxcb.so.1 => /usr/lib/libxcb.so.1 (0x00007ff303156000) libudev.so.1 => /usr/lib/libudev.so.1 (0x00007ff302f45000) libffi.so.6 => /usr/lib/libffi.so.6 (0x00007ff302d3c000) /usr/lib/ld-linux-x86-64.so.2 (0x00007ff3061a5000) libXau.so.6 => /usr/lib/libXau.so.6 (0x00007ff302b38000) libXdmcp.so.6 => /usr/lib/libXdmcp.so.6 (0x00007ff302931000)
Right, so effectively this is a build issue then, right? I'm not sure why the 1.0 plugin isn't linked to that library, perhaps you should ask whoever provided you with the binaries/package? Here the 1.0 version links just fine, same for the debian packages, so looks like NOTGNOME to me at first glance.
You're right, the package seems to have been built without --with-libv4l2... I'll contact the packager.