Taking LM into account for anti-collapse
This commit is contained in:
parent
68b8d72e6a
commit
01fa338985
1 changed files with 10 additions and 3 deletions
|
@ -227,10 +227,11 @@ void anti_collapse(const CELTMode *m, celt_norm *_X, unsigned char *collapse_mas
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
N0 = m->eBands[i+1]-m->eBands[i];
|
N0 = m->eBands[i+1]-m->eBands[i];
|
||||||
depth = (1+(pulses[i]>>BITRES))/(m->eBands[i+1]-m->eBands[i]<<LM);
|
/* depth in 1/8 bits */
|
||||||
|
depth = (1+pulses[i])/(m->eBands[i+1]-m->eBands[i]<<LM);
|
||||||
|
|
||||||
#ifdef FIXED_POINT
|
#ifdef FIXED_POINT
|
||||||
thresh = MULT16_32_Q15(QCONST16(0.3f, 15), MIN32(32767,SHR32(celt_exp2(-SHL16(depth, 11)),1) ));
|
thresh = MULT16_32_Q15(QCONST16(0.3f, 15), MIN32(32767,SHR32(celt_exp2(-SHL16(depth, 11-BITRES)),1) ));
|
||||||
{
|
{
|
||||||
celt_word32 t;
|
celt_word32 t;
|
||||||
t = N0<<LM;
|
t = N0<<LM;
|
||||||
|
@ -239,7 +240,7 @@ void anti_collapse(const CELTMode *m, celt_norm *_X, unsigned char *collapse_mas
|
||||||
sqrt_1 = celt_rsqrt_norm(t);
|
sqrt_1 = celt_rsqrt_norm(t);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
thresh = .3f*celt_exp2(-depth);
|
thresh = .3f*celt_exp2(-.125f*depth);
|
||||||
sqrt_1 = celt_rsqrt(N0<<LM);
|
sqrt_1 = celt_rsqrt(N0<<LM);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -256,10 +257,16 @@ void anti_collapse(const CELTMode *m, celt_norm *_X, unsigned char *collapse_mas
|
||||||
r = 2*MIN16(16383,SHR32(celt_exp2(-SHL16(Ediff, 11-DB_SHIFT)),1));
|
r = 2*MIN16(16383,SHR32(celt_exp2(-SHL16(Ediff, 11-DB_SHIFT)),1));
|
||||||
else
|
else
|
||||||
r = 0;
|
r = 0;
|
||||||
|
if (LM==3)
|
||||||
|
r = MULT16_16_Q15(QCONST16(.70710678f,15), r);
|
||||||
r = SHR16(MIN16(thresh, r),1);
|
r = SHR16(MIN16(thresh, r),1);
|
||||||
r = SHR32(MULT16_16_Q15(sqrt_1, r),shift);
|
r = SHR32(MULT16_16_Q15(sqrt_1, r),shift);
|
||||||
#else
|
#else
|
||||||
|
/* r needs to be multiplied by 2 or 2*sqrt(2) depending on LM because
|
||||||
|
short blocks don't have the same energy as long */
|
||||||
r = 2.f*celt_exp2(-Ediff);
|
r = 2.f*celt_exp2(-Ediff);
|
||||||
|
if (LM==3)
|
||||||
|
r *= .70710678f;
|
||||||
r = MIN16(thresh, r);
|
r = MIN16(thresh, r);
|
||||||
r = r*sqrt_1;
|
r = r*sqrt_1;
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue