Bug 1472160 - The 32 bit GStreamer 1.0 packages are broken on 64 bit Fedora
The 32 bit GStreamer 1.0 packages are broken on 64 bit Fedora
Status: NEW
Product: Fedora
Classification: Fedora
Component: gstreamer1 (Show other bugs)
26
Unspecified Unspecified
unspecified Severity unspecified
: ---
: ---
Assigned To: Brian Pepple
Fedora Extras Quality Assurance
:
Depends On:
Blocks:
  Show dependency treegraph
 
Reported: 2017-07-18 04:13 EDT by Francois Gouget
Modified: 2017-07-18 04:13 EDT (History)
3 users (show)

See Also:
Fixed In Version:
Doc Type: If docs needed, set a value
Doc Text:
Story Points: ---
Clone Of:
Environment:
Last Closed:
Type: Bug
Regression: ---
Mount Type: ---
Documentation: ---
CRM:
Verified Versions:
Category: ---
oVirt Team: ---
RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: ---


Attachments (Terms of Use)

  None (edit)
Description Francois Gouget 2017-07-18 04:13:45 EDT
Description of problem:
32 bit applications fail to find any GStreamer element with errors like:
(gst-plugin-scanner:24901): GStreamer-WARNING **: Failed to load plugin '/usr/lib/gstreamer-1.0/libgstvideoconvert.so': /usr/lib/gstreamer-1.0/libgstvideoconvert.so: wrong ELF class: ELFCLASS32

Version-Release number of selected component (if applicable):
This impacts all versions of the gstreamer1 package from 1.0.10-1 in Fedora 18 to 1.12.1-1 in Fedora 26.

How reproducible:
100% reproducible.

Steps to Reproduce:
1. Install a 64 bit version of Fedora.
2. Install the 32 bit GStreamer packages:
   dnf install gstreamer1-plugins-base.i686
3. Download and extract the 32 bit gstreamer1 package for your Fedora version. For instance
   mkdir gst1
   cd gst1
   dnf download gstreamer1.i686 
   rpm2cpio gstreamer1*.rpm | cpio -idmv
4. Clear the 32 bit registry and run the 32 bit gst-inspect-1.0 tool to force recreating it:
   rm ~/.cache/gstreamer-1.0/registry.i686.bin
   ~/gst1/usr/bin/gst-inspect-1.0 videoconvert

Note that while in this case we are using the standard 32 bit gst-inspect-1.0 binary, 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:
$ ~/gst1/usr/bin/gst-inspect-1.0 videoconvert
[...]
(gst-plugin-scanner:24820): GStreamer-WARNING **: Failed to load plugin '/usr/lib/gstreamer-1.0/libgstvideoconvert.so': /usr/lib/gstreamer-1.0/libgstvideoconvert.so: wrong ELF class: ELFCLASS32
[...]
No such element or plugin 'videoconvert'


Expected results:
Information about the videoconvert element of the 32 bit gstreamer1-plugins-base package.


Additional info:
The reason for this bug is that scanning the plugins is delegated to /usr/libexec/gstreamer-1.0/gst-plugin-scanner. However on a 64 bit system this is a 64 bit executable provided by gstreamer1.x86_64 which is thus only able to load 64 bit GStreamer plugins.

As proof, the above issue can be fixed by running the following commands:
* As root:
  mv /usr/libexec/gstreamer-1.0/gst-plugin-scanner /usr/libexec/gstreamer-1.0/gst-plugin-scanner.x86_64
  cp /home/user/gst1/usr/libexec/gstreamer-1.0/gst-plugin-scanner /usr/libexec/gstreamer-1.0

* Then in the user account the 32 bit gst-inspect-1.0 command will then return the expected result:
   rm ~/.cache/gstreamer-1.0/registry.i686.bin
   ~/gst1/usr/bin/gst-inspect-1.0 videoconvert

However this is obviously not a proper fix since that breaks scanning 64 bit plugins.

Note You need to log in before you can comment on or make changes to this bug.