X-Git-Url: http://git.tuebingen.mpg.de/?a=blobdiff_plain;f=mp3dec_filter.c;h=7731a379cfe6028559829cdcff9c29e4f541b983;hb=de8f6f12fdd4e740d10a167a839e37e79257e955;hp=f03fbb76d4c004f1b439bb26bbfbe6414d7b07cf;hpb=d4d37bb32a8d6219f9f52aa2ee3de55eb7e099c8;p=paraslash.git diff --git a/mp3dec_filter.c b/mp3dec_filter.c index f03fbb76..7731a379 100644 --- a/mp3dec_filter.c +++ b/mp3dec_filter.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2010 Andre Noll + * Copyright (C) 2005-2011 Andre Noll * * Licensed under the GPL v2. For licencing details see COPYING. */ @@ -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; @@ -236,19 +235,7 @@ static int mp3dec_execute(struct btr_node *btrn, const char *cmd, char **result) 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)