From 19b549f82fcb0405cfa07e8723c9ee8ea30f085b Mon Sep 17 00:00:00 2001 From: Erik de Castro Lopo Date: Sun, 15 Jun 2014 20:32:45 +1000 Subject: [PATCH] regainplay_analysis : Work around GCC optimizer bug. Discussion: http://lists.xiph.org/pipermail/flac-dev/2014-June/004720.html Patch-from: lvqcl --- src/share/replaygain_analysis/replaygain_analysis.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/share/replaygain_analysis/replaygain_analysis.c b/src/share/replaygain_analysis/replaygain_analysis.c index 38e54b98..7d87091c 100644 --- a/src/share/replaygain_analysis/replaygain_analysis.c +++ b/src/share/replaygain_analysis/replaygain_analysis.c @@ -536,7 +536,11 @@ analyzeResult ( Uint32_t* Array, size_t len ) if ( elems == 0 ) return GAIN_NOT_ENOUGH_SAMPLES; +#if 0 /* GCC bug workaround: it incorrectly calculates 'elems * (1. - RMS_PERCENTILE)' with -O3 -msse2 ... options */ upper = (Int32_t) ceil (elems * (1. - RMS_PERCENTILE)); +#else + upper = (Int32_t) (elems / 20 + ((elems % 20) ? 1 : 0)); +#endif for ( i = len; i-- > 0; ) { if ( (upper -= Array[i]) <= 0 ) break;