From ee0dbb1855a82ee8c132ddaffcab4d072bb3455e Mon Sep 17 00:00:00 2001 From: Jean-Marc Valin <jean-marc.valin@octasic.com> Date: Mon, 1 Nov 2010 11:45:10 -0400 Subject: [PATCH] Complete fixed-point port of the pitch code (I think). --- libcelt/celt.c | 2 +- libcelt/pitch.c | 18 ++++++++++-------- libcelt/plc.c | 2 +- 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/libcelt/celt.c b/libcelt/celt.c index 9fc212ce..a3eef28d 100644 --- a/libcelt/celt.c +++ b/libcelt/celt.c @@ -769,7 +769,7 @@ int celt_encode_with_ec_float(CELTEncoder * restrict st, const celt_sig * pcm, c gain1 = MULT16_16_Q15(QCONST16(.7f,15),gain1); if (gain1 > QCONST16(.6f,15)) gain1 = QCONST16(.6f,15); - if (fabs(gain1-st->prefilter_gain)<QCONST16(.1,15)) + if (ABS16(gain1-st->prefilter_gain)<QCONST16(.1,15)) gain1=st->prefilter_gain; if (gain1<QCONST16(.2f,15)) { diff --git a/libcelt/pitch.c b/libcelt/pitch.c index 20eb4e09..71637a83 100644 --- a/libcelt/pitch.c +++ b/libcelt/pitch.c @@ -137,11 +137,11 @@ void pitch_downsample(celt_sig * restrict x[], celt_word16 * restrict x_lp, int } _celt_lpc(lpc, ac, 4); - float tmp=1; + celt_word16 tmp=Q15ONE; for (i=0;i<4;i++) { - tmp *= .9; - lpc[i] *= tmp; + tmp = MULT16_16_Q15(QCONST16(.9f,15), tmp); + lpc[i] = MULT16_16_Q15(lpc[i], tmp); } fir(x_lp, lpc, x_lp, len>>1, 4, mem); @@ -289,8 +289,8 @@ celt_word16 remove_doubling(celt_word16 *x, int maxperiod, int minperiod, for (k=2;k<=15;k++) { int T1, T1b; - float g1; - float cont=0; + celt_word16 g1; + celt_word16 cont=0; T1 = (2*T0+k)/(2*k); if (T1 < minperiod) break; @@ -327,10 +327,12 @@ celt_word16 remove_doubling(celt_word16 *x, int maxperiod, int minperiod, g1 = xy/sqrt(1+2.f*xx*1.f*yy); #endif if (abs(T1-prev_period)<=2) - cont += prev_gain; + cont = prev_gain; else if (abs(T1-prev_period)<=4) - cont += .5*prev_gain; - if (g1+cont > .85*g0 || g1+cont > QCONST16(.5f,15)) + cont = HALF32(prev_gain); + else + cont = 0; + if (g1 > MULT16_16_Q15(QCONST16(.85f,15),g0)-cont || g1 > QCONST16(.5f,15)-cont) { best_xy = xy; best_yy = yy; diff --git a/libcelt/plc.c b/libcelt/plc.c index 2204c02c..5625c679 100644 --- a/libcelt/plc.c +++ b/libcelt/plc.c @@ -166,7 +166,7 @@ void _celt_autocorr( } #ifdef FIXED_POINT { - float ac0=0; + celt_word32 ac0=0; int shift; for(i=0;i<n;i++) ac0 += SHR32(MULT16_16(xx[i],xx[i]),8); -- GitLab