[gst-cvs] gst-plugins-base: audio: correctly handle short read/writes

Wim Taymans wtay at kemper.freedesktop.org
Wed Jun 17 04:19:31 PDT 2009


Module: gst-plugins-base
Branch: master
Commit: e4492c24ea832a85935e2723de7fc963ac12635b
URL:    http://cgit.freedesktop.org/gstreamer/gst-plugins-base/commit/?id=e4492c24ea832a85935e2723de7fc963ac12635b

Author: Wim Taymans <wim.taymans at collabora.co.uk>
Date:   Wed Jun 17 13:17:30 2009 +0200

audio: correctly handle short read/writes

---

 gst-libs/gst/audio/gstaudiosink.c |    5 +++--
 gst-libs/gst/audio/gstaudiosrc.c  |    7 ++++---
 2 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/gst-libs/gst/audio/gstaudiosink.c b/gst-libs/gst/audio/gstaudiosink.c
index 2d4bfe5..114a971 100644
--- a/gst-libs/gst/audio/gstaudiosink.c
+++ b/gst-libs/gst/audio/gstaudiosink.c
@@ -229,11 +229,11 @@ audioringbuffer_thread_func (GstRingBuffer * buf)
 
     /* buffer must be started */
     if (gst_ring_buffer_prepare_read (buf, &readseg, &readptr, &len)) {
-      gint written = 0;
+      gint written;
 
       left = len;
       do {
-        written = writefunc (sink, readptr + written, left);
+        written = writefunc (sink, readptr, left);
         GST_LOG_OBJECT (sink, "transfered %d bytes of %d from segment %d",
             written, left, readseg);
         if (written < 0 || written > left) {
@@ -245,6 +245,7 @@ audioringbuffer_thread_func (GstRingBuffer * buf)
           break;
         }
         left -= written;
+        readptr += written;
       } while (left > 0);
 
       /* clear written samples */
diff --git a/gst-libs/gst/audio/gstaudiosrc.c b/gst-libs/gst/audio/gstaudiosrc.c
index 6026734..4541b9d 100644
--- a/gst-libs/gst/audio/gstaudiosrc.c
+++ b/gst-libs/gst/audio/gstaudiosrc.c
@@ -215,20 +215,21 @@ audioringbuffer_thread_func (GstRingBuffer * buf)
     gint readseg;
 
     if (gst_ring_buffer_prepare_read (buf, &readseg, &readptr, &len)) {
-      gint read = 0;
+      gint read;
 
       left = len;
       do {
-        read = readfunc (src, readptr + read, left);
+        read = readfunc (src, readptr, left);
         GST_LOG_OBJECT (src, "transfered %d bytes of %d to segment %d", read,
             left, readseg);
         if (read < 0 || read > left) {
           GST_WARNING_OBJECT (src,
-              "error reading data (reason: %s), skipping segment",
+              "error reading data %d (reason: %s), skipping segment", read,
               g_strerror (errno));
           break;
         }
         left -= read;
+        readptr += read;
       } while (left > 0);
 
       /* we read one segment */





More information about the Gstreamer-commits mailing list