[gst-devel] Possible ABI problems with gstreamer 0.8.4

Brian Cameron Brian.Cameron at Sun.COM
Wed Jul 28 10:10:06 CEST 2004


Here at Sun we we have been using gstreamer 0.8.1 and gst-plugins 0.8.1,
and we were very excited to consider upgrading to the latest gstreamer
0.8.4 and either gst-plugins 0.8.2 or the soon-to-be-released 0.8.3.
Mainly because of the new sunaudiosink which will allow gstreamer to
work without requiring esd.  Also because the schedulers have been
improved.

However, after upgrading my system to use the new versions of gstreamer
and gst-plugins,  I have discovered that both nautilus-audio-view and totem
no longer work with certain plugins.  I have tested with both ogg-vorbis
files and WAV files.  ogg-vorbis still works fine, but WAV files no longer
work properly.  I have also tested playing WAV files with gst-launch,
which works fine.  I'll explain the problems I'm seeing here:

* nautilus-media: In the function gmi_set_mime in file media-info-priv.c
   it calls gst_element_get_pad (priv->decoder, "src"), which returns
   NULL when trying to play a WAV file and this causes an assert.  On
   Solaris, this causes nautilus to hang and become unusable without
   killing the process.  In talking with the gstreamer team on
   #gstreamer, it seems that this problem is caused because the wavparse
   plugin has been changed to use a "sometimes" pad to work in spider.
   Since the pads are not created until runtime, they are not available
   to nautilus media anymore, and cause this assert.

* totem: Seems to be a similar problem.  The function gst_wavparse_fmt
   calls gst_pad_set_explicit_caps, which calls gst_pad_try_set_caps,
   and this returns GST_PAD_LINK_REFUSED.  In the debugger, I notice
   that the failing call to gst_pad_try_set_caps passes in a pad which
   has a name "src".  And I get these errors:

   gstpad.c(2489):gst_pad_set_explicit_caps:<wavparse0> failed to negotiate
    (try_set_caps with "audio/x-raw-int, endianness=(int)1234, width=(int)8,
    depth=(int)8, signed=(boolean)false, rate=(int)22050, channels=(int)1"
    returned REFUSED
   scheduler( 8181) gstoptimalscheduler.c(2612):gst_opt_scheduler_iterate:
    <GstOptScheduler at 3bb480> in error state

In talking with gstreamer developers on #gstreamer, it seems that these
problem were caused because the wavparse plugin has been changed to use a
"sometimes" pad to work in spider.

At any rate, it seems that the latest versions of gstreamer cause
nautilus-media and totem to break.  This could be considered an ABI
issue, since these programs obviously need to be fixed/modified to
work properly with the latest release of gstreamer.

This could mean that Sun will have to stick with gstreamer 0.8.1 and
gst-plugins 0.8.1 and just backport the sunaudiosink plugin, at least
until nautilus-media and totem are fixed.  Another alternative, I
suppose, would be to modify gstreamer so it continues to work with
existing applications.

Sun could consider shipping the newer versions of gstreamer if totem
and nautilus-media work, but our timeframe is short - and the needed
patches would need to be made available quickly for us to consider
this.

If the gstreamer team decides to release a new version of gstreamer
that causes various applications to break, I recommend that this
be made clear in the release notes.  I also recommend that the
gstreamer team notify the various module maintainers who depend on
gstreamer (nautilus-media, totem, etc.) that the new release of
gstreamer may break their programs.

-- 

Brian





More information about the gstreamer-devel mailing list