A few minor optimisations (compute_allocation, denormalise_bands,
authorJean-Marc Valin <jean-marc.valin@usherbrooke.ca>
Mon, 5 Apr 2010 13:26:22 +0000 (09:26 -0400)
committerJean-Marc Valin <jean-marc.valin@usherbrooke.ca>
Wed, 7 Apr 2010 00:33:50 +0000 (20:33 -0400)
deemphasis)

libcelt/bands.c
libcelt/celt.c
libcelt/rate.c

index 3628798..ff503ec 100644 (file)
@@ -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;
    }
 }
 
index eeb3418..01ac8da 100644 (file)
@@ -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)
index 6b41109..2ae1ebc 100644 (file)
@@ -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;