aboutsummaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorChris Robinson <[email protected]>2021-12-23 13:43:10 -0800
committerChris Robinson <[email protected]>2021-12-23 13:43:10 -0800
commitf1aa10ff0b710d6647f7ce728de5a8d0e5b8a45f (patch)
tree018c601ddda961c41676d156b31b27b6277d9019 /core
parent0af1b5f7218cf60e3a51f43903f3c5461cdcbdf8 (diff)
Use a bitset instead of a plain uint for flags
Diffstat (limited to 'core')
-rw-r--r--core/voice.cpp32
-rw-r--r--core/voice.h21
2 files changed, 29 insertions, 24 deletions
diff --git a/core/voice.cpp b/core/voice.cpp
index 1eb804ac..924a8446 100644
--- a/core/voice.cpp
+++ b/core/voice.cpp
@@ -482,7 +482,7 @@ void Voice::mix(const State vstate, ContextBase *Context, const uint SamplesToDo
ResamplerFunc Resample{(increment == MixerFracOne && DataPosFrac == 0) ?
Resample_<CopyTag,CTag> : mResampler};
- uint Counter{(mFlags&VoiceIsFading) ? SamplesToDo : 0};
+ uint Counter{mFlags.test(VoiceIsFading) ? SamplesToDo : 0};
if(!Counter)
{
/* No fading, just overwrite the old/current params. */
@@ -490,7 +490,7 @@ void Voice::mix(const State vstate, ContextBase *Context, const uint SamplesToDo
{
{
DirectParams &parms = chandata.mDryParams;
- if(!(mFlags&VoiceHasHrtf))
+ if(!mFlags.test(VoiceHasHrtf))
parms.Gains.Current = parms.Gains.Target;
else
parms.Hrtf.Old = parms.Hrtf.Target;
@@ -592,12 +592,12 @@ void Voice::mix(const State vstate, ContextBase *Context, const uint SamplesToDo
std::copy_n(prevSamples->data(), MaxResamplerEdge, chanbuffer.data());
++prevSamples;
}
- if((mFlags&VoiceIsStatic))
+ if(mFlags.test(VoiceIsStatic))
LoadBufferStatic(BufferListItem, BufferLoopItem, DataPosInt, mFmtType,
mFmtChannels, mFrameStep, SrcBufferSize, MixingSamples);
- else if((mFlags&VoiceIsCallback))
+ else if(mFlags.test(VoiceIsCallback))
{
- if(!(mFlags&VoiceCallbackStopped))
+ if(!mFlags.test(VoiceCallbackStopped))
{
if(SrcBufferSize > mNumCallbackSamples)
{
@@ -607,10 +607,10 @@ void Voice::mix(const State vstate, ContextBase *Context, const uint SamplesToDo
const int gotBytes{BufferListItem->mCallback(BufferListItem->mUserData,
&BufferListItem->mSamples[byteOffset], static_cast<int>(needBytes))};
if(gotBytes < 0)
- mFlags |= VoiceCallbackStopped;
+ mFlags.set(VoiceCallbackStopped);
else if(static_cast<uint>(gotBytes) < needBytes)
{
- mFlags |= VoiceCallbackStopped;
+ mFlags.set(VoiceCallbackStopped);
mNumCallbackSamples += static_cast<uint>(static_cast<uint>(gotBytes) /
mFrameSize);
}
@@ -650,7 +650,7 @@ void Voice::mix(const State vstate, ContextBase *Context, const uint SamplesToDo
voiceSamples->data() + MaxResamplerEdge, DataPosFrac, increment,
{Device->ResampledData, DstBufferSize})};
++voiceSamples;
- if((mFlags&VoiceIsAmbisonic))
+ if(mFlags.test(VoiceIsAmbisonic))
chandata.mAmbiSplitter.processScale({ResampledData, DstBufferSize},
chandata.mAmbiHFScale, chandata.mAmbiLFScale);
@@ -661,7 +661,7 @@ void Voice::mix(const State vstate, ContextBase *Context, const uint SamplesToDo
const float *samples{DoFilters(parms.LowPass, parms.HighPass, FilterBuf.data(),
{ResampledData, DstBufferSize}, mDirect.FilterType)};
- if((mFlags&VoiceHasHrtf))
+ if(mFlags.test(VoiceHasHrtf))
{
const float TargetGain{parms.Hrtf.Target.Gain * likely(vstate == Playing)};
DoHrtfMix(samples, DstBufferSize, parms, TargetGain, Counter, OutPos,
@@ -671,7 +671,7 @@ void Voice::mix(const State vstate, ContextBase *Context, const uint SamplesToDo
{
const float *TargetGains{likely(vstate == Playing) ? parms.Gains.Target.data()
: SilentTarget.data()};
- if((mFlags&VoiceHasNfc))
+ if(mFlags.test(VoiceHasNfc))
DoNfcMix({samples, DstBufferSize}, mDirect.Buffer.data(), parms,
TargetGains, Counter, OutPos, Device);
else
@@ -708,7 +708,7 @@ void Voice::mix(const State vstate, ContextBase *Context, const uint SamplesToDo
{
/* Do nothing extra when there's no buffers. */
}
- else if((mFlags&VoiceIsStatic))
+ else if(mFlags.test(VoiceIsStatic))
{
if(BufferLoopItem)
{
@@ -731,7 +731,7 @@ void Voice::mix(const State vstate, ContextBase *Context, const uint SamplesToDo
}
}
}
- else if((mFlags&VoiceIsCallback))
+ else if(mFlags.test(VoiceIsCallback))
{
/* Don't use up the stored callback samples when stopping (pausing)
* since they'll be replayed when resuming.
@@ -769,7 +769,7 @@ void Voice::mix(const State vstate, ContextBase *Context, const uint SamplesToDo
}
} while(OutPos < SamplesToDo && likely(vstate == Playing));
- mFlags |= VoiceIsFading;
+ mFlags.set(VoiceIsFading);
/* Don't update positions and buffers if we were stopping. */
if(unlikely(vstate == Stopping))
@@ -898,7 +898,7 @@ void Voice::prepare(DeviceBase *device)
mChans[1].mAmbiLFScale = 1.293f;
mChans[2].mAmbiLFScale = 1.293f;
}
- mFlags |= VoiceIsAmbisonic;
+ mFlags.set(VoiceIsAmbisonic);
}
else if(mFmtChannels == FmtUHJ2 && !device->mUhjEncoder)
{
@@ -919,7 +919,7 @@ void Voice::prepare(DeviceBase *device)
mChans[0].mAmbiLFScale = 0.661f;
mChans[1].mAmbiLFScale = 1.293f;
mChans[2].mAmbiLFScale = 1.293f;
- mFlags |= VoiceIsAmbisonic;
+ mFlags.set(VoiceIsAmbisonic);
}
else
{
@@ -929,6 +929,6 @@ void Voice::prepare(DeviceBase *device)
chandata.mDryParams.NFCtrlFilter = device->mNFCtrlFilter;
std::fill_n(chandata.mWetParams.begin(), device->NumAuxSends, SendParams{});
}
- mFlags &= ~VoiceIsAmbisonic;
+ mFlags.reset(VoiceIsAmbisonic);
}
}
diff --git a/core/voice.h b/core/voice.h
index d7168fb9..70b80841 100644
--- a/core/voice.h
+++ b/core/voice.h
@@ -3,6 +3,7 @@
#include <array>
#include <atomic>
+#include <bitset>
#include <memory>
#include <stddef.h>
#include <string>
@@ -164,13 +165,17 @@ struct VoicePropsItem : public VoiceProps {
DEF_NEWDEL(VoicePropsItem)
};
-constexpr uint VoiceIsStatic{ 1u<<0};
-constexpr uint VoiceIsCallback{ 1u<<1};
-constexpr uint VoiceIsAmbisonic{ 1u<<2}; /* Needs HF scaling for ambisonic upsampling. */
-constexpr uint VoiceCallbackStopped{1u<<3};
-constexpr uint VoiceIsFading{ 1u<<4}; /* Use gain stepping for smooth transitions. */
-constexpr uint VoiceHasHrtf{ 1u<<5};
-constexpr uint VoiceHasNfc{ 1u<<6};
+enum : uint {
+ VoiceIsStatic,
+ VoiceIsCallback,
+ VoiceIsAmbisonic,
+ VoiceCallbackStopped,
+ VoiceIsFading,
+ VoiceHasHrtf,
+ VoiceHasNfc,
+
+ VoiceFlagCount
+};
struct Voice {
enum State {
@@ -224,7 +229,7 @@ struct Voice {
InterpState mResampleState;
- uint mFlags{};
+ std::bitset<VoiceFlagCount> mFlags{};
uint mNumCallbackSamples{0};
struct TargetData {