[gst-devel] Flushing problems

Iain * iaingnome at gmail.com
Sat Dec 2 15:47:23 CET 2006


Once again I have problems :)

A pipeline thus has a src[1] and a custom joiner element[2] in it. The
src is derived from GstBaseSrc, and it all works fine if the joiner is
not placed in the pipeline.

When the pipeline goes to PLAYING, it plays fine
And when it goes back to READY, it stops...so far all good.

When the pipeline goes back to PLAYING, nothing happens.

By adding a few debugging statements here and there, it seems that
when the pipeline goes to READY, the GstBaseSrc emits an EOS event
(due to the code in gst_base_src_loop.c), but the joiner element never
receives it.

Then when the pipeline goes back to PLAYING, the joiner receives a
new-segment event, immediatly followed by an EOS.

Looking at the log, it seems this is the relevant piece for the disappearing EOS

(line 342121)
basesrc gstbasesrc.c:2082:gst_base_src_change_state:<src-0> Sending EOS event
GST_EVENT gstevent.c:285:gst_event_new: creating new event 0x824d878 eos 86
GST_PADS gstpad.c:3881:gst_pad_push_event:<src-0:src> event: eos
GST_PADS gstpad.c:3933:gst_pad_push_event:<src-0:src> sending event
eos to peerpad <joiner:sink0>
GST_REFCOUNTING gstobject.c:325:gst_object_ref:<joiner:sink0> 0x82a2d58 ref 3->4
GST_PADS gstpad.c:4021:gst_pad_send_event:<joiner:sink0> event had no
source, setting pad as event source
GST_REFCOUNTING gstobject.c:325:gst_object_ref:<joiner:sink0> 0x82a2d58 ref 4->5
GST_EVENT gstpad.c:4057:gst_pad_send_event:<joiner:sink0> have event type eos
GST_EVENT gstpad.c:4117:gst_pad_send_event:<joiner:sink0> Received
event on flushing pad. Discarding
GST_REFCOUNTING gstminiobject.c:301:gst_mini_object_unref: 0x824d878 unref 1->0
GST_EVENT gstevent.c:244:gst_event_finalize: freeing event 0x824d878 type eos
GST_REFCOUNTING gstobject.c:352:gst_object_unref:<joiner:sink0>
0x82a2d58 unref 5->4
GST_PADS gstpad.c:3940:gst_pad_push_event:<src-0:src> sent event to
peerpad <joiner:sink0>
GST_REFCOUNTING gstobject.c:352:gst_object_unref:<joiner:sink0>
0x82a2d58 unref 4->3

As I've said in the source, I just copied all the flushing event stuff
from the adder element, and I don't actually understand most of what
its trying to do. All suggestions greatfully received :)

Full log is at http://folks.o-hand.com/iain/flushing-log.gz

thanks
iain
[1] MarlinChannelSrc -
http://cvs.gnome.org/viewcvs/marlin/marlin/marlin-channel-src.c?view=markup
[2] MarlinChannelJoiner -
http://cvs.gnome.org/viewcvs/marlin/marlin/marlin-channel-joiner.c?view=markup




More information about the gstreamer-devel mailing list