diff options
author | Jean-Marc Valin <jmvalin@jmvalin.ca> | 2016-08-21 15:53:35 -0400 |
---|---|---|
committer | Jean-Marc Valin <jmvalin@jmvalin.ca> | 2016-08-21 15:53:35 -0400 |
commit | 096b2207baa7da051f3805300bfe43e20256c572 (patch) | |
tree | 0f566fadf0e53034e274fabfd8ed58b1f49ab94f | |
parent | 8ab3e80ec46e8f811c5f880890488029261dea70 (diff) | |
download | opus-096b2207baa7da051f3805300bfe43e20256c572.tar.gz |
Make the DC rejection filter Q14 instead of Q15
This avoids an overflow on extreme signals
-rw-r--r-- | src/opus_encoder.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/src/opus_encoder.c b/src/opus_encoder.c index 55003150..d51576c0 100644 --- a/src/opus_encoder.c +++ b/src/opus_encoder.c @@ -388,14 +388,14 @@ static void dc_reject(const opus_val16 *in, opus_int32 cutoff_Hz, opus_val16 *ou for (i=0;i<len;i++) { opus_val32 x, tmp, y; - x = SHL32(EXTEND32(in[channels*i+c]), 15); + x = SHL32(EXTEND32(in[channels*i+c]), 14); /* First stage */ tmp = x-hp_mem[2*c]; hp_mem[2*c] = hp_mem[2*c] + PSHR32(x - hp_mem[2*c], shift); /* Second stage */ y = tmp - hp_mem[2*c+1]; hp_mem[2*c+1] = hp_mem[2*c+1] + PSHR32(tmp - hp_mem[2*c+1], shift); - out[channels*i+c] = EXTRACT16(SATURATE(PSHR32(y, 15), 32767)); + out[channels*i+c] = EXTRACT16(SATURATE(PSHR32(y, 14), 32767)); } } } |