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.