diff --git a/libs/celt/cc6_arch.h b/libs/celt/cc6_arch.h index c4fbadac..178abaeb 100755 --- a/libs/celt/cc6_arch.h +++ b/libs/celt/cc6_arch.h @@ -111,7 +111,7 @@ typedef celt_word32_t celt_mask_t; #include "fixed_debug.h" #else -#include "fixed_generic.h" +#include "cc6_fixed_generic.h" #ifdef ARM5E_ASM #include "fixed_arm5e.h" @@ -120,9 +120,9 @@ typedef celt_word32_t celt_mask_t; #elif defined (BFIN_ASM) #include "fixed_bfin.h" #elif defined (TI_C5X_ASM) -#include "fixed_c5x.h" +#include "cc6_fixed_c5x.h" #elif defined (TI_C6X_ASM) -#include "fixed_c6x.h" +#include "cc6_fixed_c6x.h" #endif #endif diff --git a/libs/celt/cc6_celt.c b/libs/celt/cc6_celt.c index 69a4a41f..7f37f5d2 100755 --- a/libs/celt/cc6_celt.c +++ b/libs/celt/cc6_celt.c @@ -49,7 +49,7 @@ #include "rate.h" #include "stack_alloc.h" #include "mathops.h" -#include "float_cast.h" +#include "cc6_float_cast.h" #include static const celt_word16_t preemph = QCONST16(0.8f,15); diff --git a/libs/celt/mdct.c b/libs/celt/mdct.c index f1cdc4d5..2da291b3 100755 --- a/libs/celt/mdct.c +++ b/libs/celt/mdct.c @@ -1,295 +1,295 @@ -/* (C) 2008 Jean-Marc Valin, CSIRO -*/ -/* - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -/* This is a simple MDCT implementation that uses a N/4 complex FFT - to do most of the work. It should be relatively straightforward to - plug in pretty much and FFT here. - - This replaces the Vorbis FFT (and uses the exact same API), which - was a bit too messy and that was ending up duplicating code - (might as well use the same FFT everywhere). - - The algorithm is similar to (and inspired from) Fabrice Bellard's - MDCT implementation in FFMPEG, but has differences in signs, ordering - and scaling in many places. -*/ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "mdct.h" -#include "kfft_double.h" -#include -#include "os_support.h" -#include "mathops.h" -#include "stack_alloc.h" - -#ifndef M_PI -#define M_PI 3.141592653 -#endif - -void mdct_init(mdct_lookup *l,int N) -{ - int i; - int N2; - l->n = N; - N2 = N>>1; - l->kfft = cpx32_fft_alloc(N>>2); - if (l->kfft==NULL) - return; - l->trig = (kiss_twiddle_scalar*)celt_alloc(N2*sizeof(kiss_twiddle_scalar)); - if (l->trig==NULL) - return; - /* We have enough points that sine isn't necessary */ -#if defined(FIXED_POINT) -#if defined(DOUBLE_PRECISION) & !defined(MIXED_PRECISION) - for (i=0;itrig[i] = SAMP_MAX*cos(2*M_PI*(i+1./8.)/N); -#else - for (i=0;itrig[i] = TRIG_UPSCALE*celt_cos_norm(DIV32(ADD32(SHL32(EXTEND32(i),17),16386),N)); -#endif -#else - for (i=0;itrig[i] = cos(2*M_PI*(i+1./8.)/N); -#endif -} - -void mdct_clear(mdct_lookup *l) -{ - cpx32_fft_free(l->kfft); - celt_free(l->trig); -} - -void mdct_forward(const mdct_lookup *l, kiss_fft_scalar *in, kiss_fft_scalar * __restrict out, const celt_word16_t *window, int overlap) -{ - int i; - int N, N2, N4; - VARDECL(kiss_fft_scalar, f); - SAVE_STACK; - N = l->n; - N2 = N>>1; - N4 = N>>2; - ALLOC(f, N2, kiss_fft_scalar); - - /* Consider the input to be compused of four blocks: [a, b, c, d] */ - /* Window, shuffle, fold */ - { - /* Temp pointers to make it really clear to the compiler what we're doing */ - const kiss_fft_scalar * __restrict xp1 = in+(overlap>>1); - const kiss_fft_scalar * __restrict xp2 = in+N2-1+(overlap>>1); - kiss_fft_scalar * __restrict yp = out; - const celt_word16_t * __restrict wp1 = window+(overlap>>1); - const celt_word16_t * __restrict wp2 = window+(overlap>>1)-1; - for(i=0;i<(overlap>>2);i++) - { - /* Real part arranged as -d-cR, Imag part arranged as -b+aR*/ - *yp++ = MULT16_32_Q15(*wp2, xp1[N2]) + MULT16_32_Q15(*wp1,*xp2); - *yp++ = MULT16_32_Q15(*wp1, *xp1) - MULT16_32_Q15(*wp2, xp2[-N2]); - xp1+=2; - xp2-=2; - wp1+=2; - wp2-=2; - } - wp1 = window; - wp2 = window+overlap-1; - for(;i>2);i++) - { - /* Real part arranged as a-bR, Imag part arranged as -c-dR */ - *yp++ = *xp2; - *yp++ = *xp1; - xp1+=2; - xp2-=2; - } - for(;itrig[0]; - for(i=0;ikfft, out, f, N4); - - /* Post-rotate */ - { - /* Temp pointers to make it really clear to the compiler what we're doing */ - const kiss_fft_scalar * __restrict fp = f; - kiss_fft_scalar * __restrict yp1 = out; - kiss_fft_scalar * __restrict yp2 = out+N2-1; - kiss_fft_scalar *t = &l->trig[0]; - /* Temp pointers to make it really clear to the compiler what we're doing */ - for(i=0;in; - N2 = N>>1; - N4 = N>>2; - ALLOC(f, N2, kiss_fft_scalar); - ALLOC(f2, N2, kiss_fft_scalar); - - /* Pre-rotate */ - { - /* Temp pointers to make it really clear to the compiler what we're doing */ - const kiss_fft_scalar * __restrict xp1 = in; - const kiss_fft_scalar * __restrict xp2 = in+N2-1; - kiss_fft_scalar * __restrict yp = f2; - kiss_fft_scalar *t = &l->trig[0]; - for(i=0;ikfft, f2, f, N4); - - /* Post-rotate */ - { - kiss_fft_scalar * __restrict fp = f; - kiss_fft_scalar *t = &l->trig[0]; - - for(i=0;i +#include "os_support.h" +#include "mathops.h" +#include "stack_alloc.h" + +#ifndef M_PI +#define M_PI 3.141592653 +#endif + +void mdct_init(mdct_lookup *l,int N) +{ + int i; + int N2; + l->n = N; + N2 = N>>1; + l->kfft = cpx32_fft_alloc(N>>2); + if (l->kfft==NULL) + return; + l->trig = (kiss_twiddle_scalar*)celt_alloc(N2*sizeof(kiss_twiddle_scalar)); + if (l->trig==NULL) + return; + /* We have enough points that sine isn't necessary */ +#if defined(FIXED_POINT) +#if defined(DOUBLE_PRECISION) & !defined(MIXED_PRECISION) + for (i=0;itrig[i] = SAMP_MAX*cos(2*M_PI*(i+1./8.)/N); +#else + for (i=0;itrig[i] = TRIG_UPSCALE*celt_cos_norm(DIV32(ADD32(SHL32(EXTEND32(i),17),16386),N)); +#endif +#else + for (i=0;itrig[i] = cos(2*M_PI*(i+1./8.)/N); +#endif +} + +void mdct_clear(mdct_lookup *l) +{ + cpx32_fft_free(l->kfft); + celt_free(l->trig); +} + +void mdct_forward(const mdct_lookup *l, kiss_fft_scalar *in, kiss_fft_scalar * __restrict out, const celt_word16_t *window, int overlap) +{ + int i; + int N, N2, N4; + VARDECL(kiss_fft_scalar, f); + SAVE_STACK; + N = l->n; + N2 = N>>1; + N4 = N>>2; + ALLOC(f, N2, kiss_fft_scalar); + + /* Consider the input to be compused of four blocks: [a, b, c, d] */ + /* Window, shuffle, fold */ + { + /* Temp pointers to make it really clear to the compiler what we're doing */ + const kiss_fft_scalar * __restrict xp1 = in+(overlap>>1); + const kiss_fft_scalar * __restrict xp2 = in+N2-1+(overlap>>1); + kiss_fft_scalar * __restrict yp = out; + const celt_word16_t * __restrict wp1 = window+(overlap>>1); + const celt_word16_t * __restrict wp2 = window+(overlap>>1)-1; + for(i=0;i<(overlap>>2);i++) + { + /* Real part arranged as -d-cR, Imag part arranged as -b+aR*/ + *yp++ = MULT16_32_Q15(*wp2, xp1[N2]) + MULT16_32_Q15(*wp1,*xp2); + *yp++ = MULT16_32_Q15(*wp1, *xp1) - MULT16_32_Q15(*wp2, xp2[-N2]); + xp1+=2; + xp2-=2; + wp1+=2; + wp2-=2; + } + wp1 = window; + wp2 = window+overlap-1; + for(;i>2);i++) + { + /* Real part arranged as a-bR, Imag part arranged as -c-dR */ + *yp++ = *xp2; + *yp++ = *xp1; + xp1+=2; + xp2-=2; + } + for(;itrig[0]; + for(i=0;ikfft, out, f, N4); + + /* Post-rotate */ + { + /* Temp pointers to make it really clear to the compiler what we're doing */ + const kiss_fft_scalar * __restrict fp = f; + kiss_fft_scalar * __restrict yp1 = out; + kiss_fft_scalar * __restrict yp2 = out+N2-1; + kiss_fft_scalar *t = &l->trig[0]; + /* Temp pointers to make it really clear to the compiler what we're doing */ + for(i=0;in; + N2 = N>>1; + N4 = N>>2; + ALLOC(f, N2, kiss_fft_scalar); + ALLOC(f2, N2, kiss_fft_scalar); + + /* Pre-rotate */ + { + /* Temp pointers to make it really clear to the compiler what we're doing */ + const kiss_fft_scalar * __restrict xp1 = in; + const kiss_fft_scalar * __restrict xp2 = in+N2-1; + kiss_fft_scalar * __restrict yp = f2; + kiss_fft_scalar *t = &l->trig[0]; + for(i=0;ikfft, f2, f, N4); + + /* Post-rotate */ + { + kiss_fft_scalar * __restrict fp = f; + kiss_fft_scalar *t = &l->trig[0]; + + for(i=0;i