Bit of memory reduction in the pitch search. More needed.
authorJean-Marc Valin <Jean-Marc.Valin@csiro.au>
Fri, 29 Feb 2008 06:07:53 +0000 (17:07 +1100)
committerJean-Marc Valin <Jean-Marc.Valin@csiro.au>
Fri, 29 Feb 2008 06:07:53 +0000 (17:07 +1100)
libcelt/pitch.c
libcelt/stack_alloc.h

index 6d91010..74462a6 100644 (file)
@@ -49,14 +49,12 @@ void find_spectral_pitch(kiss_fftr_cfg fft, struct PsyDecay *decay, celt_sig_t *
    int c, i;
    float max_corr;
    VARDECL(celt_word32_t *xx);
-   VARDECL(celt_word32_t *yy);
    VARDECL(celt_word32_t *X);
    VARDECL(celt_word32_t *Y);
    VARDECL(celt_mask_t *curve);
    SAVE_STACK;
    int n2 = lag/2;
    ALLOC(xx, lag*C, celt_word32_t);
-   ALLOC(yy, lag*C, celt_word32_t);
    ALLOC(X, lag*C, celt_word32_t);
    ALLOC(Y, lag*C, celt_word32_t);
    ALLOC(curve, n2*C, celt_mask_t);
@@ -64,16 +62,14 @@ void find_spectral_pitch(kiss_fftr_cfg fft, struct PsyDecay *decay, celt_sig_t *
    for (i=0;i<C*lag;i++)
       xx[i] = 0;
    for (c=0;c<C;c++)
-   {
       for (i=0;i<len;i++)
          xx[c*lag+i] = x[C*i+c];
-      for (i=0;i<lag;i++)
-         yy[c*lag+i] = y[C*i+c];
-      
-   }
    
    kiss_fftr(fft, xx, X);
-   kiss_fftr(fft, yy, Y);
+   for (c=0;c<C;c++)
+      for (i=0;i<lag;i++)
+         xx[c*lag+i] = y[C*i+c];
+   kiss_fftr(fft, xx, Y);
    
    compute_masking(decay, X, curve, lag*C);
    
index 3de8edd..ca1be2f 100644 (file)
 
 #else
 
-#define ALLOC_STACK(stack) (stack = (stack==0) ? celt_alloc_scratch(30000) : stack)
+#define ALLOC_STACK(stack) (stack = (stack==0) ? celt_alloc_scratch(25000) : stack)
 #define ALIGN(stack, size) ((stack) += ((size) - (long)(stack)) & ((size) - 1))
 #define PUSH(stack, size, type) (ALIGN((stack),sizeof(type)),(stack)+=((size)*sizeof(type)),(type*)((stack)-((size)*sizeof(type))))
 #define RESTORE_STACK (global_stack = _saved_stack)