diff options
author | Diego 'Flameeyes' Pettenò <flameeyes@gmail.com> | 2007-05-31 20:29:27 +0200 |
---|---|---|
committer | Diego 'Flameeyes' Pettenò <flameeyes@gmail.com> | 2007-05-31 20:29:27 +0200 |
commit | 37d4ab77290e4b906df51a7012576e6aec0fc605 (patch) | |
tree | 22603e7f58b7b98c64439035cfce98e4e70939b5 /src/libfaad/pns.c | |
parent | 0a2bd906547bf468205defb30c317fca3dac397b (diff) | |
download | xine-lib-37d4ab77290e4b906df51a7012576e6aec0fc605.tar.gz xine-lib-37d4ab77290e4b906df51a7012576e6aec0fc605.tar.bz2 |
Move libfaad in contrib/ and contextually move the plugin in src/libxineadec/.
--HG--
rename : src/libfaad/Makefile.am => contrib/libfaad/Makefile.am
rename : src/libfaad/analysis.h => contrib/libfaad/analysis.h
rename : src/libfaad/bits.c => contrib/libfaad/bits.c
rename : src/libfaad/bits.h => contrib/libfaad/bits.h
rename : src/libfaad/cfft.c => contrib/libfaad/cfft.c
rename : src/libfaad/cfft.h => contrib/libfaad/cfft.h
rename : src/libfaad/cfft_tab.h => contrib/libfaad/cfft_tab.h
rename : src/libfaad/codebook/Makefile.am => contrib/libfaad/codebook/Makefile.am
rename : src/libfaad/codebook/hcb.h => contrib/libfaad/codebook/hcb.h
rename : src/libfaad/codebook/hcb_1.h => contrib/libfaad/codebook/hcb_1.h
rename : src/libfaad/codebook/hcb_10.h => contrib/libfaad/codebook/hcb_10.h
rename : src/libfaad/codebook/hcb_11.h => contrib/libfaad/codebook/hcb_11.h
rename : src/libfaad/codebook/hcb_2.h => contrib/libfaad/codebook/hcb_2.h
rename : src/libfaad/codebook/hcb_3.h => contrib/libfaad/codebook/hcb_3.h
rename : src/libfaad/codebook/hcb_4.h => contrib/libfaad/codebook/hcb_4.h
rename : src/libfaad/codebook/hcb_5.h => contrib/libfaad/codebook/hcb_5.h
rename : src/libfaad/codebook/hcb_6.h => contrib/libfaad/codebook/hcb_6.h
rename : src/libfaad/codebook/hcb_7.h => contrib/libfaad/codebook/hcb_7.h
rename : src/libfaad/codebook/hcb_8.h => contrib/libfaad/codebook/hcb_8.h
rename : src/libfaad/codebook/hcb_9.h => contrib/libfaad/codebook/hcb_9.h
rename : src/libfaad/codebook/hcb_sf.h => contrib/libfaad/codebook/hcb_sf.h
rename : src/libfaad/common.c => contrib/libfaad/common.c
rename : src/libfaad/common.h => contrib/libfaad/common.h
rename : src/libfaad/decoder.c => contrib/libfaad/decoder.c
rename : src/libfaad/decoder.h => contrib/libfaad/decoder.h
rename : src/libfaad/diff_to_faad2_cvs.patch => contrib/libfaad/diff_to_faad2_cvs.patch
rename : src/libfaad/drc.c => contrib/libfaad/drc.c
rename : src/libfaad/drc.h => contrib/libfaad/drc.h
rename : src/libfaad/drm_dec.c => contrib/libfaad/drm_dec.c
rename : src/libfaad/drm_dec.h => contrib/libfaad/drm_dec.h
rename : src/libfaad/error.c => contrib/libfaad/error.c
rename : src/libfaad/error.h => contrib/libfaad/error.h
rename : src/libfaad/faad.h => contrib/libfaad/faad.h
rename : src/libfaad/filtbank.c => contrib/libfaad/filtbank.c
rename : src/libfaad/filtbank.h => contrib/libfaad/filtbank.h
rename : src/libfaad/fixed.h => contrib/libfaad/fixed.h
rename : src/libfaad/hcr.c => contrib/libfaad/hcr.c
rename : src/libfaad/huffman.c => contrib/libfaad/huffman.c
rename : src/libfaad/huffman.h => contrib/libfaad/huffman.h
rename : src/libfaad/ic_predict.c => contrib/libfaad/ic_predict.c
rename : src/libfaad/ic_predict.h => contrib/libfaad/ic_predict.h
rename : src/libfaad/iq_table.h => contrib/libfaad/iq_table.h
rename : src/libfaad/is.c => contrib/libfaad/is.c
rename : src/libfaad/is.h => contrib/libfaad/is.h
rename : src/libfaad/kbd_win.h => contrib/libfaad/kbd_win.h
rename : src/libfaad/lt_predict.c => contrib/libfaad/lt_predict.c
rename : src/libfaad/lt_predict.h => contrib/libfaad/lt_predict.h
rename : src/libfaad/mdct.c => contrib/libfaad/mdct.c
rename : src/libfaad/mdct.h => contrib/libfaad/mdct.h
rename : src/libfaad/mdct_tab.h => contrib/libfaad/mdct_tab.h
rename : src/libfaad/mp4.c => contrib/libfaad/mp4.c
rename : src/libfaad/mp4.h => contrib/libfaad/mp4.h
rename : src/libfaad/ms.c => contrib/libfaad/ms.c
rename : src/libfaad/ms.h => contrib/libfaad/ms.h
rename : src/libfaad/output.c => contrib/libfaad/output.c
rename : src/libfaad/output.h => contrib/libfaad/output.h
rename : src/libfaad/pns.c => contrib/libfaad/pns.c
rename : src/libfaad/pns.h => contrib/libfaad/pns.h
rename : src/libfaad/ps_dec.c => contrib/libfaad/ps_dec.c
rename : src/libfaad/ps_dec.h => contrib/libfaad/ps_dec.h
rename : src/libfaad/ps_syntax.c => contrib/libfaad/ps_syntax.c
rename : src/libfaad/ps_tables.h => contrib/libfaad/ps_tables.h
rename : src/libfaad/pulse.c => contrib/libfaad/pulse.c
rename : src/libfaad/pulse.h => contrib/libfaad/pulse.h
rename : src/libfaad/rvlc.c => contrib/libfaad/rvlc.c
rename : src/libfaad/rvlc.h => contrib/libfaad/rvlc.h
rename : src/libfaad/sbr_dct.c => contrib/libfaad/sbr_dct.c
rename : src/libfaad/sbr_dct.h => contrib/libfaad/sbr_dct.h
rename : src/libfaad/sbr_dec.c => contrib/libfaad/sbr_dec.c
rename : src/libfaad/sbr_dec.h => contrib/libfaad/sbr_dec.h
rename : src/libfaad/sbr_e_nf.c => contrib/libfaad/sbr_e_nf.c
rename : src/libfaad/sbr_e_nf.h => contrib/libfaad/sbr_e_nf.h
rename : src/libfaad/sbr_fbt.c => contrib/libfaad/sbr_fbt.c
rename : src/libfaad/sbr_fbt.h => contrib/libfaad/sbr_fbt.h
rename : src/libfaad/sbr_hfadj.c => contrib/libfaad/sbr_hfadj.c
rename : src/libfaad/sbr_hfadj.h => contrib/libfaad/sbr_hfadj.h
rename : src/libfaad/sbr_hfgen.c => contrib/libfaad/sbr_hfgen.c
rename : src/libfaad/sbr_hfgen.h => contrib/libfaad/sbr_hfgen.h
rename : src/libfaad/sbr_huff.c => contrib/libfaad/sbr_huff.c
rename : src/libfaad/sbr_huff.h => contrib/libfaad/sbr_huff.h
rename : src/libfaad/sbr_noise.h => contrib/libfaad/sbr_noise.h
rename : src/libfaad/sbr_qmf.c => contrib/libfaad/sbr_qmf.c
rename : src/libfaad/sbr_qmf.h => contrib/libfaad/sbr_qmf.h
rename : src/libfaad/sbr_qmf_c.h => contrib/libfaad/sbr_qmf_c.h
rename : src/libfaad/sbr_syntax.c => contrib/libfaad/sbr_syntax.c
rename : src/libfaad/sbr_syntax.h => contrib/libfaad/sbr_syntax.h
rename : src/libfaad/sbr_tf_grid.c => contrib/libfaad/sbr_tf_grid.c
rename : src/libfaad/sbr_tf_grid.h => contrib/libfaad/sbr_tf_grid.h
rename : src/libfaad/sine_win.h => contrib/libfaad/sine_win.h
rename : src/libfaad/specrec.c => contrib/libfaad/specrec.c
rename : src/libfaad/specrec.h => contrib/libfaad/specrec.h
rename : src/libfaad/ssr.c => contrib/libfaad/ssr.c
rename : src/libfaad/ssr.h => contrib/libfaad/ssr.h
rename : src/libfaad/ssr_fb.c => contrib/libfaad/ssr_fb.c
rename : src/libfaad/ssr_fb.h => contrib/libfaad/ssr_fb.h
rename : src/libfaad/ssr_ipqf.c => contrib/libfaad/ssr_ipqf.c
rename : src/libfaad/ssr_ipqf.h => contrib/libfaad/ssr_ipqf.h
rename : src/libfaad/ssr_win.h => contrib/libfaad/ssr_win.h
rename : src/libfaad/structs.h => contrib/libfaad/structs.h
rename : src/libfaad/syntax.c => contrib/libfaad/syntax.c
rename : src/libfaad/syntax.h => contrib/libfaad/syntax.h
rename : src/libfaad/tns.c => contrib/libfaad/tns.c
rename : src/libfaad/tns.h => contrib/libfaad/tns.h
rename : src/libfaad/xine_faad_decoder.c => src/libxineadec/xine_faad_decoder.c
Diffstat (limited to 'src/libfaad/pns.c')
-rw-r--r-- | src/libfaad/pns.c | 265 |
1 files changed, 0 insertions, 265 deletions
diff --git a/src/libfaad/pns.c b/src/libfaad/pns.c deleted file mode 100644 index 5266d8eef..000000000 --- a/src/libfaad/pns.c +++ /dev/null @@ -1,265 +0,0 @@ -/* -** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding -** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com -** -** 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. -** -** Any non-GPL usage of this software or parts of this software is strictly -** forbidden. -** -** Commercial non-GPL licensing of this software is possible. -** For more info contact Ahead Software through Mpeg4AAClicense@nero.com. -** -** $Id: pns.c,v 1.8 2005/10/29 23:57:07 tmmm Exp $ -**/ - -#include "common.h" -#include "structs.h" - -#include "pns.h" - - -/* static function declarations */ -static void gen_rand_vector(real_t *spec, int16_t scale_factor, uint16_t size, - uint8_t sub); - - -#ifdef FIXED_POINT - -#define DIV(A, B) (((int64_t)A << REAL_BITS)/B) - -#define step(shift) \ - if ((0x40000000l >> shift) + root <= value) \ - { \ - value -= (0x40000000l >> shift) + root; \ - root = (root >> 1) | (0x40000000l >> shift); \ - } else { \ - root = root >> 1; \ - } - -/* fixed point square root approximation */ -/* !!!! ONLY WORKS FOR EVEN %REAL_BITS% !!!! */ -real_t fp_sqrt(real_t value) -{ - real_t root = 0; - - step( 0); step( 2); step( 4); step( 6); - step( 8); step(10); step(12); step(14); - step(16); step(18); step(20); step(22); - step(24); step(26); step(28); step(30); - - if (root < value) - ++root; - - root <<= (REAL_BITS/2); - - return root; -} - -static real_t pow2_table[] = -{ - COEF_CONST(1.0), - COEF_CONST(1.18920711500272), - COEF_CONST(1.41421356237310), - COEF_CONST(1.68179283050743) -}; -#endif - -/* The function gen_rand_vector(addr, size) generates a vector of length - <size> with signed random values of average energy MEAN_NRG per random - value. A suitable random number generator can be realized using one - multiplication/accumulation per random value. -*/ -static INLINE void gen_rand_vector(real_t *spec, int16_t scale_factor, uint16_t size, - uint8_t sub) -{ -#ifndef FIXED_POINT - uint16_t i; - real_t energy = 0.0; - - real_t scale = (real_t)1.0/(real_t)size; - - for (i = 0; i < size; i++) - { - real_t tmp = scale*(real_t)(int32_t)random_int(); - spec[i] = tmp; - energy += tmp*tmp; - } - - scale = (real_t)1.0/(real_t)sqrt(energy); - scale *= (real_t)pow(2.0, 0.25 * scale_factor); - for (i = 0; i < size; i++) - { - spec[i] *= scale; - } -#else - uint16_t i; - real_t energy = 0, scale; - int32_t exp, frac; - - for (i = 0; i < size; i++) - { - /* this can be replaced by a 16 bit random generator!!!! */ - real_t tmp = (int32_t)random_int(); - if (tmp < 0) - tmp = -(tmp & ((1<<(REAL_BITS-1))-1)); - else - tmp = (tmp & ((1<<(REAL_BITS-1))-1)); - - energy += MUL_R(tmp,tmp); - - spec[i] = tmp; - } - - energy = fp_sqrt(energy); - if (energy > 0) - { - scale = DIV(REAL_CONST(1),energy); - - exp = scale_factor >> 2; - frac = scale_factor & 3; - - /* IMDCT pre-scaling */ - exp -= sub; - - if (exp < 0) - scale >>= -exp; - else - scale <<= exp; - - if (frac) - scale = MUL_C(scale, pow2_table[frac]); - - for (i = 0; i < size; i++) - { - spec[i] = MUL_R(spec[i], scale); - } - } -#endif -} - -void pns_decode(ic_stream *ics_left, ic_stream *ics_right, - real_t *spec_left, real_t *spec_right, uint16_t frame_len, - uint8_t channel_pair, uint8_t object_type) -{ - uint8_t g, sfb, b; - uint16_t size, offs; - - uint8_t group = 0; - uint16_t nshort = frame_len >> 3; - - uint8_t sub = 0; - -#ifdef FIXED_POINT - /* IMDCT scaling */ - if (object_type == LD) - { - sub = 9 /*9*/; - } else { - if (ics_left->window_sequence == EIGHT_SHORT_SEQUENCE) - sub = 7 /*7*/; - else - sub = 10 /*10*/; - } -#endif - - for (g = 0; g < ics_left->num_window_groups; g++) - { - /* Do perceptual noise substitution decoding */ - for (b = 0; b < ics_left->window_group_length[g]; b++) - { - for (sfb = 0; sfb < ics_left->max_sfb; sfb++) - { - if (is_noise(ics_left, g, sfb)) - { -#ifdef LTP_DEC - /* Simultaneous use of LTP and PNS is not prevented in the - syntax. If both LTP, and PNS are enabled on the same - scalefactor band, PNS takes precedence, and no prediction - is applied to this band. - */ - ics_left->ltp.long_used[sfb] = 0; - ics_left->ltp2.long_used[sfb] = 0; -#endif - -#ifdef MAIN_DEC - /* For scalefactor bands coded using PNS the corresponding - predictors are switched to "off". - */ - ics_left->pred.prediction_used[sfb] = 0; -#endif - - offs = ics_left->swb_offset[sfb]; - size = ics_left->swb_offset[sfb+1] - offs; - - /* Generate random vector */ - gen_rand_vector(&spec_left[(group*nshort)+offs], - ics_left->scale_factors[g][sfb], size, sub); - } - -/* From the spec: - If the same scalefactor band and group is coded by perceptual noise - substitution in both channels of a channel pair, the correlation of - the noise signal can be controlled by means of the ms_used field: While - the default noise generation process works independently for each channel - (separate generation of random vectors), the same random vector is used - for both channels if ms_used[] is set for a particular scalefactor band - and group. In this case, no M/S stereo coding is carried out (because M/S - stereo coding and noise substitution coding are mutually exclusive). - If the same scalefactor band and group is coded by perceptual noise - substitution in only one channel of a channel pair the setting of ms_used[] - is not evaluated. -*/ - if (channel_pair) - { - if (is_noise(ics_right, g, sfb)) - { - if (((ics_left->ms_mask_present == 1) && - (ics_left->ms_used[g][sfb])) || - (ics_left->ms_mask_present == 2)) - { - uint16_t c; - - offs = ics_right->swb_offset[sfb]; - size = ics_right->swb_offset[sfb+1] - offs; - - for (c = 0; c < size; c++) - { - spec_right[(group*nshort) + offs + c] = - spec_left[(group*nshort) + offs + c]; - } - } else /*if (ics_left->ms_mask_present == 0)*/ { -#ifdef LTP_DEC - ics_right->ltp.long_used[sfb] = 0; - ics_right->ltp2.long_used[sfb] = 0; -#endif -#ifdef MAIN_DEC - ics_right->pred.prediction_used[sfb] = 0; -#endif - - offs = ics_right->swb_offset[sfb]; - size = ics_right->swb_offset[sfb+1] - offs; - - /* Generate random vector */ - gen_rand_vector(&spec_right[(group*nshort)+offs], - ics_right->scale_factors[g][sfb], size, sub); - } - } - } - } /* sfb */ - group++; - } /* b */ - } /* g */ -} |