Send the newsegment event in the streaming thread.
authorEdward Hervey <edward@fluendo.com>
Thu, 10 Aug 2006 14:10:28 +0000 (14:10 +0000)
committerThomas Vander Stichele <thomas@apestaart.org>
Thu, 10 Aug 2006 14:10:28 +0000 (14:10 +0000)
Original commit message from CVS:
Patch by: Edward Hervey <edward@fluendo.com>
* configure.ac:
* gst/wavparse/gstwavparse.c: (gst_wavparse_perform_seek),
(gst_wavparse_stream_data):
Send the newsegment event in the streaming thread.
Fixes #347529

ChangeLog
configure.ac
gst/wavparse/gstwavparse.c

index eca2fb8472c716b5af8ee75df03e071fdd61f7b5..4f74d7782fa03985bb318e83c0442f0126b0e995 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2006-08-10  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       Patch by: Edward Hervey <edward@fluendo.com>
+
+       * configure.ac:
+       * gst/wavparse/gstwavparse.c: (gst_wavparse_perform_seek),
+       (gst_wavparse_stream_data):
+       Send the newsegment event in the streaming thread.
+       Fixes #347529
+
 2006-08-08  Tim-Philipp Müller  <tim at centricular dot net>
 
        * ext/jpeg/gstsmokedec.c: (gst_smokedec_chain):
index 6e20b9587c91af86b3cef7ba4a762a93a92a97f2..f8a57116757b0cdbd117fc15e8b99268e695a83b 100644 (file)
@@ -5,7 +5,7 @@ dnl please read gstreamer/docs/random/autotools before changing this file
 dnl initialize autoconf
 dnl releases only do -Wall, cvs and prerelease does -Werror too
 dnl use a three digit version number for releases, and four for cvs/pre
-AC_INIT(GStreamer Good Plug-ins, 0.10.3.1,
+AC_INIT(GStreamer Good Plug-ins, 0.10.3.2,
     http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer,
     gst-plugins-good)
 
index 48d244a04f26f40c79ce2b70be493658705ff386..2e606dfef0e9e8cb1f293d5be3b826f9fd1c88a1 100644 (file)
@@ -776,7 +776,6 @@ gst_wavparse_perform_seek (GstWavParse * wav, GstEvent * event)
 {
   gboolean res;
   gdouble rate;
-  GstEvent *newsegment;
   GstFormat format, bformat;
   GstSeekFlags flags;
   GstSeekType cur_type = GST_SEEK_TYPE_NONE, stop_type;
@@ -910,18 +909,13 @@ gst_wavparse_perform_seek (GstWavParse * wav, GstEvent * event)
   GST_DEBUG_OBJECT (wav, "Sending newsegment from %" G_GINT64_FORMAT
       " to %" G_GINT64_FORMAT, wav->segment.start, stop);
 
-  newsegment =
+  /* store the newsegment event so it can be sent from the streaming thread. */
+  if (wav->newsegment)
+    gst_event_unref (wav->newsegment);
+  wav->newsegment =
       gst_event_new_new_segment (FALSE, wav->segment.rate,
       wav->segment.format, wav->segment.last_stop, stop, wav->segment.time);
 
-  if (wav->srcpad) {
-    gst_pad_push_event (wav->srcpad, newsegment);
-  } else {
-    /* send later when we actually create the source pad */
-    g_assert (wav->newsegment == NULL);
-    wav->newsegment = newsegment;
-  }
-
   wav->segment_running = TRUE;
   if (!wav->streaming) {
     gst_pad_start_task (wav->sinkpad, (GstTaskFunction) gst_wavparse_loop,
@@ -1482,6 +1476,12 @@ iterate_adapter:
     gst_wavparse_add_src_pad (wav, buf);
   }
 
+  /* If we have a pending newsegment send it now. */
+  if (G_UNLIKELY (wav->newsegment != NULL)) {
+    gst_pad_push_event (wav->srcpad, wav->newsegment);
+    wav->newsegment = NULL;
+  }
+
   obtained = GST_BUFFER_SIZE (buf);
 
   /* our positions */