From: Andre Noll Date: Sat, 16 Jul 2011 13:21:57 +0000 (+0200) Subject: mp3dec: Allocate correct output buffer size also for mono files. X-Git-Tag: v0.4.8~12^2~2 X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=commitdiff_plain;h=de8f6f12fdd4e740d10a167a839e37e79257e955 mp3dec: Allocate correct output buffer size also for mono files. Currently the buffer size is chosen to hold 4 bytes per sample even for mono files where 2 bytes per sample suffice. Since the channel count does not change within a frame, use the cached value in pmd->channels rather than the MAD_NCHANNELS macro for each sample. --- diff --git a/mp3dec_filter.c b/mp3dec_filter.c index 82f01418..7731a379 100644 --- a/mp3dec_filter.c +++ b/mp3dec_filter.c @@ -181,14 +181,13 @@ next_frame: } mad_synth_frame(&pmd->synth, &pmd->frame); pmd->flags |= MP3DEC_FLAG_DECODE_STARTED; - - outbuffer = para_malloc(pmd->synth.pcm.length * 4); + outbuffer = para_malloc(pmd->synth.pcm.length * 2 * pmd->channels); loaded = 0; for (i = 0; i < pmd->synth.pcm.length; i++) { int sample = MAD_TO_SHORT(pmd->synth.pcm.samples[0][i]); write_int16_host_endian(outbuffer + loaded, sample); loaded += 2; - if (MAD_NCHANNELS(&pmd->frame.header) == 2) { /* stereo */ + if (pmd->channels == 2) { /* stereo */ sample = MAD_TO_SHORT(pmd->synth.pcm.samples[1][i]); write_int16_host_endian(outbuffer + loaded, sample); loaded += 2;