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

Created attachment 838082 [details]
Test case

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 at least gstreamer 1.12.5-lp151.2.5 package in openSUSE Leap 15.1.

This issue was supposedly ****fixed in Tumbleweed in may 2018***** (see bug
1049452). Yet here we are two years later with the same issue in openSUSE Leap
15.1, hence this new bug.

How reproducible:
100% reproducible.

Steps to reproduce:
1. Install a 64-bit version of openSUSE Leap. 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.i586.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 uses 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.i586.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.i586.bin is empty and 32-bit applications are
unable to find any GStreamer element.


You are receiving this mail because: