Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/quite/celt.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJean-Marc Valin <jean-marc.valin@usherbrooke.ca>2010-03-16 05:55:51 +0300
committerJean-Marc Valin <jean-marc.valin@usherbrooke.ca>2010-03-16 05:55:51 +0300
commit3a4a463f0a1e17dad8adce1fa846743426e025c8 (patch)
treea475f80b668b420898ddd86c30bdb977f18e4321 /libcelt/vq.c
parent70bdf9bf39680d8ff808bd580cb2664db9d00f97 (diff)
fixed-point: Further reduction in mismatch
Diffstat (limited to 'libcelt/vq.c')
-rw-r--r--libcelt/vq.c15
1 files changed, 6 insertions, 9 deletions
diff --git a/libcelt/vq.c b/libcelt/vq.c
index ffb4e51..1da5c58 100644
--- a/libcelt/vq.c
+++ b/libcelt/vq.c
@@ -311,7 +311,6 @@ celt_word16 renormalise_vector(celt_norm *X, celt_word16 value, int N, int strid
{
int i;
celt_word32 E = EPSILON;
- celt_word16 rE;
celt_word16 g;
celt_norm *xptr = X;
for (i=0;i<N;i++)
@@ -319,21 +318,19 @@ celt_word16 renormalise_vector(celt_norm *X, celt_word16 value, int N, int strid
E = MAC16_16(E, *xptr, *xptr);
xptr += stride;
}
-
- rE = celt_sqrt(E);
#ifdef FIXED_POINT
- if (rE <= 128)
- g = Q15ONE;
- else
+ int k = celt_ilog2(E)>>1;
#endif
- g = MULT16_16_Q15(value,celt_rcp(SHL32(rE,9)));
+ celt_word32 t = VSHR32(E, (k-7)<<1);
+ g = MULT16_16_Q15(value, celt_rsqrt_norm(t));
+
xptr = X;
for (i=0;i<N;i++)
{
- *xptr = PSHR32(MULT16_16(g, *xptr),8);
+ *xptr = EXTRACT16(PSHR32(MULT16_16(g, *xptr), k+1));
xptr += stride;
}
- return rE;
+ return celt_sqrt(E);
}
static void fold(const CELTMode *m, int start, int N, const celt_norm * restrict Y, celt_norm * restrict P, int N0, int B)