GNOME Bugzilla – Bug 350006
[LADSPA] after changing state from PLAYING to READY/NULL, going back to PLAYING doesn't work
Last modified: 2006-08-16 16:50:28 UTC
Please describe the problem: Attached is a sample script that demonstrates this bug. I basically create pipeline which feeds an ogg file through a LADSPA effect. I set the state to PLAYING, and it plays fine, complete with the expected effect output. I then switch to READY or NULL, which is fine, but when I set the state back to PLAYING, things go horribly wrong. I get different errors, depending on whether we go from READY or NULL. This is after I have played it once. So, I first go from NULL to PLAYING, and it works, and then I either set it to READY or NULL, and when I go to PLAYING I get different errors: >> From READY to PLAYING << ** (ladspabug.py:9754): CRITICAL **: gst_signal_processor_setup: assertion `self->state == GST_SIGNAL_PROCESSOR_STATE_NULL' failed ** (ladspabug.py:9754): CRITICAL **: gst_signal_processor_setup: assertion `self->state == GST_SIGNAL_PROCESSOR_STATE_NULL' failed ** (ladspabug.py:9754): CRITICAL **: gst_signal_processor_setup: assertion `self->state == GST_SIGNAL_PROCESSOR_STATE_NULL' failed ** (ladspabug.py:9754): CRITICAL **: gst_signal_processor_setup: assertion `self->state == GST_SIGNAL_PROCESSOR_STATE_NULL' failed ** (ladspabug.py:9754): CRITICAL **: gst_signal_processor_setup: assertion `self->state == GST_SIGNAL_PROCESSOR_STATE_NULL' failed ** (ladspabug.py:9754): CRITICAL **: gst_signal_processor_setup: assertion `self->state == GST_SIGNAL_PROCESSOR_STATE_NULL' failed ** (ladspabug.py:9754): CRITICAL **: gst_signal_processor_setup: assertion `self->state == GST_SIGNAL_PROCESSOR_STATE_NULL' failed ** (ladspabug.py:9754): CRITICAL **: gst_signal_processor_setup: assertion `self->state == GST_SIGNAL_PROCESSOR_STATE_NULL' failed ** (ladspabug.py:9754): CRITICAL **: gst_signal_processor_setup: assertion `self->state == GST_SIGNAL_PROCESSOR_STATE_NULL' failed ** (ladspabug.py:9754): CRITICAL **: gst_signal_processor_setup: assertion `self->state == GST_SIGNAL_PROCESSOR_STATE_NULL' failed I also check the error bus: GStreamer encountered a general stream error. gstoggdemux.c(2852): gst_ogg_demux_loop (): /mixer/mycomposition1/audio1/internal-decodebin/oggdemux1: stream stopped, reason not-negotiated >> From NULL to PLAYING << ** (ladspabug.py:9829): CRITICAL **: gst_signal_processor_process: assertion `self->pending_out == 0' failed ** (ladspabug.py:9829): WARNING **: Unexpectedly empty buffer pen for pad effect1:Output ** (ladspabug.py:9829): CRITICAL **: Something wierd happened... ** (ladspabug.py:9829): CRITICAL **: gst_signal_processor_process: assertion `self->pending_out == 0' failed ** (ladspabug.py:9829): WARNING **: Unexpectedly empty buffer pen for pad effect1:Output ** (ladspabug.py:9829): CRITICAL **: Something wierd happened... ** (ladspabug.py:9829): CRITICAL **: gst_signal_processor_process: assertion `self->pending_out == 0' failed ** (ladspabug.py:9829): WARNING **: Unexpectedly empty buffer pen for pad effect1:Output ** (ladspabug.py:9829): CRITICAL **: Something wierd happened... ** (ladspabug.py:9829): CRITICAL **: gst_signal_processor_process: assertion `self->pending_out == 0' failed ** (ladspabug.py:9829): WARNING **: Unexpectedly empty buffer pen for pad effect1:Output ** (ladspabug.py:9829): CRITICAL **: Something wierd happened... ** (ladspabug.py:9829): CRITICAL **: gst_signal_processor_process: assertion `self->pending_out == 0' failed ** (ladspabug.py:9829): WARNING **: Unexpectedly empty buffer pen for pad effect1:Output ** (ladspabug.py:9829): CRITICAL **: Something wierd happened... ** (ladspabug.py:9829): CRITICAL **: gst_signal_processor_process: assertion `self->pending_out == 0' failed ** (ladspabug.py:9829): WARNING **: Unexpectedly empty buffer pen for pad effect1:Output ** (ladspabug.py:9829): CRITICAL **: Something wierd happened... ** (ladspabug.py:9829): CRITICAL **: gst_signal_processor_process: assertion `self->pending_out == 0' failed ** (ladspabug.py:9829): WARNING **: Unexpectedly empty buffer pen for pad effect1:Output ** (ladspabug.py:9829): CRITICAL **: Something wierd happened... ** (ladspabug.py:9829): CRITICAL **: gst_signal_processor_process: assertion `self->pending_out == 0' failed ** (ladspabug.py:9829): WARNING **: Unexpectedly empty buffer pen for pad effect1:Output ** (ladspabug.py:9829): CRITICAL **: Something wierd happened... ** (ladspabug.py:9829): CRITICAL **: gst_signal_processor_process: assertion `self->pending_out == 0' failed ** (ladspabug.py:9829): WARNING **: Unexpectedly empty buffer pen for pad effect1:Output ** (ladspabug.py:9829): CRITICAL **: Something wierd happened... ** (ladspabug.py:9829): CRITICAL **: gst_signal_processor_process: assertion `self->pending_out == 0' failed ** (ladspabug.py:9829): WARNING **: Unexpectedly empty buffer pen for pad effect1:Output ** (ladspabug.py:9829): CRITICAL **: Something wierd happened... I also check the error bus: GStreamer encountered a general stream error. gstoggdemux.c(2852): gst_ogg_demux_loop (): /mixer/mycomposition1/audio1/internal-decodebin/oggdemux1: stream stopped, reason error Steps to reproduce: 1. 2. 3. Actual results: Expected results: Does this happen every time? Other information:
Created attachment 70236 [details] Test case
Created attachment 70237 [details] Glade file for use with test case
Created attachment 70507 [details] [review] patchy patch Jono, you should check out the python shell, and its most awesome variant ipython (google for it). It's great. So my test case goes like this: $ ipython >> import pygst; pygst.require('0.10'); import gst >> p = gst.parse_launch('audiotestsrc ! audioconvert ! ladspa-identity-audio ! fakesink') >> p.set_state(gst.STATE_PLAYING) >> p.set_state(gst.STATE_NULL) >> p.set_state(gst.STATE_PLAYING) Anyways, the attached patch fixes this bug and #349901. Unfortunately we are in a freeze. Try it out and tell me if there are more problems.
I tested the patch, and it still doesn't solve the problem. Using my test script that I attached to this bug, I press play and it plays fine, press stop and when I press play again, it doesn't play. These are the errors that gst spits at me: ** (ladspabug.py:18338): CRITICAL **: gst_signal_processor_process: assertion `self->pending_out == 0' failed ** (ladspabug.py:18338): WARNING **: Unexpectedly empty buffer pen for pad effect1:Output ** (ladspabug.py:18338): CRITICAL **: Something wierd happened... ** (ladspabug.py:18338): CRITICAL **: gst_signal_processor_process: assertion `self->pending_out == 0' failed ** (ladspabug.py:18338): WARNING **: Unexpectedly empty buffer pen for pad effect1:Output ** (ladspabug.py:18338): CRITICAL **: Something wierd happened... ** (ladspabug.py:18338): CRITICAL **: gst_signal_processor_process: assertion `self->pending_out == 0' failed ** (ladspabug.py:18338): WARNING **: Unexpectedly empty buffer pen for pad effect1:Output ** (ladspabug.py:18338): CRITICAL **: Something wierd happened... ** (ladspabug.py:18338): CRITICAL **: gst_signal_processor_process: assertion `self->pending_out == 0' failed ** (ladspabug.py:18338): WARNING **: Unexpectedly empty buffer pen for pad effect1:Output ** (ladspabug.py:18338): CRITICAL **: Something wierd happened... ** (ladspabug.py:18338): CRITICAL **: gst_signal_processor_process: assertion `self->pending_out == 0' failed ** (ladspabug.py:18338): WARNING **: Unexpectedly empty buffer pen for pad effect1:Output ** (ladspabug.py:18338): CRITICAL **: Something wierd happened... ** (ladspabug.py:18338): CRITICAL **: gst_signal_processor_process: assertion `self->pending_out == 0' failed ** (ladspabug.py:18338): WARNING **: Unexpectedly empty buffer pen for pad effect1:Output ** (ladspabug.py:18338): CRITICAL **: Something wierd happened... ** (ladspabug.py:18338): CRITICAL **: gst_signal_processor_process: assertion `self->pending_out == 0' failed ** (ladspabug.py:18338): WARNING **: Unexpectedly empty buffer pen for pad effect1:Output ** (ladspabug.py:18338): CRITICAL **: Something wierd happened... ** (ladspabug.py:18338): CRITICAL **: gst_signal_processor_process: assertion `self->pending_out == 0' failed ** (ladspabug.py:18338): WARNING **: Unexpectedly empty buffer pen for pad effect1:Output ** (ladspabug.py:18338): CRITICAL **: Something wierd happened... ** (ladspabug.py:18338): CRITICAL **: gst_signal_processor_process: assertion `self->pending_out == 0' failed ** (ladspabug.py:18338): WARNING **: Unexpectedly empty buffer pen for pad effect1:Output ** (ladspabug.py:18338): CRITICAL **: Something wierd happened... ** (ladspabug.py:18338): CRITICAL **: gst_signal_processor_process: assertion `self->pending_out == 0' failed ** (ladspabug.py:18338): WARNING **: Unexpectedly empty buffer pen for pad effect1:Output ** (ladspabug.py:18338): CRITICAL **: Something wierd happened... !!!! bus message error: GStreamer encountered a general stream error. !!!! bus message debug: gstoggdemux.c(2852): gst_ogg_demux_loop (): /mixer/mycomposition1/audio1/internal-decodebin/oggdemux1: stream stopped, reason error
Patch by: Andy Wingo <wingo at pobox dot com> * ext/ladspa/gstsignalprocessor.c: (gst_signal_processor_setup), (gst_signal_processor_start), (gst_signal_processor_stop), (gst_signal_processor_cleanup), (gst_signal_processor_setcaps), (gst_signal_processor_pen_buffer), (gst_signal_processor_flush), (gst_signal_processor_do_pulls), (gst_signal_processor_do_pushes), (gst_signal_processor_change_state): Make ladspa elements reusable. Fixes #350006.