aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Robinson <[email protected]>2023-12-08 10:11:08 -0800
committerChris Robinson <[email protected]>2023-12-08 10:11:08 -0800
commit040c172cdf186c9ccfb0642aa9ac598f115bb46b (patch)
tree0aaefde29bb9151042933f97f914946e007047e7
parent4527b873788373edb630046b0ab586255aa15e44 (diff)
Clean up some more clang-tidy warnings
-rw-r--r--al/auxeffectslot.cpp4
-rw-r--r--al/source.cpp12
-rw-r--r--al/source.h19
-rw-r--r--alc/alc.cpp42
-rw-r--r--alc/alu.cpp21
-rw-r--r--alc/backends/base.h2
-rw-r--r--alc/backends/jack.cpp6
-rw-r--r--alc/backends/opensl.cpp2
-rw-r--r--alc/backends/pipewire.cpp6
-rw-r--r--alc/context.cpp2
-rw-r--r--alc/effects/convolution.cpp10
-rw-r--r--alc/effects/dedicated.cpp8
-rw-r--r--alc/panning.cpp16
-rw-r--r--common/ringbuffer.cpp4
-rw-r--r--core/bformatdec.cpp16
-rw-r--r--core/bformatdec.h6
-rw-r--r--core/buffer_storage.h10
-rw-r--r--core/context.cpp2
-rw-r--r--core/context.h4
-rw-r--r--core/devformat.h3
-rw-r--r--core/device.h34
-rw-r--r--core/filters/biquad.h4
-rw-r--r--core/filters/nfc.h9
-rw-r--r--core/fmt_traits.cpp8
-rw-r--r--core/fmt_traits.h5
-rw-r--r--core/mixer/defs.h3
-rw-r--r--core/mixer/mixer_neon.cpp2
-rw-r--r--core/mixer/mixer_sse2.cpp2
-rw-r--r--core/mixer/mixer_sse41.cpp2
-rw-r--r--core/uhjfilter.h2
-rw-r--r--core/voice.cpp79
-rw-r--r--core/voice.h13
32 files changed, 184 insertions, 174 deletions
diff --git a/al/auxeffectslot.cpp b/al/auxeffectslot.cpp
index 31e9542b..7b7672a5 100644
--- a/al/auxeffectslot.cpp
+++ b/al/auxeffectslot.cpp
@@ -164,7 +164,7 @@ void AddActiveEffectSlots(const al::span<ALeffectslot*> auxslots, ALCcontext *co
std::uninitialized_fill_n(newarray->end(), newcount, nullptr);
curarray = context->mActiveAuxSlots.exchange(newarray, std::memory_order_acq_rel);
- context->mDevice->waitForMix();
+ std::ignore = context->mDevice->waitForMix();
std::destroy_n(curarray->end(), curarray->size());
delete curarray;
@@ -203,7 +203,7 @@ void RemoveActiveEffectSlots(const al::span<ALeffectslot*> auxslots, ALCcontext
std::uninitialized_fill_n(newarray->end(), newsize, nullptr);
curarray = context->mActiveAuxSlots.exchange(newarray, std::memory_order_acq_rel);
- context->mDevice->waitForMix();
+ std::ignore = context->mDevice->waitForMix();
std::destroy_n(curarray->end(), curarray->size());
delete curarray;
diff --git a/al/source.cpp b/al/source.cpp
index a6fe4225..c99943cf 100644
--- a/al/source.cpp
+++ b/al/source.cpp
@@ -171,7 +171,7 @@ void UpdateSourceProps(const ALsource *source, Voice *voice, ALCcontext *context
ret.LFReference = srcsend.LFReference;
return ret;
};
- std::transform(source->Send.cbegin(), source->Send.cend(), props->Send, copy_send);
+ std::transform(source->Send.cbegin(), source->Send.cend(), props->Send.begin(), copy_send);
if(!props->Send[0].Slot && context->mDefaultSlot)
props->Send[0].Slot = context->mDefaultSlot->mSlot;
@@ -575,7 +575,7 @@ void SendVoiceChanges(ALCcontext *ctx, VoiceChange *tail)
oldhead->mNext.store(tail, std::memory_order_release);
const bool connected{device->Connected.load(std::memory_order_acquire)};
- device->waitForMix();
+ std::ignore = device->waitForMix();
if(!connected) UNLIKELY
{
if(ctx->mStopVoicesOnDisconnect.load(std::memory_order_acquire))
@@ -681,7 +681,7 @@ bool SetVoiceOffset(Voice *oldvoice, const VoicePos &vpos, ALsource *source, ALC
return true;
/* Otherwise, wait for any current mix to finish and check one last time. */
- device->waitForMix();
+ std::ignore = device->waitForMix();
if(newvoice->mPlayState.load(std::memory_order_acquire) != Voice::Pending)
return true;
/* The change-over failed because the old voice stopped before the new
@@ -1316,11 +1316,11 @@ constexpr ALuint DoubleValsByProp(ALenum prop)
struct check_exception : std::exception {
};
struct check_size_exception final : check_exception {
- const char *what() const noexcept override
+ [[nodiscard]] auto what() const noexcept -> const char* override
{ return "check_size_exception"; }
};
struct check_value_exception final : check_exception {
- const char *what() const noexcept override
+ [[nodiscard]] auto what() const noexcept -> const char* override
{ return "check_value_exception"; }
};
@@ -1580,7 +1580,7 @@ NOINLINE void SetProperty(ALsource *const Source, ALCcontext *const Context, con
* to ensure it isn't currently looping back or reaching the
* end.
*/
- device->waitForMix();
+ std::ignore = device->waitForMix();
}
return;
}
diff --git a/al/source.h b/al/source.h
index 26d425ef..3fd43a5c 100644
--- a/al/source.h
+++ b/al/source.h
@@ -37,7 +37,7 @@ enum class SourceStereo : bool {
Enhanced = AL_SUPER_STEREO_SOFT
};
-#define DEFAULT_SENDS 2
+inline constexpr size_t DefaultSendCount{2};
inline constexpr ALuint InvalidVoiceIndex{std::numeric_limits<ALuint>::max()};
@@ -122,7 +122,7 @@ struct ALsource {
float GainLF;
float LFReference;
};
- std::array<SendData,MAX_SENDS> Send;
+ std::array<SendData,MaxSendCount> Send;
/**
* Last user-specified offset, and the offset type (bytes, samples, or
@@ -173,18 +173,18 @@ public:
private:
using Exception = EaxSourceException;
- static constexpr auto eax_max_speakers = 9;
+ static constexpr auto eax_max_speakers{9u};
- using EaxFxSlotIds = const GUID* [EAX_MAX_FXSLOTS];
+ using EaxFxSlotIds = std::array<const GUID*,EAX_MAX_FXSLOTS>;
- static constexpr const EaxFxSlotIds eax4_fx_slot_ids = {
+ static constexpr const EaxFxSlotIds eax4_fx_slot_ids{
&EAXPROPERTYID_EAX40_FXSlot0,
&EAXPROPERTYID_EAX40_FXSlot1,
&EAXPROPERTYID_EAX40_FXSlot2,
&EAXPROPERTYID_EAX40_FXSlot3,
};
- static constexpr const EaxFxSlotIds eax5_fx_slot_ids = {
+ static constexpr const EaxFxSlotIds eax5_fx_slot_ids{
&EAXPROPERTYID_EAX50_FXSlot0,
&EAXPROPERTYID_EAX50_FXSlot1,
&EAXPROPERTYID_EAX50_FXSlot2,
@@ -839,11 +839,10 @@ private:
float path_ratio,
float lf_ratio) noexcept;
- EaxAlLowPassParam eax_create_direct_filter_param() const noexcept;
+ [[nodiscard]] auto eax_create_direct_filter_param() const noexcept -> EaxAlLowPassParam;
- EaxAlLowPassParam eax_create_room_filter_param(
- const ALeffectslot& fx_slot,
- const EAXSOURCEALLSENDPROPERTIES& send) const noexcept;
+ [[nodiscard]] auto eax_create_room_filter_param(const ALeffectslot& fx_slot,
+ const EAXSOURCEALLSENDPROPERTIES& send) const noexcept -> EaxAlLowPassParam;
void eax_update_direct_filter();
void eax_update_room_filters();
diff --git a/alc/alc.cpp b/alc/alc.cpp
index 1ceae5ee..62f798f2 100644
--- a/alc/alc.cpp
+++ b/alc/alc.cpp
@@ -1008,8 +1008,8 @@ ALCenum UpdateDeviceParams(ALCdevice *device, const int *attrList)
std::optional<DevFmtType> opttype;
std::optional<DevAmbiLayout> optlayout;
std::optional<DevAmbiScaling> optscale;
- uint period_size{DEFAULT_UPDATE_SIZE};
- uint buffer_size{DEFAULT_UPDATE_SIZE * DEFAULT_NUM_UPDATES};
+ uint period_size{DefaultUpdateSize};
+ uint buffer_size{DefaultUpdateSize * DefaultNumUpdates};
int hrtf_id{-1};
uint aorder{0u};
@@ -1019,9 +1019,9 @@ ALCenum UpdateDeviceParams(ALCdevice *device, const int *attrList)
if(auto freqopt = device->configValue<uint>(nullptr, "frequency"))
{
- optsrate = clampu(*freqopt, MIN_OUTPUT_RATE, MAX_OUTPUT_RATE);
+ optsrate = clampu(*freqopt, MinOutputRate, MaxOutputRate);
- const double scale{static_cast<double>(*optsrate) / DEFAULT_OUTPUT_RATE};
+ const double scale{static_cast<double>(*optsrate) / double{DefaultOutputRate}};
period_size = static_cast<uint>(period_size*scale + 0.5);
}
@@ -1030,7 +1030,7 @@ ALCenum UpdateDeviceParams(ALCdevice *device, const int *attrList)
if(auto numperopt = device->configValue<uint>(nullptr, "periods"))
buffer_size = clampu(*numperopt, 2, 16) * period_size;
else
- buffer_size = period_size * DEFAULT_NUM_UPDATES;
+ buffer_size = period_size * uint{DefaultNumUpdates};
if(auto typeopt = device->configValue<std::string>(nullptr, "sample-type"))
{
@@ -1201,7 +1201,7 @@ ALCenum UpdateDeviceParams(ALCdevice *device, const int *attrList)
case ATTRIBUTE(ALC_MAX_AUXILIARY_SENDS)
numSends = static_cast<uint>(attrList[attrIdx + 1]);
if(numSends > INT_MAX) numSends = 0;
- else numSends = minu(numSends, MAX_SENDS);
+ else numSends = minu(numSends, MaxSendCount);
break;
case ATTRIBUTE(ALC_HRTF_SOFT)
@@ -1244,7 +1244,7 @@ ALCenum UpdateDeviceParams(ALCdevice *device, const int *attrList)
{
if(!optchans || !opttype)
return ALC_INVALID_VALUE;
- if(freqAttr < MIN_OUTPUT_RATE || freqAttr > MAX_OUTPUT_RATE)
+ if(freqAttr < int{MinOutputRate} || freqAttr > int{MaxOutputRate})
return ALC_INVALID_VALUE;
if(*optchans == DevFmtAmbi3D)
{
@@ -1321,8 +1321,8 @@ ALCenum UpdateDeviceParams(ALCdevice *device, const int *attrList)
if(freqAttr)
{
- uint oldrate = optsrate.value_or(DEFAULT_OUTPUT_RATE);
- freqAttr = clampi(freqAttr, MIN_OUTPUT_RATE, MAX_OUTPUT_RATE);
+ uint oldrate = optsrate.value_or(DefaultOutputRate);
+ freqAttr = clampi(freqAttr, MinOutputRate, MaxOutputRate);
const double scale{static_cast<double>(freqAttr) / oldrate};
period_size = static_cast<uint>(period_size*scale + 0.5);
@@ -1397,7 +1397,7 @@ ALCenum UpdateDeviceParams(ALCdevice *device, const int *attrList)
device->mAmbiOrder = 0;
device->BufferSize = buffer_size;
device->UpdateSize = period_size;
- device->Frequency = optsrate.value_or(DEFAULT_OUTPUT_RATE);
+ device->Frequency = optsrate.value_or(DefaultOutputRate);
device->Flags.set(FrequencyRequest, optsrate.has_value())
.set(ChannelsRequest, optchans.has_value())
.set(SampleTypeRequest, opttype.has_value());
@@ -1500,7 +1500,7 @@ ALCenum UpdateDeviceParams(ALCdevice *device, const int *attrList)
device->NumStereoSources = numStereo;
if(auto sendsopt = device->configValue<int>(nullptr, "sends"))
- numSends = minu(numSends, static_cast<uint>(clampi(*sendsopt, 0, MAX_SENDS)));
+ numSends = minu(numSends, static_cast<uint>(clampi(*sendsopt, 0, MaxSendCount)));
device->NumAuxSends = numSends;
TRACE("Max sources: %d (%d + %d), effect slots: %d, sends: %d\n",
@@ -1781,7 +1781,7 @@ bool ResetDeviceParams(ALCdevice *device, const int *attrList)
if(!device->Connected.load(std::memory_order_relaxed)) UNLIKELY
{
/* Make sure disconnection is finished before continuing on. */
- device->waitForMix();
+ std::ignore = device->waitForMix();
for(ContextBase *ctxbase : *device->mContexts.load(std::memory_order_acquire))
{
@@ -2101,7 +2101,7 @@ static size_t GetIntegerv(ALCdevice *device, ALCenum param, const al::span<int>
values[0] = alcEFXMinorVersion;
return 1;
case ALC_MAX_AUXILIARY_SENDS:
- values[0] = MAX_SENDS;
+ values[0] = MaxSendCount;
return 1;
case ALC_ATTRIBUTES_SIZE:
@@ -2720,7 +2720,7 @@ ALC_API ALCcontext* ALC_APIENTRY alcCreateContext(ALCdevice *device, const ALCin
dev->mContexts.store(newarray.release());
if(oldarray != &DeviceBase::sEmptyContextArray)
{
- dev->waitForMix();
+ std::ignore = dev->waitForMix();
delete oldarray;
}
}
@@ -2892,7 +2892,7 @@ ALC_API ALCdevice* ALC_APIENTRY alcOpenDevice(const ALCchar *deviceName) noexcep
#ifdef ALSOFT_EAX
eax_g_is_enabled ? uint{EAX_MAX_FXSLOTS} :
#endif // ALSOFT_EAX
- DEFAULT_SENDS
+ uint{DefaultSendCount}
};
DeviceRef device{new ALCdevice{DeviceType::Playback}};
@@ -2900,9 +2900,9 @@ ALC_API ALCdevice* ALC_APIENTRY alcOpenDevice(const ALCchar *deviceName) noexcep
/* Set output format */
device->FmtChans = DevFmtChannelsDefault;
device->FmtType = DevFmtTypeDefault;
- device->Frequency = DEFAULT_OUTPUT_RATE;
- device->UpdateSize = DEFAULT_UPDATE_SIZE;
- device->BufferSize = DEFAULT_UPDATE_SIZE * DEFAULT_NUM_UPDATES;
+ device->Frequency = DefaultOutputRate;
+ device->UpdateSize = DefaultUpdateSize;
+ device->BufferSize = DefaultUpdateSize * DefaultNumUpdates;
device->SourcesMax = 256;
device->NumStereoSources = 1;
@@ -3199,7 +3199,7 @@ ALC_API ALCdevice* ALC_APIENTRY alcLoopbackOpenDeviceSOFT(const ALCchar *deviceN
#ifdef ALSOFT_EAX
eax_g_is_enabled ? uint{EAX_MAX_FXSLOTS} :
#endif // ALSOFT_EAX
- DEFAULT_SENDS
+ uint{DefaultSendCount}
};
DeviceRef device{new ALCdevice{DeviceType::Loopback}};
@@ -3212,7 +3212,7 @@ ALC_API ALCdevice* ALC_APIENTRY alcLoopbackOpenDeviceSOFT(const ALCchar *deviceN
device->BufferSize = 0;
device->UpdateSize = 0;
- device->Frequency = DEFAULT_OUTPUT_RATE;
+ device->Frequency = DefaultOutputRate;
device->FmtChans = DevFmtChannelsDefault;
device->FmtType = DevFmtTypeDefault;
@@ -3255,7 +3255,7 @@ ALC_API ALCboolean ALC_APIENTRY alcIsRenderFormatSupportedSOFT(ALCdevice *device
else
{
if(DevFmtTypeFromEnum(type).has_value() && DevFmtChannelsFromEnum(channels).has_value()
- && freq >= MIN_OUTPUT_RATE && freq <= MAX_OUTPUT_RATE)
+ && freq >= int{MinOutputRate} && freq <= int{MaxOutputRate})
return ALC_TRUE;
}
diff --git a/alc/alu.cpp b/alc/alu.cpp
index fe47f9be..0a5dabc9 100644
--- a/alc/alu.cpp
+++ b/alc/alu.cpp
@@ -282,7 +282,7 @@ void DeviceBase::ProcessHrtf(const size_t SamplesToDo)
const size_t lidx{RealOut.ChannelIndex[FrontLeft]};
const size_t ridx{RealOut.ChannelIndex[FrontRight]};
- MixDirectHrtf(RealOut.Buffer[lidx], RealOut.Buffer[ridx], Dry.Buffer, HrtfAccumData,
+ MixDirectHrtf(RealOut.Buffer[lidx], RealOut.Buffer[ridx], Dry.Buffer, HrtfAccumData.data(),
mHrtfState->mTemp.data(), mHrtfState->mChannels.data(), mHrtfState->mIrSize, SamplesToDo);
}
@@ -776,8 +776,8 @@ struct GainTriplet { float Base, HF, LF; };
void CalcPanningAndFilters(Voice *voice, const float xpos, const float ypos, const float zpos,
const float Distance, const float Spread, const GainTriplet &DryGain,
- const al::span<const GainTriplet,MAX_SENDS> WetGain,
- const al::span<EffectSlot*,MAX_SENDS> SendSlots, const VoiceProps *props,
+ const al::span<const GainTriplet,MaxSendCount> WetGain,
+ const al::span<EffectSlot*,MaxSendCount> SendSlots, const VoiceProps *props,
const ContextParams &Context, DeviceBase *Device)
{
static constexpr ChanPosMap MonoMap[1]{
@@ -1397,7 +1397,7 @@ void CalcPanningAndFilters(Voice *voice, const float xpos, const float ypos, con
void CalcNonAttnSourceParams(Voice *voice, const VoiceProps *props, const ContextBase *context)
{
DeviceBase *Device{context->mDevice};
- EffectSlot *SendSlots[MAX_SENDS];
+ std::array<EffectSlot*,MaxSendCount> SendSlots;
voice->mDirect.Buffer = Device->Dry.Buffer;
for(uint i{0};i < Device->NumAuxSends;i++)
@@ -1427,7 +1427,8 @@ void CalcNonAttnSourceParams(Voice *voice, const VoiceProps *props, const Contex
context->mParams.Gain, GainMixMax);
DryGain.HF = props->Direct.GainHF;
DryGain.LF = props->Direct.GainLF;
- GainTriplet WetGain[MAX_SENDS];
+
+ std::array<GainTriplet,MaxSendCount> WetGain;
for(uint i{0};i < Device->NumAuxSends;i++)
{
WetGain[i].Base = minf(clampf(props->Gain, props->MinGain, props->MaxGain) *
@@ -1447,9 +1448,9 @@ void CalcAttnSourceParams(Voice *voice, const VoiceProps *props, const ContextBa
/* Set mixing buffers and get send parameters. */
voice->mDirect.Buffer = Device->Dry.Buffer;
- std::array<EffectSlot*,MAX_SENDS> SendSlots{};
- std::array<float,MAX_SENDS> RoomRolloff{};
- std::bitset<MAX_SENDS> UseDryAttnForRoom{0};
+ std::array<EffectSlot*,MaxSendCount> SendSlots{};
+ std::array<float,MaxSendCount> RoomRolloff{};
+ std::bitset<MaxSendCount> UseDryAttnForRoom{0};
for(uint i{0};i < NumSends;i++)
{
SendSlots[i] = props->Send[i].Slot;
@@ -1502,7 +1503,7 @@ void CalcAttnSourceParams(Voice *voice, const VoiceProps *props, const ContextBa
/* Calculate distance attenuation */
float ClampedDist{Distance};
float DryGainBase{props->Gain};
- std::array<float,MAX_SENDS> WetGainBase{};
+ std::array<float,MaxSendCount> WetGainBase{};
WetGainBase.fill(props->Gain);
float DryAttnBase{1.0f};
@@ -1605,7 +1606,7 @@ void CalcAttnSourceParams(Voice *voice, const VoiceProps *props, const ContextBa
DryGain.HF = ConeHF * props->Direct.GainHF;
DryGain.LF = props->Direct.GainLF;
- std::array<GainTriplet,MAX_SENDS> WetGain{};
+ std::array<GainTriplet,MaxSendCount> WetGain{};
for(uint i{0};i < NumSends;i++)
{
WetGainBase[i] = clampf(WetGainBase[i]*WetCone, props->MinGain, props->MaxGain) *
diff --git a/alc/backends/base.h b/alc/backends/base.h
index 70f96275..ecca6b2e 100644
--- a/alc/backends/base.h
+++ b/alc/backends/base.h
@@ -99,7 +99,7 @@ public:
backend_exception(backend_error code, const char *msg, ...);
~backend_exception() override;
- backend_error errorCode() const noexcept { return mErrorCode; }
+ [[nodiscard]] auto errorCode() const noexcept -> backend_error { return mErrorCode; }
};
} // namespace al
diff --git a/alc/backends/jack.cpp b/alc/backends/jack.cpp
index 4999a738..ca862276 100644
--- a/alc/backends/jack.cpp
+++ b/alc/backends/jack.cpp
@@ -307,7 +307,7 @@ struct JackPlayback final : public BackendBase {
std::string mPortPattern;
jack_client_t *mClient{nullptr};
- std::array<jack_port_t*,MAX_OUTPUT_CHANNELS> mPort{};
+ std::array<jack_port_t*,MaxOutputChannels> mPort{};
std::mutex mMutex;
@@ -339,7 +339,7 @@ JackPlayback::~JackPlayback()
int JackPlayback::processRt(jack_nframes_t numframes) noexcept
{
- std::array<jack_default_audio_sample_t*,MAX_OUTPUT_CHANNELS> out;
+ std::array<jack_default_audio_sample_t*,MaxOutputChannels> out;
size_t numchans{0};
for(auto port : mPort)
{
@@ -363,7 +363,7 @@ int JackPlayback::processRt(jack_nframes_t numframes) noexcept
int JackPlayback::process(jack_nframes_t numframes) noexcept
{
- std::array<jack_default_audio_sample_t*,MAX_OUTPUT_CHANNELS> out;
+ std::array<jack_default_audio_sample_t*,MaxOutputChannels> out;
size_t numchans{0};
for(auto port : mPort)
{
diff --git a/alc/backends/opensl.cpp b/alc/backends/opensl.cpp
index 32745edd..f49b2ef8 100644
--- a/alc/backends/opensl.cpp
+++ b/alc/backends/opensl.cpp
@@ -439,7 +439,7 @@ bool OpenSLPlayback::reset()
JCALL(env,ReleaseStringUTFChars)(srateStr, strchars);
if(!sampleRate) sampleRate = device->Frequency;
- else sampleRate = maxu(sampleRate, MIN_OUTPUT_RATE);
+ else sampleRate = maxu(sampleRate, MinOutputRate);
}
#endif
diff --git a/alc/backends/pipewire.cpp b/alc/backends/pipewire.cpp
index 96b6623f..ca7e3cf3 100644
--- a/alc/backends/pipewire.cpp
+++ b/alc/backends/pipewire.cpp
@@ -831,7 +831,7 @@ void DeviceNode::parseSampleRate(const spa_pod *value, bool force_update) noexce
/* [0] is the default, [1] is the min, and [2] is the max. */
TRACE(" sample rate: %d (range: %d -> %d)\n", srates[0], srates[1], srates[2]);
if(!mSampleRate || force_update)
- mSampleRate = static_cast<uint>(clampi(srates[0], MIN_OUTPUT_RATE, MAX_OUTPUT_RATE));
+ mSampleRate = static_cast<uint>(clampi(srates[0], MinOutputRate, MaxOutputRate));
return;
}
@@ -857,7 +857,7 @@ void DeviceNode::parseSampleRate(const spa_pod *value, bool force_update) noexce
*/
for(const auto &rate : srates)
{
- if(rate >= MIN_OUTPUT_RATE && rate <= MAX_OUTPUT_RATE)
+ if(rate >= int{MinOutputRate} && rate <= int{MaxOutputRate})
{
if(!mSampleRate || force_update)
mSampleRate = static_cast<uint>(rate);
@@ -878,7 +878,7 @@ void DeviceNode::parseSampleRate(const spa_pod *value, bool force_update) noexce
TRACE(" sample rate: %d\n", srates[0]);
if(!mSampleRate || force_update)
- mSampleRate = static_cast<uint>(clampi(srates[0], MIN_OUTPUT_RATE, MAX_OUTPUT_RATE));
+ mSampleRate = static_cast<uint>(clampi(srates[0], MinOutputRate, MaxOutputRate));
return;
}
diff --git a/alc/context.cpp b/alc/context.cpp
index ffc2743e..4e962469 100644
--- a/alc/context.cpp
+++ b/alc/context.cpp
@@ -276,7 +276,7 @@ bool ALCcontext::deinit()
mDevice->mContexts.store(newarray);
if(oldarray != &DeviceBase::sEmptyContextArray)
{
- mDevice->waitForMix();
+ std::ignore = mDevice->waitForMix();
delete oldarray;
}
diff --git a/alc/effects/convolution.cpp b/alc/effects/convolution.cpp
index 517e6b08..8db7a045 100644
--- a/alc/effects/convolution.cpp
+++ b/alc/effects/convolution.cpp
@@ -218,8 +218,8 @@ struct ConvolutionState final : public EffectState {
alignas(16) FloatBufferLine mBuffer{};
float mHfScale{}, mLfScale{};
BandSplitter mFilter{};
- float Current[MAX_OUTPUT_CHANNELS]{};
- float Target[MAX_OUTPUT_CHANNELS]{};
+ std::array<float,MaxOutputChannels> Current{};
+ std::array<float,MaxOutputChannels> Target{};
};
std::vector<ChannelData> mChans;
al::vector<float,16> mComplexData;
@@ -246,8 +246,8 @@ void ConvolutionState::NormalMix(const al::span<FloatBufferLine> samplesOut,
const size_t samplesToDo)
{
for(auto &chan : mChans)
- MixSamples({chan.mBuffer.data(), samplesToDo}, samplesOut, chan.Current, chan.Target,
- samplesToDo, 0);
+ MixSamples({chan.mBuffer.data(), samplesToDo}, samplesOut, chan.Current.data(),
+ chan.Target.data(), samplesToDo, 0);
}
void ConvolutionState::UpsampleMix(const al::span<FloatBufferLine> samplesOut,
@@ -257,7 +257,7 @@ void ConvolutionState::UpsampleMix(const al::span<FloatBufferLine> samplesOut,
{
const al::span<float> src{chan.mBuffer.data(), samplesToDo};
chan.mFilter.processScale(src, chan.mHfScale, chan.mLfScale);
- MixSamples(src, samplesOut, chan.Current, chan.Target, samplesToDo, 0);
+ MixSamples(src, samplesOut, chan.Current.data(), chan.Target.data(), samplesToDo, 0);
}
}
diff --git a/alc/effects/dedicated.cpp b/alc/effects/dedicated.cpp
index a9131bfa..69e70847 100644
--- a/alc/effects/dedicated.cpp
+++ b/alc/effects/dedicated.cpp
@@ -47,8 +47,8 @@ struct DedicatedState final : public EffectState {
* gains for all possible output channels and not just the main ambisonic
* buffer.
*/
- float mCurrentGains[MAX_OUTPUT_CHANNELS];
- float mTargetGains[MAX_OUTPUT_CHANNELS];
+ std::array<float,MaxOutputChannels> mCurrentGains;
+ std::array<float,MaxOutputChannels> mTargetGains;
void deviceUpdate(const DeviceBase *device, const BufferStorage *buffer) override;
@@ -104,8 +104,8 @@ void DedicatedState::update(const ContextBase*, const EffectSlot *slot,
void DedicatedState::process(const size_t samplesToDo, const al::span<const FloatBufferLine> samplesIn, const al::span<FloatBufferLine> samplesOut)
{
- MixSamples({samplesIn[0].data(), samplesToDo}, samplesOut, mCurrentGains, mTargetGains,
- samplesToDo, 0);
+ MixSamples({samplesIn[0].data(), samplesToDo}, samplesOut, mCurrentGains.data(),
+ mTargetGains.data(), samplesToDo, 0);
}
diff --git a/alc/panning.cpp b/alc/panning.cpp
index b512a42a..93ebee73 100644
--- a/alc/panning.cpp
+++ b/alc/panning.cpp
@@ -249,7 +249,7 @@ void InitNearFieldCtrl(ALCdevice *device, float ctrl_dist, uint order, bool is3d
}
void InitDistanceComp(ALCdevice *device, const al::span<const Channel> channels,
- const al::span<const float,MAX_OUTPUT_CHANNELS> dists)
+ const al::span<const float,MaxOutputChannels> dists)
{
const float maxdist{std::accumulate(std::begin(dists), std::end(dists), 0.0f, maxf)};
@@ -329,7 +329,7 @@ constexpr auto GetAmbiLayout(DevAmbiLayout layouttype) noexcept
DecoderView MakeDecoderView(ALCdevice *device, const AmbDecConf *conf,
- DecoderConfig<DualBand, MAX_OUTPUT_CHANNELS> &decoder)
+ DecoderConfig<DualBand,MaxOutputChannels> &decoder)
{
DecoderView ret{};
@@ -969,9 +969,9 @@ void aluInitRenderer(ALCdevice *device, int hrtf_id, std::optional<StereoEncodin
break;
}
- std::unique_ptr<DecoderConfig<DualBand,MAX_OUTPUT_CHANNELS>> decoder_store;
+ std::unique_ptr<DecoderConfig<DualBand,MaxOutputChannels>> decoder_store;
DecoderView decoder{};
- float speakerdists[MAX_OUTPUT_CHANNELS]{};
+ std::array<float,MaxOutputChannels> speakerdists{};
auto load_config = [device,&decoder_store,&decoder,&speakerdists](const char *config)
{
AmbDecConf conf{};
@@ -981,10 +981,10 @@ void aluInitRenderer(ALCdevice *device, int hrtf_id, std::optional<StereoEncodin
ERR(" %s\n", err->c_str());
return false;
}
- else if(conf.NumSpeakers > MAX_OUTPUT_CHANNELS)
+ else if(conf.NumSpeakers > MaxOutputChannels)
{
- ERR("Unsupported decoder speaker count %zu (max %d)\n", conf.NumSpeakers,
- MAX_OUTPUT_CHANNELS);
+ ERR("Unsupported decoder speaker count %zu (max %zu)\n", conf.NumSpeakers,
+ MaxOutputChannels);
return false;
}
else if(conf.ChanMask > Ambi3OrderMask)
@@ -998,7 +998,7 @@ void aluInitRenderer(ALCdevice *device, int hrtf_id, std::optional<StereoEncodin
conf.Description.c_str());
device->mXOverFreq = clampf(conf.XOverFreq, 100.0f, 1000.0f);
- decoder_store = std::make_unique<DecoderConfig<DualBand,MAX_OUTPUT_CHANNELS>>();
+ decoder_store = std::make_unique<DecoderConfig<DualBand,MaxOutputChannels>>();
decoder = MakeDecoderView(device, &conf, *decoder_store);
for(size_t i{0};i < decoder.mChannels.size();++i)
speakerdists[i] = conf.Speakers[i].Distance;
diff --git a/common/ringbuffer.cpp b/common/ringbuffer.cpp
index af1f3669..0d3b7e30 100644
--- a/common/ringbuffer.cpp
+++ b/common/ringbuffer.cpp
@@ -24,7 +24,9 @@
#include <algorithm>
#include <climits>
+#include <limits>
#include <stdexcept>
+#include <stdint.h>
#include "almalloc.h"
@@ -40,7 +42,7 @@ RingBufferPtr RingBuffer::Create(std::size_t sz, std::size_t elem_sz, int limit_
power_of_two |= power_of_two>>4;
power_of_two |= power_of_two>>8;
power_of_two |= power_of_two>>16;
- if constexpr(SIZE_MAX > UINT_MAX)
+ if constexpr(std::numeric_limits<size_t>::max() > std::numeric_limits<int32_t>::max())
power_of_two |= power_of_two>>32;
}
++power_of_two;
diff --git a/core/bformatdec.cpp b/core/bformatdec.cpp
index a308e185..d6a44799 100644
--- a/core/bformatdec.cpp
+++ b/core/bformatdec.cpp
@@ -36,7 +36,7 @@ BFormatDec::BFormatDec(const size_t inchans, const al::span<const ChannelDec> co
auto &decoder = mChannelDec.emplace<std::vector<ChannelDecoderSingle>>(inchans);
for(size_t j{0};j < decoder.size();++j)
{
- float *outcoeffs{decoder[j].mGains};
+ float *outcoeffs{decoder[j].mGains.data()};
for(const ChannelDec &incoeffs : coeffs)
*(outcoeffs++) = incoeffs[j];
}
@@ -50,11 +50,11 @@ BFormatDec::BFormatDec(const size_t inchans, const al::span<const ChannelDec> co
for(size_t j{0};j < decoder.size();++j)
{
- float *outcoeffs{decoder[j].mGains[sHFBand]};
+ float *outcoeffs{decoder[j].mGains[sHFBand].data()};
for(const ChannelDec &incoeffs : coeffs)
*(outcoeffs++) = incoeffs[j];
- outcoeffs = decoder[j].mGains[sLFBand];
+ outcoeffs = decoder[j].mGains[sLFBand].data();
for(const ChannelDec &incoeffs : coeffslf)
*(outcoeffs++) = incoeffs[j];
}
@@ -76,8 +76,10 @@ void BFormatDec::process(const al::span<FloatBufferLine> OutBuffer,
{
chandec.mXOver.process({input->data(), SamplesToDo}, hfSamples.data(),
lfSamples.data());
- MixSamples(hfSamples, OutBuffer, chandec.mGains[sHFBand], chandec.mGains[sHFBand],0,0);
- MixSamples(lfSamples, OutBuffer, chandec.mGains[sLFBand], chandec.mGains[sLFBand],0,0);
+ MixSamples(hfSamples, OutBuffer, chandec.mGains[sHFBand].data(),
+ chandec.mGains[sHFBand].data(), 0, 0);
+ MixSamples(lfSamples, OutBuffer, chandec.mGains[sLFBand].data(),
+ chandec.mGains[sLFBand].data(), 0, 0);
++input;
}
};
@@ -86,8 +88,8 @@ void BFormatDec::process(const al::span<FloatBufferLine> OutBuffer,
auto *input = InSamples;
for(auto &chandec : decoder)
{
- MixSamples({input->data(), SamplesToDo}, OutBuffer, chandec.mGains, chandec.mGains,
- 0, 0);
+ MixSamples({input->data(), SamplesToDo}, OutBuffer, chandec.mGains.data(),
+ chandec.mGains.data(), 0, 0);
++input;
}
};
diff --git a/core/bformatdec.h b/core/bformatdec.h
index 3bb7f544..97e7c9e4 100644
--- a/core/bformatdec.h
+++ b/core/bformatdec.h
@@ -25,12 +25,12 @@ class BFormatDec {
static constexpr size_t sNumBands{2};
struct ChannelDecoderSingle {
- float mGains[MAX_OUTPUT_CHANNELS];
+ std::array<float,MaxOutputChannels> mGains;
};
struct ChannelDecoderDual {
BandSplitter mXOver;
- float mGains[sNumBands][MAX_OUTPUT_CHANNELS];
+ std::array<std::array<float,MaxOutputChannels>,sNumBands> mGains;
};
alignas(16) std::array<FloatBufferLine,2> mSamples;
@@ -44,7 +44,7 @@ public:
const al::span<const ChannelDec> coeffslf, const float xover_f0norm,
std::unique_ptr<FrontStablizer> stablizer);
- bool hasStablizer() const noexcept { return mStablizer != nullptr; }
+ [[nodiscard]] auto hasStablizer() const noexcept -> bool { return mStablizer != nullptr; }
/* Decodes the ambisonic input to the given output channels. */
void process(const al::span<FloatBufferLine> OutBuffer, const FloatBufferLine *InSamples,
diff --git a/core/buffer_storage.h b/core/buffer_storage.h
index 3b581b5e..dec774bf 100644
--- a/core/buffer_storage.h
+++ b/core/buffer_storage.h
@@ -98,19 +98,19 @@ struct BufferStorage {
AmbiScaling mAmbiScaling{AmbiScaling::FuMa};
uint mAmbiOrder{0u};
- inline uint bytesFromFmt() const noexcept { return BytesFromFmt(mType); }
- inline uint channelsFromFmt() const noexcept
+ [[nodiscard]] auto bytesFromFmt() const noexcept -> uint { return BytesFromFmt(mType); }
+ [[nodiscard]] auto channelsFromFmt() const noexcept -> uint
{ return ChannelsFromFmt(mChannels, mAmbiOrder); }
- inline uint frameSizeFromFmt() const noexcept { return channelsFromFmt() * bytesFromFmt(); }
+ [[nodiscard]] auto frameSizeFromFmt() const noexcept -> uint { return channelsFromFmt() * bytesFromFmt(); }
- inline uint blockSizeFromFmt() const noexcept
+ [[nodiscard]] auto blockSizeFromFmt() const noexcept -> uint
{
if(mType == FmtIMA4) return ((mBlockAlign-1)/2 + 4) * channelsFromFmt();
if(mType == FmtMSADPCM) return ((mBlockAlign-2)/2 + 7) * channelsFromFmt();
return frameSizeFromFmt();
};
- inline bool isBFormat() const noexcept { return IsBFormat(mChannels); }
+ [[nodiscard]] auto isBFormat() const noexcept -> bool { return IsBFormat(mChannels); }
};
#endif /* CORE_BUFFER_STORAGE_H */
diff --git a/core/context.cpp b/core/context.cpp
index 2ebbc7b1..bd7bb006 100644
--- a/core/context.cpp
+++ b/core/context.cpp
@@ -142,7 +142,7 @@ void ContextBase::allocVoices(size_t addcount)
if(auto *oldvoices = mVoices.exchange(newarray.release(), std::memory_order_acq_rel))
{
- mDevice->waitForMix();
+ std::ignore = mDevice->waitForMix();
delete oldvoices;
}
}
diff --git a/core/context.h b/core/context.h
index 6f65663f..fded0902 100644
--- a/core/context.h
+++ b/core/context.h
@@ -117,12 +117,12 @@ struct ContextBase {
std::atomic<size_t> mActiveVoiceCount{};
void allocVoices(size_t addcount);
- al::span<Voice*> getVoicesSpan() const noexcept
+ [[nodiscard]] auto getVoicesSpan() const noexcept -> al::span<Voice*>
{
return {mVoices.load(std::memory_order_relaxed)->data(),
mActiveVoiceCount.load(std::memory_order_relaxed)};
}
- al::span<Voice*> getVoicesSpanAcquired() const noexcept
+ [[nodiscard]] auto getVoicesSpanAcquired() const noexcept -> al::span<Voice*>
{
return {mVoices.load(std::memory_order_acquire)->data(),
mActiveVoiceCount.load(std::memory_order_acquire)};
diff --git a/core/devformat.h b/core/devformat.h
index 485826a3..d918e531 100644
--- a/core/devformat.h
+++ b/core/devformat.h
@@ -2,6 +2,7 @@
#define CORE_DEVFORMAT_H
#include <cstdint>
+#include <cstddef>
using uint = unsigned int;
@@ -71,7 +72,7 @@ enum DevFmtChannels : unsigned char {
DevFmtChannelsDefault = DevFmtStereo
};
-#define MAX_OUTPUT_CHANNELS 16
+inline constexpr size_t MaxOutputChannels{16};
/* DevFmtType traits, providing the type, etc given a DevFmtType. */
template<DevFmtType T>
diff --git a/core/device.h b/core/device.h
index 1ac01ba6..8cc15310 100644
--- a/core/device.h
+++ b/core/device.h
@@ -34,12 +34,12 @@ struct HrtfStore;
using uint = unsigned int;
-#define MIN_OUTPUT_RATE 8000
-#define MAX_OUTPUT_RATE 192000
-#define DEFAULT_OUTPUT_RATE 48000
+inline constexpr size_t MinOutputRate{8000};
+inline constexpr size_t MaxOutputRate{192000};
+inline constexpr size_t DefaultOutputRate{48000};
-#define DEFAULT_UPDATE_SIZE 960 /* 20ms */
-#define DEFAULT_NUM_UPDATES 3
+inline constexpr size_t DefaultUpdateSize{960}; /* 20ms */
+inline constexpr size_t DefaultNumUpdates{3};
enum class DeviceType : uint8_t {
@@ -82,7 +82,7 @@ struct DistanceComp {
float *Buffer{nullptr};
};
- std::array<ChanData,MAX_OUTPUT_CHANNELS> mChannels;
+ std::array<ChanData,MaxOutputChannels> mChannels;
al::FlexArray<float,16> mSamples;
DistanceComp(size_t count) : mSamples{count} { }
@@ -232,21 +232,21 @@ struct DeviceBase {
alignas(16) std::array<MixerBufferLine,MixerChannelsMax> mSampleData;
alignas(16) std::array<float,MixerLineSize+MaxResamplerPadding> mResampleData;
- alignas(16) float FilteredData[BufferLineSize];
+ alignas(16) std::array<float,BufferLineSize> FilteredData;
union {
- alignas(16) float HrtfSourceData[BufferLineSize + HrtfHistoryLength];
- alignas(16) float NfcSampleData[BufferLineSize];
+ alignas(16) std::array<float,BufferLineSize+HrtfHistoryLength> HrtfSourceData;
+ alignas(16) std::array<float,BufferLineSize> NfcSampleData;
};
/* Persistent storage for HRTF mixing. */
- alignas(16) float2 HrtfAccumData[BufferLineSize + HrirLength];
+ alignas(16) std::array<float2,BufferLineSize+HrirLength> HrtfAccumData;
/* Mixing buffer used by the Dry mix and Real output. */
al::vector<FloatBufferLine, 16> MixBuffer;
/* The "dry" path corresponds to the main output. */
MixParams Dry;
- uint NumChannelsPerOrder[MaxAmbiOrder+1]{};
+ std::array<uint,MaxAmbiOrder+1> NumChannelsPerOrder{};
/* "Real" output, which will be written to the device buffer. May alias the
* dry buffer.
@@ -295,9 +295,9 @@ struct DeviceBase {
DeviceBase& operator=(const DeviceBase&) = delete;
~DeviceBase();
- uint bytesFromFmt() const noexcept { return BytesFromDevFmt(FmtType); }
- uint channelsFromFmt() const noexcept { return ChannelsFromDevFmt(FmtChans, mAmbiOrder); }
- uint frameSizeFromFmt() const noexcept { return bytesFromFmt() * channelsFromFmt(); }
+ [[nodiscard]] auto bytesFromFmt() const noexcept -> uint { return BytesFromDevFmt(FmtType); }
+ [[nodiscard]] auto channelsFromFmt() const noexcept -> uint { return ChannelsFromDevFmt(FmtChans, mAmbiOrder); }
+ [[nodiscard]] auto frameSizeFromFmt() const noexcept -> uint { return bytesFromFmt() * channelsFromFmt(); }
struct MixLock {
std::atomic<uint> &mCount;
@@ -323,7 +323,7 @@ struct DeviceBase {
}
/** Waits for the mixer to not be mixing or updating the clock. */
- uint waitForMix() const noexcept
+ [[nodiscard]] auto waitForMix() const noexcept -> uint
{
uint refcount;
while((refcount=mMixCount.load(std::memory_order_acquire))&1) {
@@ -336,7 +336,7 @@ struct DeviceBase {
* SamplesDone converted from the sample rate. Should only be called while
* watching the MixCount.
*/
- std::chrono::nanoseconds getClockTime() const noexcept
+ [[nodiscard]] auto getClockTime() const noexcept -> std::chrono::nanoseconds
{
using std::chrono::seconds;
using std::chrono::nanoseconds;
@@ -369,7 +369,7 @@ struct DeviceBase {
* Returns the index for the given channel name (e.g. FrontCenter), or
* InvalidChannelIndex if it doesn't exist.
*/
- uint8_t channelIdxByName(Channel chan) const noexcept
+ [[nodiscard]] auto channelIdxByName(Channel chan) const noexcept -> uint8_t
{ return RealOut.ChannelIndex[chan]; }
DISABLE_ALLOC()
diff --git a/core/filters/biquad.h b/core/filters/biquad.h
index 75a4009b..e176caae 100644
--- a/core/filters/biquad.h
+++ b/core/filters/biquad.h
@@ -119,9 +119,9 @@ public:
void dualProcess(BiquadFilterR &other, const al::span<const Real> src, Real *dst);
/* Rather hacky. It's just here to support "manual" processing. */
- std::pair<Real,Real> getComponents() const noexcept { return {mZ1, mZ2}; }
+ [[nodiscard]] auto getComponents() const noexcept -> std::pair<Real,Real> { return {mZ1, mZ2}; }
void setComponents(Real z1, Real z2) noexcept { mZ1 = z1; mZ2 = z2; }
- Real processOne(const Real in, Real &z1, Real &z2) const noexcept
+ [[nodiscard]] auto processOne(const Real in, Real &z1, Real &z2) const noexcept -> Real
{
const Real out{in*mB0 + z1};
z1 = in*mB1 - out*mA1 + z2;
diff --git a/core/filters/nfc.h b/core/filters/nfc.h
index 4b8e68b5..7d0a7488 100644
--- a/core/filters/nfc.h
+++ b/core/filters/nfc.h
@@ -1,6 +1,7 @@
#ifndef CORE_FILTERS_NFC_H
#define CORE_FILTERS_NFC_H
+#include <array>
#include <cstddef>
#include "alspan.h"
@@ -9,22 +10,22 @@
struct NfcFilter1 {
float base_gain, gain;
float b1, a1;
- float z[1];
+ std::array<float,1> z;
};
struct NfcFilter2 {
float base_gain, gain;
float b1, b2, a1, a2;
- float z[2];
+ std::array<float,2> z;
};
struct NfcFilter3 {
float base_gain, gain;
float b1, b2, b3, a1, a2, a3;
- float z[3];
+ std::array<float,3> z;
};
struct NfcFilter4 {
float base_gain, gain;
float b1, b2, b3, b4, a1, a2, a3, a4;
- float z[4];
+ std::array<float,4> z;
};
class NfcFilter {
diff --git a/core/fmt_traits.cpp b/core/fmt_traits.cpp
index 054d8766..9d79287d 100644
--- a/core/fmt_traits.cpp
+++ b/core/fmt_traits.cpp
@@ -6,7 +6,7 @@
namespace al {
-const int16_t muLawDecompressionTable[256] = {
+const std::array<int16_t,256> muLawDecompressionTable{{
-32124,-31100,-30076,-29052,-28028,-27004,-25980,-24956,
-23932,-22908,-21884,-20860,-19836,-18812,-17788,-16764,
-15996,-15484,-14972,-14460,-13948,-13436,-12924,-12412,
@@ -39,9 +39,9 @@ const int16_t muLawDecompressionTable[256] = {
244, 228, 212, 196, 180, 164, 148, 132,
120, 112, 104, 96, 88, 80, 72, 64,
56, 48, 40, 32, 24, 16, 8, 0
-};
+}};
-const int16_t aLawDecompressionTable[256] = {
+const std::array<int16_t,256> aLawDecompressionTable{{
-5504, -5248, -6016, -5760, -4480, -4224, -4992, -4736,
-7552, -7296, -8064, -7808, -6528, -6272, -7040, -6784,
-2752, -2624, -3008, -2880, -2240, -2112, -2496, -2368,
@@ -74,6 +74,6 @@ const int16_t aLawDecompressionTable[256] = {
1888, 1824, 2016, 1952, 1632, 1568, 1760, 1696,
688, 656, 752, 720, 560, 528, 624, 592,
944, 912, 1008, 976, 816, 784, 880, 848
-};
+}};
} // namespace al
diff --git a/core/fmt_traits.h b/core/fmt_traits.h
index 02473014..101e20b6 100644
--- a/core/fmt_traits.h
+++ b/core/fmt_traits.h
@@ -1,6 +1,7 @@
#ifndef CORE_FMT_TRAITS_H
#define CORE_FMT_TRAITS_H
+#include <array>
#include <cstddef>
#include <stdint.h>
@@ -9,8 +10,8 @@
namespace al {
-extern const int16_t muLawDecompressionTable[256];
-extern const int16_t aLawDecompressionTable[256];
+extern const std::array<int16_t,256> muLawDecompressionTable;
+extern const std::array<int16_t,256> aLawDecompressionTable;
template<FmtType T>
diff --git a/core/mixer/defs.h b/core/mixer/defs.h
index 48daca9b..6e68978c 100644
--- a/core/mixer/defs.h
+++ b/core/mixer/defs.h
@@ -94,7 +94,8 @@ void MixDirectHrtf_(const FloatBufferSpan LeftOut, const FloatBufferSpan RightOu
/* Vectorized resampler helpers */
template<size_t N>
-inline void InitPosArrays(uint frac, uint increment, uint (&frac_arr)[N], uint (&pos_arr)[N])
+inline void InitPosArrays(uint frac, uint increment, const al::span<uint,N> frac_arr,
+ const al::span<uint,N> pos_arr)
{
pos_arr[0] = 0;
frac_arr[0] = frac;
diff --git a/core/mixer/mixer_neon.cpp b/core/mixer/mixer_neon.cpp
index ead775af..f838b20d 100644
--- a/core/mixer/mixer_neon.cpp
+++ b/core/mixer/mixer_neon.cpp
@@ -149,7 +149,7 @@ void Resample_<LerpTag,NEONTag>(const InterpState*, const float *RESTRICT src, u
alignas(16) uint pos_[4], frac_[4];
int32x4_t pos4, frac4;
- InitPosArrays(frac, increment, frac_, pos_);
+ InitPosArrays(frac, increment, al::span{frac_}, al::span{pos_});
frac4 = vld1q_s32(reinterpret_cast<int*>(frac_));
pos4 = vld1q_s32(reinterpret_cast<int*>(pos_));
diff --git a/core/mixer/mixer_sse2.cpp b/core/mixer/mixer_sse2.cpp
index edaaf7a1..aa99250e 100644
--- a/core/mixer/mixer_sse2.cpp
+++ b/core/mixer/mixer_sse2.cpp
@@ -45,7 +45,7 @@ void Resample_<LerpTag,SSE2Tag>(const InterpState*, const float *RESTRICT src, u
const __m128i fracMask4{_mm_set1_epi32(MixerFracMask)};
alignas(16) uint pos_[4], frac_[4];
- InitPosArrays(frac, increment, frac_, pos_);
+ InitPosArrays(frac, increment, al::span{frac_}, al::span{pos_});
__m128i frac4{_mm_setr_epi32(static_cast<int>(frac_[0]), static_cast<int>(frac_[1]),
static_cast<int>(frac_[2]), static_cast<int>(frac_[3]))};
__m128i pos4{_mm_setr_epi32(static_cast<int>(pos_[0]), static_cast<int>(pos_[1]),
diff --git a/core/mixer/mixer_sse41.cpp b/core/mixer/mixer_sse41.cpp
index 8ccd9fd3..4e4605df 100644
--- a/core/mixer/mixer_sse41.cpp
+++ b/core/mixer/mixer_sse41.cpp
@@ -46,7 +46,7 @@ void Resample_<LerpTag,SSE4Tag>(const InterpState*, const float *RESTRICT src, u
const __m128i fracMask4{_mm_set1_epi32(MixerFracMask)};
alignas(16) uint pos_[4], frac_[4];
- InitPosArrays(frac, increment, frac_, pos_);
+ InitPosArrays(frac, increment, al::span{frac_}, al::span{pos_});
__m128i frac4{_mm_setr_epi32(static_cast<int>(frac_[0]), static_cast<int>(frac_[1]),
static_cast<int>(frac_[2]), static_cast<int>(frac_[3]))};
__m128i pos4{_mm_setr_epi32(static_cast<int>(pos_[0]), static_cast<int>(pos_[1]),
diff --git a/core/uhjfilter.h b/core/uhjfilter.h
index 348dc7e1..29838410 100644
--- a/core/uhjfilter.h
+++ b/core/uhjfilter.h
@@ -25,7 +25,7 @@ extern UhjQualityType UhjEncodeQuality;
struct UhjAllPassFilter {
struct AllPassState {
/* Last two delayed components for direct form II. */
- float z[2];
+ std::array<float,2> z;
};
std::array<AllPassState,4> mState;
diff --git a/core/voice.cpp b/core/voice.cpp
index 3889c42d..d2645b7f 100644
--- a/core/voice.cpp
+++ b/core/voice.cpp
@@ -9,11 +9,11 @@
#include <cassert>
#include <climits>
#include <cstdint>
+#include <cstdlib>
#include <iterator>
#include <memory>
#include <new>
#include <optional>
-#include <stdlib.h>
#include <utility>
#include <vector>
@@ -133,18 +133,18 @@ void Voice::InitMixer(std::optional<std::string> resampler)
if(resampler)
{
struct ResamplerEntry {
- const char name[16];
+ const char *name;
const Resampler resampler;
};
- constexpr ResamplerEntry ResamplerList[]{
- { "none", Resampler::Point },
- { "point", Resampler::Point },
- { "linear", Resampler::Linear },
- { "cubic", Resampler::Cubic },
- { "bsinc12", Resampler::BSinc12 },
- { "fast_bsinc12", Resampler::FastBSinc12 },
- { "bsinc24", Resampler::BSinc24 },
- { "fast_bsinc24", Resampler::FastBSinc24 },
+ constexpr std::array ResamplerList{
+ ResamplerEntry{"none", Resampler::Point},
+ ResamplerEntry{"point", Resampler::Point},
+ ResamplerEntry{"linear", Resampler::Linear},
+ ResamplerEntry{"cubic", Resampler::Cubic},
+ ResamplerEntry{"bsinc12", Resampler::BSinc12},
+ ResamplerEntry{"fast_bsinc12", Resampler::FastBSinc12},
+ ResamplerEntry{"bsinc24", Resampler::BSinc24},
+ ResamplerEntry{"fast_bsinc24", Resampler::FastBSinc24},
};
const char *str{resampler->c_str()};
@@ -159,10 +159,10 @@ void Voice::InitMixer(std::optional<std::string> resampler)
str = "cubic";
}
- auto iter = std::find_if(std::begin(ResamplerList), std::end(ResamplerList),
+ auto iter = std::find_if(ResamplerList.begin(), ResamplerList.end(),
[str](const ResamplerEntry &entry) -> bool
{ return al::strcasecmp(str, entry.name) == 0; });
- if(iter == std::end(ResamplerList))
+ if(iter == ResamplerList.end())
ERR("Invalid resampler: %s\n", str);
else
ResamplerDefault = iter->resampler;
@@ -178,7 +178,7 @@ void Voice::InitMixer(std::optional<std::string> resampler)
namespace {
/* IMA ADPCM Stepsize table */
-constexpr int IMAStep_size[89] = {
+constexpr std::array<int,89> IMAStep_size{{
7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 19,
21, 23, 25, 28, 31, 34, 37, 41, 45, 50, 55,
60, 66, 73, 80, 88, 97, 107, 118, 130, 143, 157,
@@ -188,35 +188,35 @@ constexpr int IMAStep_size[89] = {
4026, 4428, 4871, 5358, 5894, 6484, 7132, 7845, 8630, 9493,10442,
11487,12635,13899,15289,16818,18500,20350,22358,24633,27086,29794,
32767
-};
+}};
/* IMA4 ADPCM Codeword decode table */
-constexpr int IMA4Codeword[16] = {
+constexpr std::array<int,16> IMA4Codeword{{
1, 3, 5, 7, 9, 11, 13, 15,
-1,-3,-5,-7,-9,-11,-13,-15,
-};
+}};
/* IMA4 ADPCM Step index adjust decode table */
-constexpr int IMA4Index_adjust[16] = {
+constexpr std::array<int,16>IMA4Index_adjust{{
-1,-1,-1,-1, 2, 4, 6, 8,
-1,-1,-1,-1, 2, 4, 6, 8
-};
+}};
/* MSADPCM Adaption table */
-constexpr int MSADPCMAdaption[16] = {
+constexpr std::array<int,16> MSADPCMAdaption{{
230, 230, 230, 230, 307, 409, 512, 614,
768, 614, 512, 409, 307, 230, 230, 230
-};
+}};
/* MSADPCM Adaption Coefficient tables */
-constexpr int MSADPCMAdaptionCoeff[7][2] = {
- { 256, 0 },
- { 512, -256 },
- { 0, 0 },
- { 192, 64 },
- { 240, 0 },
- { 460, -208 },
- { 392, -232 }
+constexpr std::array MSADPCMAdaptionCoeff{
+ std::array{256, 0},
+ std::array{512, -256},
+ std::array{ 0, 0},
+ std::array{192, 64},
+ std::array{240, 0},
+ std::array{460, -208},
+ std::array{392, -232}
};
@@ -307,7 +307,7 @@ inline void LoadSamples<FmtIMA4>(float *RESTRICT dstSamples, const std::byte *sr
auto decode_sample = [&sample,&index](const uint nibble)
{
- sample += IMA4Codeword[nibble] * IMAStep_size[index] / 8;
+ sample += IMA4Codeword[nibble] * IMAStep_size[static_cast<uint>(index)] / 8;
sample = clampi(sample, -32768, 32767);
index += IMA4Index_adjust[nibble];
@@ -382,7 +382,7 @@ inline void LoadSamples<FmtMSADPCM>(float *RESTRICT dstSamples, const std::byte
int delta{int(input[2*srcChan + 0]) | (int(input[2*srcChan + 1]) << 8)};
input += srcStep*2;
- int sampleHistory[2]{};
+ std::array<int,2> sampleHistory{};
sampleHistory[0] = int(input[2*srcChan + 0]) | (int(input[2*srcChan + 1])<<8);
input += srcStep*2;
sampleHistory[1] = int(input[2*srcChan + 0]) | (int(input[2*srcChan + 1])<<8);
@@ -421,7 +421,7 @@ inline void LoadSamples<FmtMSADPCM>(float *RESTRICT dstSamples, const std::byte
sampleHistory[1] = sampleHistory[0];
sampleHistory[0] = pred;
- delta = (MSADPCMAdaption[nibble] * delta) / 256;
+ delta = (MSADPCMAdaption[static_cast<uint>(nibble)] * delta) / 256;
delta = maxi(16, delta);
return pred;
@@ -630,8 +630,8 @@ void DoHrtfMix(const float *samples, const uint DstBufferSize, DirectParams &par
parms.Hrtf.Target.Coeffs,
parms.Hrtf.Target.Delay,
0.0f, gain / static_cast<float>(fademix)};
- MixHrtfBlendSamples(HrtfSamples, AccumSamples+OutPos, IrSize, &parms.Hrtf.Old, &hrtfparams,
- fademix);
+ MixHrtfBlendSamples(HrtfSamples.data(), AccumSamples.data()+OutPos, IrSize,
+ &parms.Hrtf.Old, &hrtfparams, fademix);
/* Update the old parameters with the result. */
parms.Hrtf.Old = parms.Hrtf.Target;
@@ -658,7 +658,8 @@ void DoHrtfMix(const float *samples, const uint DstBufferSize, DirectParams &par
parms.Hrtf.Target.Delay,
parms.Hrtf.Old.Gain,
(gain - parms.Hrtf.Old.Gain) / static_cast<float>(todo)};
- MixHrtfSamples(HrtfSamples+fademix, AccumSamples+OutPos, IrSize, &hrtfparams, todo);
+ MixHrtfSamples(HrtfSamples.data()+fademix, AccumSamples.data()+OutPos, IrSize, &hrtfparams,
+ todo);
/* Store the now-current gain for next time. */
parms.Hrtf.Old.Gain = gain;
@@ -669,8 +670,8 @@ void DoNfcMix(const al::span<const float> samples, FloatBufferLine *OutBuffer, D
const float *TargetGains, const uint Counter, const uint OutPos, DeviceBase *Device)
{
using FilterProc = void (NfcFilter::*)(const al::span<const float>, float*);
- static constexpr FilterProc NfcProcess[MaxAmbiOrder+1]{
- nullptr, &NfcFilter::process1, &NfcFilter::process2, &NfcFilter::process3};
+ static constexpr std::array<FilterProc,MaxAmbiOrder+1> NfcProcess{{
+ nullptr, &NfcFilter::process1, &NfcFilter::process2, &NfcFilter::process3}};
float *CurrentGains{parms.Gains.Current.data()};
MixSamples(samples, {OutBuffer, 1u}, CurrentGains, TargetGains, Counter, OutPos);
@@ -678,7 +679,7 @@ void DoNfcMix(const al::span<const float> samples, FloatBufferLine *OutBuffer, D
++CurrentGains;
++TargetGains;
- const al::span<float> nfcsamples{Device->NfcSampleData, samples.size()};
+ const al::span<float> nfcsamples{Device->NfcSampleData.data(), samples.size()};
size_t order{1};
while(const size_t chancount{Device->NumChannelsPerOrder[order]})
{
@@ -697,7 +698,7 @@ void DoNfcMix(const al::span<const float> samples, FloatBufferLine *OutBuffer, D
void Voice::mix(const State vstate, ContextBase *Context, const nanoseconds deviceTime,
const uint SamplesToDo)
{
- static constexpr std::array<float,MAX_OUTPUT_CHANNELS> SilentTarget{};
+ static constexpr std::array<float,MaxOutputChannels> SilentTarget{};
ASSUME(SamplesToDo > 0);
diff --git a/core/voice.h b/core/voice.h
index a599eda8..6c953804 100644
--- a/core/voice.h
+++ b/core/voice.h
@@ -32,7 +32,7 @@ enum class DistanceModel : unsigned char;
using uint = unsigned int;
-#define MAX_SENDS 6
+inline constexpr size_t MaxSendCount{6};
enum class SpatializeMode : unsigned char {
@@ -72,8 +72,8 @@ struct DirectParams {
} Hrtf;
struct {
- std::array<float,MAX_OUTPUT_CHANNELS> Current;
- std::array<float,MAX_OUTPUT_CHANNELS> Target;
+ std::array<float,MaxOutputChannels> Current;
+ std::array<float,MaxOutputChannels> Target;
} Gains;
};
@@ -154,7 +154,8 @@ struct VoiceProps {
float HFReference;
float GainLF;
float LFReference;
- } Send[MAX_SENDS];
+ };
+ std::array<SendData,MaxSendCount> Send;
};
struct VoicePropsItem : public VoiceProps {
@@ -239,7 +240,7 @@ struct Voice {
al::span<FloatBufferLine> Buffer;
};
TargetData mDirect;
- std::array<TargetData,MAX_SENDS> mSend;
+ std::array<TargetData,MaxSendCount> mSend;
/* The first MaxResamplerPadding/2 elements are the sample history from the
* previous mix, with an additional MaxResamplerPadding/2 elements that are
@@ -254,7 +255,7 @@ struct Voice {
BandSplitter mAmbiSplitter;
DirectParams mDryParams;
- std::array<SendParams,MAX_SENDS> mWetParams;
+ std::array<SendParams,MaxSendCount> mWetParams;
};
al::vector<ChannelData> mChans{2};