diff --git a/alc/alu.cpp b/alc/alu.cpp index fe42b14b..1824a5a9 100644 --- a/alc/alu.cpp +++ b/alc/alu.cpp @@ -1888,18 +1888,16 @@ template void Write(const al::span InBuffer, void *OutBuffer, const size_t Offset, const size_t SamplesToDo, const size_t FrameStep) { - using SampleType = typename DevFmtTypeTraits::Type; - ASSUME(FrameStep > 0); ASSUME(SamplesToDo > 0); - SampleType *outbase = static_cast(OutBuffer) + Offset*FrameStep; + DevFmtType_t *outbase = static_cast*>(OutBuffer) + Offset*FrameStep; for(const FloatBufferLine &inbuf : InBuffer) { - SampleType *out{outbase++}; + DevFmtType_t *out{outbase++}; auto conv_sample = [FrameStep,&out](const float s) noexcept -> void { - *out = SampleConv(s); + *out = SampleConv>(s); out += FrameStep; }; std::for_each(inbuf.begin(), inbuf.begin()+SamplesToDo, conv_sample); diff --git a/alc/converter.cpp b/alc/converter.cpp index de6f4587..9a3fa2f2 100644 --- a/alc/converter.cpp +++ b/alc/converter.cpp @@ -30,22 +30,22 @@ static_assert((INT_MAX>>MixerFracBits)/MaxPitch > BufferLineSize, * chokes on that given the inline specializations. */ template -inline float LoadSample(typename DevFmtTypeTraits::Type val) noexcept; +inline float LoadSample(DevFmtType_t val) noexcept; -template<> inline float LoadSample(DevFmtTypeTraits::Type val) noexcept +template<> inline float LoadSample(DevFmtType_t val) noexcept { return val * (1.0f/128.0f); } -template<> inline float LoadSample(DevFmtTypeTraits::Type val) noexcept +template<> inline float LoadSample(DevFmtType_t val) noexcept { return val * (1.0f/32768.0f); } -template<> inline float LoadSample(DevFmtTypeTraits::Type val) noexcept +template<> inline float LoadSample(DevFmtType_t val) noexcept { return static_cast(val) * (1.0f/2147483648.0f); } -template<> inline float LoadSample(DevFmtTypeTraits::Type val) noexcept +template<> inline float LoadSample(DevFmtType_t val) noexcept { return val; } -template<> inline float LoadSample(DevFmtTypeTraits::Type val) noexcept +template<> inline float LoadSample(DevFmtType_t val) noexcept { return LoadSample(static_cast(val - 128)); } -template<> inline float LoadSample(DevFmtTypeTraits::Type val) noexcept +template<> inline float LoadSample(DevFmtType_t val) noexcept { return LoadSample(static_cast(val - 32768)); } -template<> inline float LoadSample(DevFmtTypeTraits::Type val) noexcept +template<> inline float LoadSample(DevFmtType_t val) noexcept { return LoadSample(static_cast(val - 2147483648u)); } @@ -53,9 +53,7 @@ template inline void LoadSampleArray(float *RESTRICT dst, const void *src, const size_t srcstep, const size_t samples) noexcept { - using SampleType = typename DevFmtTypeTraits::Type; - - const SampleType *ssrc = static_cast(src); + const DevFmtType_t *ssrc = static_cast*>(src); for(size_t i{0u};i < samples;i++) dst[i] = LoadSample(ssrc[i*srcstep]); } @@ -80,7 +78,7 @@ void LoadSamples(float *dst, const void *src, const size_t srcstep, const DevFmt template -inline typename DevFmtTypeTraits::Type StoreSample(float) noexcept; +inline DevFmtType_t StoreSample(float) noexcept; template<> inline float StoreSample(float val) noexcept { return val; } @@ -103,9 +101,7 @@ template inline void StoreSampleArray(void *dst, const float *RESTRICT src, const size_t dststep, const size_t samples) noexcept { - using SampleType = typename DevFmtTypeTraits::Type; - - SampleType *sdst = static_cast(dst); + DevFmtType_t *sdst = static_cast*>(dst); for(size_t i{0u};i < samples;i++) sdst[i*dststep] = StoreSample(src[i]); } @@ -133,9 +129,7 @@ void StoreSamples(void *dst, const float *src, const size_t dststep, const DevFm template void Mono2Stereo(float *RESTRICT dst, const void *src, const size_t frames) noexcept { - using SampleType = typename DevFmtTypeTraits::Type; - - const SampleType *ssrc = static_cast(src); + const DevFmtType_t *ssrc = static_cast*>(src); for(size_t i{0u};i < frames;i++) dst[i*2 + 1] = dst[i*2 + 0] = LoadSample(ssrc[i]) * 0.707106781187f; } @@ -144,9 +138,7 @@ template void Multi2Mono(uint chanmask, const size_t step, const float scale, float *RESTRICT dst, const void *src, const size_t frames) noexcept { - using SampleType = typename DevFmtTypeTraits::Type; - - const SampleType *ssrc = static_cast(src); + const DevFmtType_t *ssrc = static_cast*>(src); std::fill_n(dst, frames, 0.0f); for(size_t c{0};chanmask;++c) { diff --git a/core/devformat.h b/core/devformat.h index bcd42539..9577c4b7 100644 --- a/core/devformat.h +++ b/core/devformat.h @@ -76,6 +76,9 @@ struct DevFmtTypeTraits { using Type = uint32_t; }; template<> struct DevFmtTypeTraits { using Type = float; }; +template +using DevFmtType_t = typename DevFmtTypeTraits::Type; + uint BytesFromDevFmt(DevFmtType type) noexcept; uint ChannelsFromDevFmt(DevFmtChannels chans, uint ambiorder) noexcept;