diff --git a/Alc/alu.cpp b/Alc/alu.cpp index 30d2e73c..0ee0275a 100644 --- a/Alc/alu.cpp +++ b/Alc/alu.cpp @@ -1451,12 +1451,12 @@ void ProcessContext(ALCcontext *ctx, const ALsizei SamplesToDo) std::for_each(ctx->Voices, ctx->Voices+ctx->VoiceCount.load(std::memory_order_acquire), [SamplesToDo,ctx](ALvoice *voice) -> void { - if(voice->mPlayState.load(std::memory_order_acquire) == ALvoice::Stopped) - return; - ALuint sid{voice->mSourceID.load(std::memory_order_relaxed)}; + const ALvoice::State vstate{voice->mPlayState.load(std::memory_order_acquire)}; + if(vstate == ALvoice::Stopped) return; + const ALuint sid{voice->mSourceID.load(std::memory_order_relaxed)}; if(voice->mStep < 1) return; - MixSource(voice, sid, ctx, SamplesToDo); + MixVoice(voice, vstate, sid, ctx, SamplesToDo); } ); diff --git a/Alc/mixvoice.cpp b/Alc/mixvoice.cpp index c2b2791b..3e4cd1d2 100644 --- a/Alc/mixvoice.cpp +++ b/Alc/mixvoice.cpp @@ -442,14 +442,13 @@ ALsizei LoadBufferQueue(ALbufferlistitem *BufferListItem, ALbufferlistitem *Buff } // namespace -void MixSource(ALvoice *voice, const ALuint SourceID, ALCcontext *Context, const ALsizei SamplesToDo) +void MixVoice(ALvoice *voice, ALvoice::State vstate, const ALuint SourceID, ALCcontext *Context, const ALsizei SamplesToDo) { static constexpr ALfloat SilentTarget[MAX_OUTPUT_CHANNELS]{}; ASSUME(SamplesToDo > 0); - /* Get source info */ - ALvoice::State vstate{voice->mPlayState.load(std::memory_order_acquire)}; + /* Get voice info */ const bool isstatic{(voice->mFlags&VOICE_IS_STATIC) != 0}; ALsizei DataPosInt{static_cast(voice->mPosition.load(std::memory_order_relaxed))}; ALsizei DataPosFrac{voice->mPositionFrac.load(std::memory_order_relaxed)}; @@ -822,7 +821,7 @@ void MixSource(ALvoice *voice, const ALuint SourceID, ALCcontext *Context, const return; } - /* Update source info */ + /* Update voice info */ voice->mPosition.store(DataPosInt, std::memory_order_relaxed); voice->mPositionFrac.store(DataPosFrac, std::memory_order_relaxed); voice->mCurrentBuffer.store(BufferListItem, std::memory_order_relaxed); diff --git a/OpenAL32/Include/alu.h b/OpenAL32/Include/alu.h index 1de184cb..952d1004 100644 --- a/OpenAL32/Include/alu.h +++ b/OpenAL32/Include/alu.h @@ -446,7 +446,7 @@ inline std::array GetAmbiIdentityRow(size_t i) noexce } -void MixSource(ALvoice *voice, const ALuint SourceID, ALCcontext *Context, const ALsizei SamplesToDo); +void MixVoice(ALvoice *voice, ALvoice::State vstate, const ALuint SourceID, ALCcontext *Context, const ALsizei SamplesToDo); void aluMixData(ALCdevice *device, ALvoid *OutBuffer, ALsizei NumSamples); /* Caller must lock the device state, and the mixer must not be running. */