baseparse: drain segment upon SEGMENT_DONE to ensure proper event order
authorMark Nauwelaerts <mnauw@users.sourceforge.net>
Sun, 22 Feb 2015 09:01:33 +0000 (10:01 +0100)
committerMark Nauwelaerts <mnauw@users.sourceforge.net>
Mon, 23 Feb 2015 19:08:20 +0000 (20:08 +0100)
libs/gst/base/gstbaseparse.c

index 32b80cf..9605e38 100644 (file)
@@ -1135,6 +1135,17 @@ gst_base_parse_sink_event_default (GstBaseParse * parse, GstEvent * event)
       break;
     }
 
+    case GST_EVENT_SEGMENT_DONE:
+      /* need to drain now, rather than upon a new segment,
+       * since that would have SEGMENT_DONE come before potential
+       * delayed last part of the current segment */
+      GST_DEBUG_OBJECT (parse, "draining current segment");
+      if (parse->segment.rate > 0.0)
+        gst_base_parse_drain (parse);
+      else
+        gst_base_parse_finish_fragment (parse, FALSE);
+      break;
+
     case GST_EVENT_FLUSH_START:
       GST_OBJECT_LOCK (parse);
       parse->priv->flushing = TRUE;