summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog8
-rw-r--r--ext/soundtouch/gstpitch.cc11
2 files changed, 16 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index b9e084d7..c94c4d73 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2007-07-18 Michael Smith <msmith@fluendo.com>
+
+ * ext/soundtouch/gstpitch.cc:
+ If we receive a new segment event, don't try to push buffers out
+ in response (without first sending it on!).
+ Instead, flush internal buffers on receiving flush events.
+ Fixes playback after seeking.
+
2007-07-18 Stefan Kost <ensonic@users.sf.net>
* gst/bayer/gstbayer2rgb.c: (gst_bayer2rgb_set_caps),
diff --git a/ext/soundtouch/gstpitch.cc b/ext/soundtouch/gstpitch.cc
index 8b09c2c4..da90c513 100644
--- a/ext/soundtouch/gstpitch.cc
+++ b/ext/soundtouch/gstpitch.cc
@@ -365,7 +365,7 @@ gst_pitch_prepare_buffer (GstPitch * pitch)
* samples are sent out here as strictly necessary, because soundtouch could
* append zero samples, which could disturb looping. */
static GstFlowReturn
-gst_pitch_flush_buffer (GstPitch * pitch)
+gst_pitch_flush_buffer (GstPitch * pitch, gboolean send)
{
GstBuffer *buffer;
@@ -375,6 +375,9 @@ gst_pitch_flush_buffer (GstPitch * pitch)
return GST_FLOW_OK;
pitch->priv->st->flush ();
+ if (!send)
+ return GST_FLOW_OK;
+
buffer = gst_pitch_prepare_buffer (pitch);
if (!buffer)
@@ -617,9 +620,11 @@ gst_pitch_sink_event (GstPad * pad, GstEvent * event)
GST_LOG_OBJECT (pad, "received %s event", GST_EVENT_TYPE_NAME (event));
switch (GST_EVENT_TYPE (event)) {
- case GST_EVENT_NEWSEGMENT:
+ case GST_EVENT_FLUSH_STOP:
+ gst_pitch_flush_buffer (pitch, FALSE);
+ break;
case GST_EVENT_EOS:
- gst_pitch_flush_buffer (pitch);
+ gst_pitch_flush_buffer (pitch, TRUE);
break;
default:
break;