ref: 642ff944cfbe4175d56952e5927df9b6b4e84a8e
parent: c9d606f5173b2551e71e5f2ac25b087a43e8db0b
author: Jean-Marc Valin <[email protected]>
date: Thu Feb 28 09:33:19 EST 2008
fixed-point: The cross-products in alg_quant() are now all converted.
--- a/libcelt/vq.c
+++ b/libcelt/vq.c
@@ -227,7 +227,7 @@
{
/*fprintf (stderr, "%d/%d %d/%d %d/%d\n", i, K, m, L2, j, N);*/
celt_word32_t tmp_xy, tmp_yy, tmp_yp;
- celt_word16_t spj;
+ celt_word16_t spj, aspj;
float score;
float g;
celt_word16_t s = SHL16(sign*pulsesAtOnce, yshift);
@@ -237,9 +237,10 @@
continue;
spj = MULT16_16_P14(s, P[j]);
+ aspj = MULT16_16_P15(alpha, spj);
/* Updating the sums of the new pulse(s) */
tmp_xy = xy[m] + MULT16_16(s,X[j]) - MULT16_16(MULT16_16_P15(alpha,spj),Rxp);
- tmp_yy = yy[m] + 2.f*s*y[m][j] + s*s +_alpha*_alpha*spj*spj*Rpp*NORM_SCALING_1 - 2.f*_alpha*s*p[j]*yp[m]*NORM_SCALING_1 - 2.f*s*s*_alpha*p[j]*p[j];
+ tmp_yy = yy[m] + 2*MULT16_16(s,y[m][j]) + MULT16_16(s,s) +MULT16_16(aspj,MULT16_16_Q14(aspj,Rpp)) - 2*MULT16_32_Q14(aspj,yp[m]) - 2*MULT16_16(s,MULT16_16_Q14(aspj,P[j]));
tmp_yp = yp[m] + MULT16_16(spj, SUB16(QCONST16(1.f,14),MULT16_16_Q15(alpha,Rpp)));
/* Compute the gain such that ||p + g*y|| = 1 */