shithub: opus

Download patch

ref: 065dafdc3e6259093c49f984a39b3a16a299e44a
parent: e05e7e23bb62495670cbd6d73957cbde3f0db1d0
author: Thorvald Natvig <[email protected]>
date: Tue Nov 24 20:02:42 EST 2009

Use stack_alloc for pitch.c

--- a/libcelt/pitch.c
+++ b/libcelt/pitch.c
@@ -105,14 +105,21 @@
    const int lag = MAX_PERIOD;
    const int N = FRAMESIZE(m);
    int best_pitch[2]={0};
-   celt_word16 x_lp[len>>1];
-   celt_word16 x_lp4[len>>2];
-   celt_word16 y_lp4[lag>>2];
-   celt_word32 xcorr[max_pitch>>1];
+   VARDECL(celt_word16, x_lp);
+   VARDECL(celt_word16, x_lp4);
+   VARDECL(celt_word16, y_lp4);
+   VARDECL(celt_word32, xcorr);
    celt_word32 maxcorr=1;
    int offset;
    int shift=0;
 
+   SAVE_STACK;
+
+   ALLOC(x_lp, len>>1, celt_word16);
+   ALLOC(x_lp4, len>>2, celt_word16);
+   ALLOC(y_lp4, len>>2, celt_word16);
+   ALLOC(xcorr, max_pitch>>1, celt_word32);
+
    /* Down-sample by two and downmix to mono */
    for (i=1;i<len>>1;i++)
       x_lp[i] = SHR32(HALF32(HALF32(x[(2*i-1)*C]+x[(2*i+1)*C])+x[2*i*C]), SIG_SHIFT);
@@ -194,6 +201,8 @@
 
    CELT_COPY(y, y+(N>>1), (lag-N)>>1);
    CELT_COPY(y+((lag-N)>>1), x_lp, N>>1);
+
+   RESTORE_STACK;
 
    /*printf ("%d\n", *pitch);*/
 }