[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