diff options
author | Sebastian Dröge <slomo@circular-chaos.org> | 2007-03-21 23:50:09 +0000 |
---|---|---|
committer | Sebastian Dröge <slomo@circular-chaos.org> | 2007-03-21 23:50:09 +0000 |
commit | 3a12608d1c7752c42ce321d3687423a130b91372 (patch) | |
tree | e4fecca2077dddae55d62bdd4923fba3d501224e /ext | |
parent | 0abc869e3e4b2ec6be387c3298062477f51fc338 (diff) | |
download | gst-plugins-bad-3a12608d1c7752c42ce321d3687423a130b91372.tar.gz gst-plugins-bad-3a12608d1c7752c42ce321d3687423a130b91372.tar.bz2 gst-plugins-bad-3a12608d1c7752c42ce321d3687423a130b91372.zip |
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')
-rw-r--r-- | ext/wavpack/gstwavpackdec.c | 18 |
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); |