diff options
author | Chris Robinson <[email protected]> | 2023-12-17 22:36:44 -0800 |
---|---|---|
committer | Chris Robinson <[email protected]> | 2023-12-17 22:36:44 -0800 |
commit | 708a90ef8ef7ee00991556298073c50dfa6e72a1 (patch) | |
tree | 5d72e46977dc241febfcf6ad4ab2ffbe2fadf2c3 /core/converter.cpp | |
parent | bc83c874ff15b29fdab9b6c0bf40b268345b3026 (diff) |
Fix some implicit conversions
Diffstat (limited to 'core/converter.cpp')
-rw-r--r-- | core/converter.cpp | 23 |
1 files changed, 10 insertions, 13 deletions
diff --git a/core/converter.cpp b/core/converter.cpp index fb293ee2..b3ff5b0a 100644 --- a/core/converter.cpp +++ b/core/converter.cpp @@ -24,26 +24,23 @@ static_assert((BufferLineSize-1)/MaxPitch > 0, "MaxPitch is too large for Buffer static_assert((INT_MAX>>MixerFracBits)/MaxPitch > BufferLineSize, "MaxPitch and/or BufferLineSize are too large for MixerFracBits!"); -/* Base template left undefined. Should be marked =delete, but Clang 3.8.1 - * chokes on that given the inline specializations. - */ template<DevFmtType T> -inline float LoadSample(DevFmtType_t<T> val) noexcept; +constexpr float LoadSample(DevFmtType_t<T> val) noexcept = delete; -template<> inline float LoadSample<DevFmtByte>(DevFmtType_t<DevFmtByte> val) noexcept -{ return val * (1.0f/128.0f); } -template<> inline float LoadSample<DevFmtShort>(DevFmtType_t<DevFmtShort> val) noexcept -{ return val * (1.0f/32768.0f); } -template<> inline float LoadSample<DevFmtInt>(DevFmtType_t<DevFmtInt> val) noexcept +template<> constexpr float LoadSample<DevFmtByte>(DevFmtType_t<DevFmtByte> val) noexcept +{ return float(val) * (1.0f/128.0f); } +template<> constexpr float LoadSample<DevFmtShort>(DevFmtType_t<DevFmtShort> val) noexcept +{ return float(val) * (1.0f/32768.0f); } +template<> constexpr float LoadSample<DevFmtInt>(DevFmtType_t<DevFmtInt> val) noexcept { return static_cast<float>(val) * (1.0f/2147483648.0f); } -template<> inline float LoadSample<DevFmtFloat>(DevFmtType_t<DevFmtFloat> val) noexcept +template<> constexpr float LoadSample<DevFmtFloat>(DevFmtType_t<DevFmtFloat> val) noexcept { return val; } -template<> inline float LoadSample<DevFmtUByte>(DevFmtType_t<DevFmtUByte> val) noexcept +template<> constexpr float LoadSample<DevFmtUByte>(DevFmtType_t<DevFmtUByte> val) noexcept { return LoadSample<DevFmtByte>(static_cast<int8_t>(val - 128)); } -template<> inline float LoadSample<DevFmtUShort>(DevFmtType_t<DevFmtUShort> val) noexcept +template<> constexpr float LoadSample<DevFmtUShort>(DevFmtType_t<DevFmtUShort> val) noexcept { return LoadSample<DevFmtShort>(static_cast<int16_t>(val - 32768)); } -template<> inline float LoadSample<DevFmtUInt>(DevFmtType_t<DevFmtUInt> val) noexcept +template<> constexpr float LoadSample<DevFmtUInt>(DevFmtType_t<DevFmtUInt> val) noexcept { return LoadSample<DevFmtInt>(static_cast<int32_t>(val - 2147483648u)); } |