aboutsummaryrefslogtreecommitdiffstats
path: root/Alc/converter.cpp
diff options
context:
space:
mode:
authorChris Robinson <[email protected]>2019-03-25 22:52:15 -0700
committerChris Robinson <[email protected]>2019-03-25 22:52:15 -0700
commita57116f7888a0fdbdac9ed01ce8237c8296a2f65 (patch)
tree5a8816946948c6c3b5d1e4020a58c5d1ea31348b /Alc/converter.cpp
parent0a4d1c858ec21b948838f5e9b464b5534d497bca (diff)
Scale floats directly to 32-bit integer values
Rather than scaling to a 25-bit integer and shifting for the extra 7 bits. This should improve precision for values closer to 0.
Diffstat (limited to 'Alc/converter.cpp')
-rw-r--r--Alc/converter.cpp4
1 files changed, 2 insertions, 2 deletions
diff --git a/Alc/converter.cpp b/Alc/converter.cpp
index 884a98da..5535fd42 100644
--- a/Alc/converter.cpp
+++ b/Alc/converter.cpp
@@ -22,7 +22,7 @@ template<> inline ALfloat LoadSample<DevFmtByte>(DevFmtTypeTraits<DevFmtByte>::T
template<> inline ALfloat LoadSample<DevFmtShort>(DevFmtTypeTraits<DevFmtShort>::Type val)
{ return val * (1.0f/32768.0f); }
template<> inline ALfloat LoadSample<DevFmtInt>(DevFmtTypeTraits<DevFmtInt>::Type val)
-{ return (val>>7) * (1.0f/16777216.0f); }
+{ return val * (1.0f/2147483648.0f); }
template<> inline ALfloat LoadSample<DevFmtFloat>(DevFmtTypeTraits<DevFmtFloat>::Type val)
{ return val; }
@@ -68,7 +68,7 @@ inline typename DevFmtTypeTraits<T>::Type StoreSample(ALfloat);
template<> inline ALfloat StoreSample<DevFmtFloat>(ALfloat val)
{ return val; }
template<> inline ALint StoreSample<DevFmtInt>(ALfloat val)
-{ return fastf2i(clampf(val*16777216.0f, -16777216.0f, 16777215.0f))<<7; }
+{ return fastf2i(clampf(val*2147483648.0f, -2147483648.0f, 2147483520.0f)); }
template<> inline ALshort StoreSample<DevFmtShort>(ALfloat val)
{ return fastf2i(clampf(val*32768.0f, -32768.0f, 32767.0f)); }
template<> inline ALbyte StoreSample<DevFmtByte>(ALfloat val)