From 0bd984c52f1a172545930f94306b4e7a82cacb2e Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Thu, 11 Jun 2009 19:10:53 +0200 Subject: [PATCH] pulsesink: handle border cases in resampler --- ext/pulse/pulsesink.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/ext/pulse/pulsesink.c b/ext/pulse/pulsesink.c index fd349e731f..cc9902cdc7 100644 --- a/ext/pulse/pulsesink.c +++ b/ext/pulse/pulsesink.c @@ -800,6 +800,7 @@ gst_pulseringbuffer_start (GstRingBuffer * buf) pa_threaded_mainloop_lock (psink->mainloop); GST_DEBUG_OBJECT (psink, "starting"); pbuf->paused = FALSE; + gst_pulsering_set_corked (pbuf, FALSE, FALSE); pa_threaded_mainloop_unlock (psink->mainloop); return TRUE; @@ -927,7 +928,7 @@ G_STMT_START { \ memcpy (d, se, bps); \ se -= bps; \ *accum += outr; \ - while ((*accum << 1) >= inr) { \ + while (d < de && (*accum << 1) >= inr) { \ *accum -= inr; \ d += bps; \ } \ @@ -944,7 +945,7 @@ G_STMT_START { \ memcpy (d, se, bps); \ d += bps; \ *accum += inr; \ - while ((*accum << 1) >= outr) { \ + while (s <= se && (*accum << 1) >= outr) { \ *accum -= outr; \ se -= bps; \ } \ @@ -1009,6 +1010,8 @@ gst_pulseringbuffer_commit (GstRingBuffer * buf, guint64 * sample, inr = in_samples - 1; outr = out_samples - 1; + GST_DEBUG_OBJECT (psink, "in %d, out %d", inr, outr); + /* data_end points to the last sample we have to write, not past it. This is * needed to properly handle reverse playback: it points to the last sample. */ data_end = data + (bps * inr);