diff options
author | Sebastian Dröge <sebastian.droege@collabora.co.uk> | 2009-07-09 07:14:23 +0200 |
---|---|---|
committer | Sebastian Dröge <sebastian.droege@collabora.co.uk> | 2009-07-09 07:14:23 +0200 |
commit | 63115fe72cd58c43490bcda9ad9b9a287f81f5e1 (patch) | |
tree | 60a40e4acd7514e8fd9e6c497af66e3b9643876b /gst | |
parent | 356972740a6c4abeadebfe6e60a5bf248429ffbd (diff) |
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.
Diffstat (limited to 'gst')
-rw-r--r-- | gst/avi/gstavidemux.c | 27 |
1 files changed, 27 insertions, 0 deletions
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 (); @@ -676,6 +679,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) { gboolean res = TRUE; |