summaryrefslogtreecommitdiffstats
path: root/ext/wavpack
diff options
context:
space:
mode:
authorSebastian Dröge <slomo@circular-chaos.org>2007-03-21 23:50:09 +0000
committerSebastian Dröge <slomo@circular-chaos.org>2007-03-21 23:50:09 +0000
commit9e6dbd3f4547aa535e5932b6e090aaabce7e1854 (patch)
tree0046577704a76afc1ffd448e19132ef816e181c8 /ext/wavpack
parenta227a885c9babd1b08d4062d7e490eb61cb644c5 (diff)
ext/wavpack/gstwavpackdec.c: Don't use gst_pad_alloc_buffer() as we might clip the buffer later and
Original commit message from CVS: * ext/wavpack/gstwavpackdec.c: (gst_wavpack_dec_chain): Don't use gst_pad_alloc_buffer() as we might clip the buffer later and BaseTransform-based elements will likely break because of wrong unit-size. Also plug a possible memleak that happens when decoding fails for some reason.
Diffstat (limited to 'ext/wavpack')
-rw-r--r--ext/wavpack/gstwavpackdec.c18
1 files changed, 8 insertions, 10 deletions
diff --git a/ext/wavpack/gstwavpackdec.c b/ext/wavpack/gstwavpackdec.c
index b4ee722c..a20d5d05 100644
--- a/ext/wavpack/gstwavpackdec.c
+++ b/ext/wavpack/gstwavpackdec.c
@@ -353,22 +353,20 @@ gst_wavpack_dec_chain (GstPad * pad, GstBuffer * buf)
gst_wavpack_dec_post_tags (dec, &wph);
}
- unpacked_size = wph.block_samples * (dec->width / 8) * dec->channels;
-
- /* alloc buffer */
- ret = gst_pad_alloc_buffer (dec->srcpad, GST_BUFFER_OFFSET (buf),
- unpacked_size, GST_PAD_CAPS (dec->srcpad), &outbuf);
-
- if (ret != GST_FLOW_OK)
- goto out;
-
/* decode */
unpack_buf = g_new (int32_t, wph.block_samples * dec->channels);
decoded = WavpackUnpackSamples (dec->context, unpack_buf, wph.block_samples);
if (decoded != wph.block_samples)
goto decode_error;
- /* put samples into outbuf buffer */
+ /* alloc output buffer. Can't use gst_pad_alloc_buffer() because of
+ * possible clipping which will cause problems with BaseTransform
+ * elements because of the unit size */
+ unpacked_size = wph.block_samples * (dec->width / 8) * dec->channels;
+ outbuf = gst_buffer_new_and_alloc (unpacked_size);
+ gst_buffer_set_caps (outbuf, GST_PAD_CAPS (dec->srcpad));
+
+ /* put samples into output buffer */
gst_wavpack_dec_format_samples (dec, GST_BUFFER_DATA (outbuf),
unpack_buf, wph.block_samples);
gst_buffer_stamp (outbuf, buf);