pulsesink: handle border cases in resampler
authorWim Taymans <wim.taymans@collabora.co.uk>
Thu, 11 Jun 2009 17:10:53 +0000 (19:10 +0200)
committerWim Taymans <wim.taymans@collabora.co.uk>
Thu, 11 Jun 2009 17:18:52 +0000 (19:18 +0200)
ext/pulse/pulsesink.c

index fd349e731f3b2328a05ff007078047479cfe9d60..cc9902cdc7c3350d8ec2c221d2ed6c1134276f9e 100644 (file)
@@ -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);