interleave ! pulsesink link doesn't work

Bug #657457 reported by Antti S. Lankila on 2010-10-09
This bug affects 1 person
Affects Status Importance Assigned to Milestone
gst-plugins-good0.10 (Ubuntu)

Bug Description

I have a stereo LADSPA plugin I want to use to filter my audio using gstreamer. Unfortunately, I discovered that gstreamer's gstladspa plugin can't be naturally used with stereo sound sources. However, I realized that the interleave and deinterleave plugins can be used to split a 2-channel stream to 2 separate streams, which can be routed to the LADSPA plugin, and the result can then be reassembled back to 2-channel audio.

However, there is a bug between the interleave and pulsesink. Given a suitable 2-channel file, one should be able to reproduce the problem on a 10.10 installation:

gst-launch-0.10 \
 de.src0 '!' queue '!' in.sink0 \
 de.src1 '!' queue '!' in.sink1 \
 filesrc location="$1" '!' decodebin '!' deinterleave name=de \
 interleave name=in '!' audioconvert '!' pulsesink

To parse this out, the fragment is copypasted from shell script. The filename to play is specified in $1, and is decoded and split to two channels (it is a stereo file), which are then piped through queue (which seems to be necessary for some reason) to the interleave sink, which assembles them together and sends the result to pulsesink. However, pulsesink rejects this command, saying:

Setting pipeline to PAUSED ...
Pipeline is PREROLLING ...
ERROR: from element /GstPipeline:pipeline0/GstPulseSink:pulsesink0: Failed to create stream: Invalid argument
Additional debug info:
pulsesink.c(826): gst_pulseringbuffer_acquire (): /GstPipeline:pipeline0/GstPulseSink:pulsesink0
ERROR: pipeline doesn't want to preroll.
Setting pipeline to NULL ...
Freeing pipeline ...

The failure to create stream arises from pa_stream_new() call in ext/pulse/pulsesink.c. The strange thing is, if I change the sink to alsasink, the file I specified begins to play, indicating that the problem must somehow be related to pulsesink. Similarly, if I modify the last line to something like:

 interleave name=il '!' audioconvert '!' flacenc '!' decodebin '!' pulsesink

also workarounds the problem, for some unfathomable reason.

Antti S. Lankila (alankila) wrote :

OK, I discovered that NULLing out the channel map in the pa_stream_new() call seems to fix the problem, so therefore the problem must be with bad generation of the channel-positions in interleave source or bad handling of (valid) channel-positions in pulsesink.

I haven't yet worked out how to give custom channel-positions arrays on the gst-launch command line. Should be an array of integers, and in this case probably {1, 2}, but I haven't found the syntax to express those arrays in yet.

Pedro Villavicencio (pedro) wrote :

Thanks for the report, it has been some time without any response or feedback in this bug report and we are wondering if this is still an issue for you with the latest release of Ubuntu the Natty Narwhal, May you please test with that version and comment back if you're still having or not the issue? Please have a look at to know how to install that version. Thanks in advance and sorry for the late response.

Changed in gst-plugins-good0.10 (Ubuntu):
importance: Undecided → Low
status: New → Incomplete
Launchpad Janitor (janitor) wrote :

[Expired for gst-plugins-good0.10 (Ubuntu) because there has been no activity for 60 days.]

Changed in gst-plugins-good0.10 (Ubuntu):
status: Incomplete → Expired
To post a comment you must log in.
This report contains Public information  Edit
Everyone can see this information.

Other bug subscribers