From 64209a3edf1b9d00f26775bc54b62ae3de5f4113 Mon Sep 17 00:00:00 2001 From: Jean-Marc Valin <jean-marc.valin@usherbrooke.ca> Date: Mon, 5 Apr 2010 09:26:22 -0400 Subject: [PATCH] A few minor optimisations (compute_allocation, denormalise_bands, deemphasis) --- libcelt/bands.c | 17 ++++++++++++----- libcelt/celt.c | 18 ++++++++++++------ libcelt/rate.c | 2 +- 3 files changed, 25 insertions(+), 12 deletions(-) diff --git a/libcelt/bands.c b/libcelt/bands.c index 362879800..ff503ec8f 100644 --- a/libcelt/bands.c +++ b/libcelt/bands.c @@ -200,16 +200,23 @@ void denormalise_bands(const CELTMode *m, const celt_norm * restrict X, celt_sig celt_fatal("denormalise_bands() not implemented for >2 channels"); for (c=0;c<C;c++) { + celt_sig * restrict f; + const celt_norm * restrict x; + f = freq+c*N; + x = X+c*N; for (i=0;i<m->nbEBands;i++) { - int j; + int j, end; celt_word32 g = SHR32(bank[i+c*m->nbEBands],1); - j=eBands[i]; do { - freq[j+c*N] = SHL32(MULT16_32_Q15(X[j+c*N], g),2); - } while (++j<eBands[i+1]); + j=eBands[i]; + end = eBands[i+1]; + do { + *f++ = SHL32(MULT16_32_Q15(*x, g),2); + x++; + } while (++j<end); } for (i=eBands[m->nbEBands];i<eBands[m->nbEBands+1];i++) - freq[i+c*N] = 0; + *f++ = 0; } } diff --git a/libcelt/celt.c b/libcelt/celt.c index eeb341856..01ac8da8b 100644 --- a/libcelt/celt.c +++ b/libcelt/celt.c @@ -491,22 +491,28 @@ static void decode_flags(ec_dec *dec, int *intra_ener, int *has_pitch, int *shor /*printf ("dec %d: %d %d %d %d\n", flag_bits, *intra_ener, *has_pitch, *shortBlocks, *has_fold);*/ } -static void deemphasis(celt_sig *in, celt_word16 *pcm, int N, int _C, celt_word16 coef, celt_sig *mem) +void deemphasis(celt_sig *in, celt_word16 *pcm, int N, int _C, celt_word16 coef, celt_sig *mem) { const int C = CHANNELS(_C); int c; for (c=0;c<C;c++) { int j; + celt_sig * restrict x; + celt_word16 * restrict y; + celt_sig m = mem[c]; + x = &in[C*(MAX_PERIOD-N)+c]; + y = pcm+c; for (j=0;j<N;j++) { - celt_sig tmp = MAC16_32_Q15(in[C*(MAX_PERIOD-N)+C*j+c], - coef,mem[c]); - mem[c] = tmp; - pcm[C*j+c] = SCALEOUT(SIG2WORD16(tmp)); + celt_sig tmp = MAC16_32_Q15(*x, coef,m); + m = tmp; + *y = SCALEOUT(SIG2WORD16(tmp)); + x+=C; + y+=C; } + mem[c] = m; } - } static void mdct_shape(const CELTMode *mode, celt_norm *X, int start, int end, int N, int nbShortMdcts, int mdct_weight_shift, int _C) diff --git a/libcelt/rate.c b/libcelt/rate.c index 6b41109a0..2ae1ebccb 100644 --- a/libcelt/rate.c +++ b/libcelt/rate.c @@ -102,7 +102,7 @@ celt_int16 **compute_alloc_cache(CELTMode *m, int C) -static void interp_bits2pulses(const CELTMode *m, int start, int *bits1, int *bits2, int total, int *bits, int *ebits, int *fine_priority, int len, int _C) +static inline void interp_bits2pulses(const CELTMode *m, int start, int *bits1, int *bits2, int total, int *bits, int *ebits, int *fine_priority, int len, int _C) { int psum; int lo, hi; -- GitLab