From e4492c24ea832a85935e2723de7fc963ac12635b Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Wed, 17 Jun 2009 13:17:30 +0200 Subject: [PATCH] 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 2d4bfe530b..114a971d09 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 602673438d..4541b9da34 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 */