diff options
author | Jean-Marc Valin <jean-marc.valin@usherbrooke.ca> | 2008-02-12 15:00:18 +0300 |
---|---|---|
committer | Jean-Marc Valin <jean-marc.valin@usherbrooke.ca> | 2008-02-12 15:00:18 +0300 |
commit | ac1e03d78ed89eb0bbe03d1f4f35911c8ed2a3dc (patch) | |
tree | 2f50da39f77a6ead53a1a6cb74f366e76fa5521f /libcelt/bands.c | |
parent | 636f5c86abfc06184dc7027daa76d5f288c63a42 (diff) |
minor optimisation+tuning of vq search
Diffstat (limited to 'libcelt/bands.c')
-rw-r--r-- | libcelt/bands.c | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/libcelt/bands.c b/libcelt/bands.c index c7ffc10..0150cbf 100644 --- a/libcelt/bands.c +++ b/libcelt/bands.c @@ -237,7 +237,8 @@ void quant_bands(const CELTMode *m, float *X, float *P, float *W, struct alloc_d float norm[B*eBands[m->nbEBands+1]]; int pulses[m->nbEBands]; int offsets[m->nbEBands]; - + float alpha = .7; + for (i=0;i<m->nbEBands;i++) offsets[i] = 0; /* Use a single-bit margin to guard against overrunning (make sure it's enough) */ @@ -262,17 +263,20 @@ void quant_bands(const CELTMode *m, float *X, float *P, float *W, struct alloc_d if (eBands[i] >= m->pitchEnd || q<=0) { q -= 1; + alpha = 0; if (q<0) intra_fold(X+B*eBands[i], B*(eBands[i+1]-eBands[i]), q, norm, P+B*eBands[i], B, eBands[i]); else intra_prediction(X+B*eBands[i], W+B*eBands[i], B*(eBands[i+1]-eBands[i]), q, norm, P+B*eBands[i], B, eBands[i], enc); + } else { + alpha = .7; } if (q > 0) { exp_rotation(P+B*eBands[i], B*(eBands[i+1]-eBands[i]), theta, -1, B, 8); exp_rotation(X+B*eBands[i], B*(eBands[i+1]-eBands[i]), theta, -1, B, 8); - alg_quant(X+B*eBands[i], W+B*eBands[i], B*(eBands[i+1]-eBands[i]), q, P+B*eBands[i], 0.7, enc); + alg_quant(X+B*eBands[i], W+B*eBands[i], B*(eBands[i+1]-eBands[i]), q, P+B*eBands[i], alpha, enc); exp_rotation(X+B*eBands[i], B*(eBands[i+1]-eBands[i]), theta, 1, B, 8); } for (j=B*eBands[i];j<B*eBands[i+1];j++) @@ -294,7 +298,8 @@ void unquant_bands(const CELTMode *m, float *X, float *P, struct alloc_data *all float norm[B*eBands[m->nbEBands+1]]; int pulses[m->nbEBands]; int offsets[m->nbEBands]; - + float alpha = .7; + for (i=0;i<m->nbEBands;i++) offsets[i] = 0; /* Use a single-bit margin to guard against overrunning (make sure it's enough) */ @@ -314,16 +319,19 @@ void unquant_bands(const CELTMode *m, float *X, float *P, struct alloc_data *all if (eBands[i] >= m->pitchEnd || q<=0) { q -= 1; + alpha = 0; if (q<0) intra_fold(X+B*eBands[i], B*(eBands[i+1]-eBands[i]), q, norm, P+B*eBands[i], B, eBands[i]); else intra_unquant(X+B*eBands[i], B*(eBands[i+1]-eBands[i]), q, norm, P+B*eBands[i], B, eBands[i], dec); + } else { + alpha = .7; } if (q > 0) { exp_rotation(P+B*eBands[i], B*(eBands[i+1]-eBands[i]), theta, -1, B, 8); - alg_unquant(X+B*eBands[i], B*(eBands[i+1]-eBands[i]), q, P+B*eBands[i], 0.7, dec); + alg_unquant(X+B*eBands[i], B*(eBands[i+1]-eBands[i]), q, P+B*eBands[i], alpha, dec); exp_rotation(X+B*eBands[i], B*(eBands[i+1]-eBands[i]), theta, 1, B, 8); } for (j=B*eBands[i];j<B*eBands[i+1];j++) |