From 53c5ec96b87ef2bb61c7d3188d549623495d4500 Mon Sep 17 00:00:00 2001 From: Miguel Freitas Date: Sun, 14 Jul 2002 23:43:01 +0000 Subject: merge FAAD2 - the GPL AAC decoder library. xine_decoder.c is working, but demux_qt must send some needed initialization data. currently it's hardcoded to play my test stream, so it's not usable yet. CVS patchset: 2267 CVS date: 2002/07/14 23:43:01 --- src/libfaad/is.c | 69 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 src/libfaad/is.c (limited to 'src/libfaad/is.c') diff --git a/src/libfaad/is.c b/src/libfaad/is.c new file mode 100644 index 000000000..f64c41859 --- /dev/null +++ b/src/libfaad/is.c @@ -0,0 +1,69 @@ +/* +** FAAD - Freeware Advanced Audio Decoder +** Copyright (C) 2002 M. Bakker +** +** This program is free software; you can redistribute it and/or modify +** it under the terms of the GNU General Public License as published by +** the Free Software Foundation; either version 2 of the License, or +** (at your option) any later version. +** +** This program is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +** GNU General Public License for more details. +** +** You should have received a copy of the GNU General Public License +** along with this program; if not, write to the Free Software +** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +** +** $Id: is.c,v 1.1 2002/07/14 23:43:01 miguelfreitas Exp $ +**/ + +#include "common.h" + +#include "syntax.h" +#include "is.h" + +void is_decode(ic_stream *ics, ic_stream *icsr, real_t *l_spec, real_t *r_spec, + uint16_t frame_len) +{ + uint8_t g, sfb, b; + uint16_t i, k; + real_t scale; + + uint16_t nshort = frame_len/8; + uint8_t group = 0; + + for (g = 0; g < icsr->num_window_groups; g++) + { + /* Do intensity stereo decoding */ + for (b = 0; b < icsr->window_group_length[g]; b++) + { + for (sfb = 0; sfb < icsr->max_sfb; sfb++) + { + if (is_intensity(icsr, g, sfb)) + { + /* For scalefactor bands coded in intensity stereo the + corresponding predictors in the right channel are + switched to "off". + */ + ics->pred.prediction_used[sfb] = 0; + icsr->pred.prediction_used[sfb] = 0; + + scale = MUL(is_intensity(icsr, g, sfb), + MUL(invert_intensity(ics, g, sfb), + (real_t)exp(LN05 * (0.25*icsr->scale_factors[g][sfb])))); + + /* Scale from left to right channel, + do not touch left channel */ + for (i = icsr->swb_offset[sfb]; i < icsr->swb_offset[sfb+1]; i++) + { + k = (group*nshort)+i; + r_spec[k] = MUL(l_spec[k], scale); + } + } + } + group++; + } + } +} -- cgit v1.2.3