/*
- * Copyright (C) 2005-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2005-2011 Andre Noll <maan@systemlinux.org>
*
* Licensed under the GPL v2. For licencing details see COPYING.
*/
}
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;
struct filter_node *fn = btr_context(btrn);
struct private_mp3dec_data *pmd = fn->private_data;
- if (!strcmp(cmd, "sample_rate")) {
- if (pmd->sample_rate == 0)
- return -E_BTR_NAVAIL;
- *result = make_message("%u", pmd->sample_rate);
- return 1;
- }
- if (!strcmp(cmd, "channels")) {
- if (pmd->channels == 0)
- return -E_BTR_NAVAIL;
- *result = make_message("%u", pmd->channels);
- return 1;
- }
- return -ERRNO_TO_PARA_ERROR(ENOTSUP);
+ return decoder_execute(cmd, pmd->sample_rate, pmd->channels, result);
}
static void mp3dec_free_config(void *conf)