I for one welcome our new buggy GST DecodeBin!

Consider the following gst-launch pipelines.

The first one uses decodebin as all proper GStreamer pipelines should:

nenolod@petrie ~ $ gst-launch-0.10 filesrc location=/home/nenolod/Moby\ -\ Porcelain.mp3 ! decodebin ! audioconvert ! audioresample ! osssink
Setting pipeline to PAUSED ...
Pipeline is PREROLLING ...

ERROR: from element /pipeline0/filesrc0: Internal data flow error.
Additional debug info:
gstbasesrc.c(1811): gst_base_src_loop (): /pipeline0/filesrc0:
streaming task paused, reason not-linked (-1)
ERROR: pipeline doesn't want to preroll.
Setting pipeline to NULL ...
FREEING pipeline ...

The second one works, by not using decodebin:


nenolod@petrie ~ $ gst-launch-0.10 filesrc location=/home/nenolod/Moby\ -\ Porcelain.mp3 ! mad ! audioconvert ! audioresample ! osssink
Setting pipeline to PAUSED ...
Pipeline is PREROLLING ...
Pipeline is PREROLLED ...
Setting pipeline to PLAYING ...
New clock: GstAudioSinkClock
Got EOS from element "pipeline0".
Execution ended after 241196555000 ns.

Setting pipeline to PAUSED ...
Setting pipeline to READY ...
Setting pipeline to NULL ...
FREEING pipeline ...

Now for today’s round of questions:

  • What the hell does gstbasesrc.c(1811): gst_base_src_loop (): /pipeline0/filesrc0: streaming task paused, reason not-linked (-1) mean?
  • Why does decodebin fail while calling the mad GST pad directly works?
  • How does Audacious handle this situation differently than GStreamer?

I leave determining those to the reader.