From f1479afe4948fdae4fc021e1b96df5e109dfde41 Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Sun, 9 May 2004 17:25:16 +0000 Subject: [PATCH] ext/alsa/gstalsasrc.c: don't use a fixed buffer size when writing variable length data to it. Fixes memory corruption... Original commit message from CVS: * ext/alsa/gstalsasrc.c: (gst_alsa_src_loop): don't use a fixed buffer size when writing variable length data to it. Fixes memory corruption and makes alsasrc work --- ChangeLog | 6 ++++++ ext/alsa/gstalsasrc.c | 12 ++++++++---- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index e8a5697ced..82b83795d3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2004-05-09 Benjamin Otte + + * ext/alsa/gstalsasrc.c: (gst_alsa_src_loop): + don't use a fixed buffer size when writing variable length data to + it. Fixes memory corruption and makes alsasrc work + 2004-05-09 Ronald Bultje * ext/gnomevfs/gstgnomevfssink.c: diff --git a/ext/alsa/gstalsasrc.c b/ext/alsa/gstalsasrc.c index aef4dbd0fa..2b9966690e 100644 --- a/ext/alsa/gstalsasrc.c +++ b/ext/alsa/gstalsasrc.c @@ -346,15 +346,18 @@ gst_alsa_src_loop (GstElement * element) g_assert (avail >= this->period_size); /* make sure every pad has a buffer */ for (i = 0; i < element->numpads; i++) { - if (!src->buf[i]) { - src->buf[i] = gst_buffer_new_and_alloc (4096); - } + if (src->buf[i]) + gst_data_unref (GST_DATA (src->buf[i])); + src->buf[i] = + gst_buffer_new_and_alloc (gst_alsa_samples_to_bytes (this, avail)); } /* fill buffer with data */ if ((copied = this->transmit (this, &avail)) <= 0) return; /* push the buffers out and let them have fun */ for (i = 0; i < element->numpads; i++) { + GstBuffer *buf; + if (!src->buf[i]) return; if (copied != this->period_size) @@ -363,8 +366,9 @@ gst_alsa_src_loop (GstElement * element) gst_alsa_samples_to_timestamp (this, this->transmitted); GST_BUFFER_DURATION (src->buf[i]) = gst_alsa_samples_to_timestamp (this, copied); - gst_pad_push (this->pad[i], GST_DATA (src->buf[i])); + buf = src->buf[i]; src->buf[i] = NULL; + gst_pad_push (this->pad[i], GST_DATA (buf)); } this->transmitted += copied; }