Fixes NaN issues in compute_stereo_width()
authorJean-Marc Valin <jmvalin@jmvalin.ca>
Sun, 31 Dec 2017 20:29:28 +0000 (15:29 -0500)
committerJean-Marc Valin <jmvalin@jmvalin.ca>
Sun, 31 Dec 2017 20:29:28 +0000 (15:29 -0500)
src/opus_encoder.c

index f721233..b89b874 100644 (file)
@@ -699,6 +699,12 @@ opus_val16 compute_stereo_width(const opus_val16 *pcm, int frame_size, opus_int3
       xy += SHR32(pxy, 10);
       yy += SHR32(pyy, 10);
    }
+#ifndef FIXED_POINT
+   if (!(xx < 1e9f) || celt_isnan(xx) || !(yy < 1e9f) || celt_isnan(yy))
+   {
+      xy = xx = yy = 0;
+   }
+#endif
    mem->XX += MULT16_32_Q15(short_alpha, xx-mem->XX);
    mem->XY += MULT16_32_Q15(short_alpha, xy-mem->XY);
    mem->YY += MULT16_32_Q15(short_alpha, yy-mem->YY);