From 63115fe72cd58c43490bcda9ad9b9a287f81f5e1 Mon Sep 17 00:00:00 2001 From: Sebastian Dröge Date: Thu, 9 Jul 2009 07:14:23 +0200 Subject: avi: Don't forward NEWSEGMENT events from upstream New ones are generated later and simply forwarding them can result in NEWSEGMENT events of different format going downstream. Fixes bug #587983. --- gst/avi/gstavidemux.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) (limited to 'gst/avi/gstavidemux.c') diff --git a/gst/avi/gstavidemux.c b/gst/avi/gstavidemux.c index a681fd6c..7c660ec6 100644 --- a/gst/avi/gstavidemux.c +++ b/gst/avi/gstavidemux.c @@ -74,6 +74,8 @@ static void gst_avi_demux_reset (GstAviDemux * avi); static const GstEventMask *gst_avi_demux_get_event_mask (GstPad * pad); #endif static gboolean gst_avi_demux_handle_src_event (GstPad * pad, GstEvent * event); +static gboolean gst_avi_demux_handle_sink_event (GstPad * pad, + GstEvent * event); #if 0 static const GstFormat *gst_avi_demux_get_src_formats (GstPad * pad); @@ -188,6 +190,7 @@ gst_avi_demux_init (GstAviDemux * avi) gst_avi_demux_sink_activate_pull); gst_pad_set_activatepush_function (avi->sinkpad, gst_avi_demux_activate_push); gst_pad_set_chain_function (avi->sinkpad, gst_avi_demux_chain); + gst_pad_set_event_function (avi->sinkpad, gst_avi_demux_handle_sink_event); gst_element_add_pad (GST_ELEMENT (avi), avi->sinkpad); avi->adapter = gst_adapter_new (); @@ -675,6 +678,30 @@ gst_avi_demux_get_event_mask (GstPad * pad) } #endif +static gboolean +gst_avi_demux_handle_sink_event (GstPad * pad, GstEvent * event) +{ + gboolean res = TRUE; + GstAviDemux *avi = GST_AVI_DEMUX (gst_pad_get_parent (pad)); + + GST_DEBUG_OBJECT (avi, + "have event type %s: %p on sink pad", GST_EVENT_TYPE_NAME (event), event); + + switch (GST_EVENT_TYPE (event)) { + case GST_EVENT_NEWSEGMENT: + /* Drop NEWSEGMENT events, new ones are generated later */ + gst_event_unref (event); + break; + default: + res = gst_pad_event_default (pad, event); + break; + } + + gst_object_unref (avi); + + return res; +} + static gboolean gst_avi_demux_handle_src_event (GstPad * pad, GstEvent * event) { -- cgit