Bug ID 1049452
Summary The 32 bit GStreamer 1.0 packages are broken on 64 bit openSUSE
Classification openSUSE
Product openSUSE Distribution
Version Leap 42.2
Hardware Other
OS Other
Status NEW
Severity Normal
Priority P5 - None
Component GNOME
Assignee bnc-team-gnome@forge.provo.novell.com
Reporter fgouget@codeweavers.com
QA Contact qa-bugs@suse.de
Found By ---
Blocker ---

Created attachment 732967 [details]
Test application

Description of problem:
32 bit applications fail to find any GStreamer element with errors like:
(gst-plugin-scanner:16235): GStreamer-WARNING **: Failed to load plugin
'/usr/lib/gstreamer-1.0/libgstvideoconvert.so':
/usr/lib/gstreamer-1.0/libgstvideoconvert.so: wrong ELF class: ELFCLASS32

Versions impacted:
This impacts all versions of the gstreamer package from 1.0.10-2.1.4 in
openSUSE 13.1 to 1.8.3-1.8 in openSUSE 42.2.

How reproducible:
100% reproducible.

Steps to reproduce:
1. Install a 64 bit version of openSUSE. This is expected to install the 64 bit
GStreamer packages.
2. Install the 32 bit GStreamer packages:
   zypper install gstreamer-32bit gstreamer-plugins-base-32bit
3. Ideally I'd recommend using the 32 bit gst-inspect-1.0 tool but it is
nowhere to be found. So instead download the attached test application and
compile it:
   gcc -m32 -o cxgstcheck `pkg-config --cflags gstreamer-1.0` `pkg-config
--libs gstreamer-1.0` cxgstcheck.c
4. Clear the 32 bit registry and run the 32 bit cxgstcheck application to force
recreating it:
   rm ~/.cache/gstreamer-1.0/registry.i686.bin
   ./cxgstcheck


Note that while in this case we are using a test application, this affects any
32 bit application. In particular it impacts Wine and thus any 32 bit Windows
application (such as games) that depends on winegstreamer.dll.


Actual results:
$ ./cxgstcheck
[...]
(gst-plugin-scanner:16235): GStreamer-WARNING **: Failed to load plugin
'/usr/lib/gstreamer-1.0/libgstvideoconvert.so':
/usr/lib/gstreamer-1.0/libgstvideoconvert.so: wrong ELF class: ELFCLASS32
[...]
Bitness: 32 bits
could not instantiate h264parse
could not instantiate videoconvert
could not instantiate vp9dec
could not instantiate asfdemux


Expected results:
cxgstcheck should not issue ELFCLASS32 errors. It should also at least find the
videoconvert element since we installed gstreamer-plugins-base-32bit.
$ ./cxgstcheck
Bitness: 32 bits
could not instantiate h264parse
found videoconvert
could not instantiate vp9dec
could not instantiate asfdemux


Additional info:
The reason for this bug is that GStreamer applications rely on the
~/.cache/gstreamer-1.0/registry.i686.bin file to figure out which plugin (aka
library) provides a given GStreamer element.

However generating that file is delegated to the
/usr/lib/gstreamer-1.0/gst-plugin-scanner tool and on a 64 bit system this is a
64 bit executable provided by the gstreamer package. As a 64 bit tool it is
only able to load 64 bit GStreamer plugins. As a result
~/.cache/gstreamer-1.0/registry.i686.bin is empty and 32 bit applications are
unable to find any GStreamer element.

As a side-note, since gst-plugin-scanner is a 64 bit tool it should be in
/usr/lib64, not in /usr/lib!

Also note that 'zypper search -f gst-plugin-scanner' does not find any 32 bit
package providing that tool.


You are receiving this mail because: