summaryrefslogtreecommitdiffstats
path: root/gst/avi/gstavidemux.c
diff options
context:
space:
mode:
authorSebastian Dröge <sebastian.droege@collabora.co.uk>2009-07-09 07:14:23 +0200
committerSebastian Dröge <sebastian.droege@collabora.co.uk>2009-07-09 07:14:23 +0200
commit63115fe72cd58c43490bcda9ad9b9a287f81f5e1 (patch)
tree60a40e4acd7514e8fd9e6c497af66e3b9643876b /gst/avi/gstavidemux.c
parent356972740a6c4abeadebfe6e60a5bf248429ffbd (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/avi/gstavidemux.c')
-rw-r--r--gst/avi/gstavidemux.c27
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;