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.