concat: Forward FLUSH_START and FLUSH_STOP events
authorCarlos Rafael Giani <dv@pseudoterminal.org>
Sat, 28 Mar 2015 15:46:32 +0000 (16:46 +0100)
committerSebastian Dröge <sebastian@centricular.com>
Wed, 10 Jun 2015 09:51:49 +0000 (11:51 +0200)
Without this, seeking deadlocks if performed while the pipeline is paused.
Only flush events coming from the active pad are forwarded.

https://bugzilla.gnome.org/show_bug.cgi?id=745366

plugins/elements/gstconcat.c

index 340a2d1..63358bf 100644 (file)
@@ -504,15 +504,29 @@ gst_concat_sink_event (GstPad * pad, GstObject * parent, GstEvent * event)
       break;
     }
     case GST_EVENT_FLUSH_START:{
+      gboolean forward;
       g_mutex_lock (&self->lock);
       spad->flushing = TRUE;
       g_cond_broadcast (&self->cond);
+      forward = (self->current_sinkpad == GST_PAD_CAST (spad));
       g_mutex_unlock (&self->lock);
+      if (forward)
+        ret = gst_pad_event_default (pad, parent, event);
+      else
+        gst_event_unref (event);
       break;
     }
     case GST_EVENT_FLUSH_STOP:{
+      gboolean forward;
       gst_segment_init (&spad->segment, GST_FORMAT_UNDEFINED);
       spad->flushing = FALSE;
+      g_mutex_lock (&self->lock);
+      forward = (self->current_sinkpad == GST_PAD_CAST (spad));
+      g_mutex_unlock (&self->lock);
+      if (forward)
+        ret = gst_pad_event_default (pad, parent, event);
+      else
+        gst_event_unref (event);
       break;
     }
     default:{