GNOME Bugzilla – Bug 148332
link renegotiation problem [regression]
Last modified: 2004-12-22 21:47:04 UTC
Hi folks, I've got a pipeline like this: x---------------------------------------- ScAudioPlay thread -----------x | | | | | x--------- ScAudioDecode thread -----------x | | | src ! spider ! audioconvert ! audioscale | ! queue ! vol ! audiosink| | x------------------------------------------x | | | x-----------------------------------------------------------------------x The ScAudioDecode part is re-created for every new song to be played. This worked fine with all previous 0.8.x versions, but now suddenly I get this when changing songs (as far as I can see when changing from an .ogg to an .mp3, but there might be other cases as well): Playing: /mnt/media/music-tautologist/03 - Leonard Cohen - First We Take Manhattan.mp3 [Playing category: All Songs] sc-audio-play.c:1420 GStreamer-CRITICAL **: file gstcaps.c: line 203 (gst_caps_copy): assertion `GST_IS_CAPS (caps)' failed aborting... Program received signal SIGABRT, Aborted. [Switching to Thread 1086356032 (LWP 3699)] 0x40853f19 in raise () from /lib/tls/libc.so.6 (gdb) bt
+ Trace 48800
-------------------- sometimes the warnings look like this: (scentric:2802): GStreamer-CRITICAL **: file gstcaps.c: line 203 (gst_caps_copy): assertion `GST_IS_CAPS (caps)' failed (scentric:2802): GStreamer-CRITICAL **: pad queue:sink returned NULL caps from getcaps function (scentric:2802): GStreamer-CRITICAL **: file gstcaps.c: line 699 (gst_caps_is_equal): assertion `caps2 != NULL' failed Cheers -Tim
Erm, silly me, the full set of warnings always looks like quoted at the end, but of course it stops after the first warning when run with --g-fatal-warnings ... Let me know if you need more information or a full debug log. Cheers -Tim
Could you try to reproduce this somehow with replugging in a { { fakesrc ! identity } ! queue ! fakesink } or similar pipeline, so we can a) easily reproduce this b) add this to the testsuite I think there's some proper locking missing in the _getcaps and _link functions, but it's a bit hard to fix by guessing.
Looks like this commit fixed the main problem: 2004-07-25 Benjamin Otte <otte@gnome.org> * gst/autoplug/gstspideridentity.c: (gst_spider_identity_link): don't delay links on the sink elements, it causes unnegotiated links. * gst/elements/gsttypefindelement.c: (gst_type_find_element_base_init): add our padtemplates, we indeed do have some. * gst/elements/gsttypefindelement.c: (gst_type_find_element_handle_event), (gst_type_find_element_chain): don't push data when typefinding failed. * gst/gstpad.c: (gst_pad_link_fixate): check that no fixate function returns empty caps. * gst/gstpad.c: (gst_pad_push): check that the link is negotiated before data gets pushed. * tools/gst-register.c: (main): don't assert (fixes #148283) I still get a GStreamer-Warning **: pushing data on non-negotiated pad audioscale:src, not allowed when re-linking (stack trace below), but things seem to work again anyway. I don't have time to write a test case at the moment, sorry. Still moving home etc. Cheers -Tim -------------- Stack trace from the above warning: Playing: foo.mp3 GStreamer-WARNING **: pushing data on non-negotiated pad audioscale:src, not allowed. aborting... Program received signal SIGABRT, Aborted. [Switching to Thread 1102605232 (LWP 28642)] 0x40853f19 in raise () from /lib/tls/libc.so.6 (gdb) bt
+ Trace 48825
This seems to be fully fixed now => closing bug. Thanks for the quick fix. Cheers -Tim