On Sat, May 23, 2020 at 10:17:12PM +0200, Volker Rümelin wrote: > The code in CONV_NATURAL_FLOAT() and CLIP_NATURAL_FLOAT() > seems to use the constant 2^31-0.5 to convert float to integer > and back. But the float type lacks the required precision and > the constant used for the conversion is 2^31. This is equiva- > lent to a [-1.f, 1.f] <-> [INT32_MIN, INT32_MAX + 1] mapping. > > This patch explicitly writes down the used constant. The > compiler generated code doesn't change. > > The constant 2^31 has an exact float representation and the > clang 10 compiler stops complaining about an implicit int to > float conversion with a changed value. > > A few notes: > - The conversion of 1.f to INT32_MAX + 1 doesn't overflow. The > type of the destination variable is int64_t. > - At a later stage one of the clip_* functions in > audio/mixeng_template.h limits INT32_MAX + 1 to the integer > range. > - The clip_natural_float_* functions in audio/mixeng.c convert > INT32_MAX and INT32_MAX + 1 to 1.f. > > Buglink: https://bugs.launchpad.net/bugs/1878627 > Signed-off-by: Volker Rümelin <vr_q...@t-online.de>
Added to audio queue. thanks, Gerd