ref: eda57aa3868c6606eacb3580e0cf75fe48e2a26d
parent: 60fcfd59541bab7189cc416f2f5692bfbb534f32
author: Jean-Marc Valin <[email protected]>
date: Thu Dec 3 09:12:01 EST 2015
Fixes the transient detector on silence Previously silence would cause the divide approximation on 0/0 to return a very large value, which would be interpreted as a transient
--- a/celt/celt_encoder.c
+++ b/celt/celt_encoder.c
@@ -343,9 +343,9 @@
{
int id;
#ifdef FIXED_POINT
- id = IMAX(0,IMIN(127,MULT16_32_Q15(tmp[i],norm))); /* Do not round to nearest */
+ id = MAX32(0,MIN32(127,MULT16_32_Q15(tmp[i]+EPSILON,norm))); /* Do not round to nearest */
#else
- id = IMAX(0,IMIN(127,(int)floor(64*norm*tmp[i]))); /* Do not round to nearest */
+ id = (int)MAX32(0,MIN32(127,floor(64*norm*(tmp[i]+EPSILON)))); /* Do not round to nearest */
#endif
unmask += inv_table[id];
}