diff --git a/libcelt/_kiss_fft_guts.h b/libcelt/_kiss_fft_guts.h index 9cdff54d133fdba0fd15f87f525b054ab030dbaf..3baa90ed6d37612410cdf3a94328ecea716f6785 100644 --- a/libcelt/_kiss_fft_guts.h +++ b/libcelt/_kiss_fft_guts.h @@ -61,12 +61,15 @@ struct kiss_fft_state{ #define TRIG_UPSCALE 65536 #define TWID_MAX 2147483647 #endif +#define EXT32(a) (a) + #else /* DOUBLE_PRECISION */ # define FRACBITS 15 # define SAMPPROD celt_int32_t #define SAMP_MAX 32767 #define TRIG_UPSCALE 1 +#define EXT32(a) EXTEND32(a) #endif /* !DOUBLE_PRECISION */ diff --git a/libcelt/fixed_debug.h b/libcelt/fixed_debug.h index 84c35020d17cac5102e486b9a1c5437da0c763ef..66c0510c46f873ac961e81d8529adc2f2b3b3394 100644 --- a/libcelt/fixed_debug.h +++ b/libcelt/fixed_debug.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2003 Jean-Marc Valin */ +/* Copyright (C) 2003-2008 Jean-Marc Valin */ /** @file fixed_debug.h @brief Fixed-point operations with debugging @@ -171,6 +171,8 @@ static inline int SHL32(long long a, int shift) #define SATURATE16(x,a) (((x)>(a) ? (a) : (x)<-(a) ? -(a) : (x))) #define SATURATE32(x,a) (((x)>(a) ? (a) : (x)<-(a) ? -(a) : (x))) +#define ROUND(x,a) (EXTRACT16(PSHR32((x),(a)))) + //#define SHR(a,shift) ((a) >> (shift)) //#define SHL(a,shift) ((a) << (shift)) diff --git a/libcelt/kiss_fftr.c b/libcelt/kiss_fftr.c index 7e2280f2f9494f451d7bc49bd7033a4053beaa57..833699f4b4b46efcd95e226e3d5abd95b30801b2 100644 --- a/libcelt/kiss_fftr.c +++ b/libcelt/kiss_fftr.c @@ -109,11 +109,11 @@ void kiss_fftr(kiss_fftr_cfg st,const kiss_fft_scalar *timedata,kiss_fft_scalar for ( k=1;k <= ncfft/2 ; ++k ) { - f2k.r = SHR32(SUB32(EXTEND32(freqdata[2*k]), EXTEND32(freqdata[2*(ncfft-k)])),1); - f2k.i = PSHR32(ADD32(EXTEND32(freqdata[2*k+1]), EXTEND32(freqdata[2*(ncfft-k)+1])),1); + f2k.r = SHR32(SUB32(EXT32(freqdata[2*k]), EXT32(freqdata[2*(ncfft-k)])),1); + f2k.i = PSHR32(ADD32(EXT32(freqdata[2*k+1]), EXT32(freqdata[2*(ncfft-k)+1])),1); - f1k.r = SHR32(ADD32(EXTEND32(freqdata[2*k]), EXTEND32(freqdata[2*(ncfft-k)])),1); - f1k.i = SHR32(SUB32(EXTEND32(freqdata[2*k+1]), EXTEND32(freqdata[2*(ncfft-k)+1])),1); + f1k.r = SHR32(ADD32(EXT32(freqdata[2*k]), EXT32(freqdata[2*(ncfft-k)])),1); + f1k.i = SHR32(SUB32(EXT32(freqdata[2*k+1]), EXT32(freqdata[2*(ncfft-k)+1])),1); C_MULC( tw , f2k , st->super_twiddles[k]);