diff --git a/al/buffer.cpp b/al/buffer.cpp index 524fb81c..10849a0a 100644 --- a/al/buffer.cpp +++ b/al/buffer.cpp @@ -554,8 +554,8 @@ void LoadData(ALCcontext *context, ALbuffer *ALBuf, ALsizei freq, ALuint size, ALBuf->mBuffer.mUserData = nullptr; ALBuf->mBuffer.mSampleLen = frames; - ALBuf->LoopStart = 0; - ALBuf->LoopEnd = ALBuf->mBuffer.mSampleLen; + ALBuf->mBuffer.mLoopStart = 0; + ALBuf->mBuffer.mLoopEnd = ALBuf->mBuffer.mSampleLen; } /** Prepares the buffer to use the specified callback, using the specified format. */ @@ -620,8 +620,8 @@ void PrepareCallback(ALCcontext *context, ALbuffer *ALBuf, ALsizei freq, ALBuf->mBuffer.mAmbiOrder = ambiorder; ALBuf->mBuffer.mSampleLen = 0; - ALBuf->LoopStart = 0; - ALBuf->LoopEnd = ALBuf->mBuffer.mSampleLen; + ALBuf->mBuffer.mLoopStart = 0; + ALBuf->mBuffer.mLoopEnd = ALBuf->mBuffer.mSampleLen; } @@ -1262,8 +1262,8 @@ START_API_FUNC values[0], values[1], buffer); else { - albuf->LoopStart = static_cast(values[0]); - albuf->LoopEnd = static_cast(values[1]); + albuf->mBuffer.mLoopStart = static_cast(values[0]); + albuf->mBuffer.mLoopEnd = static_cast(values[1]); } break; @@ -1457,8 +1457,8 @@ START_API_FUNC else switch(param) { case AL_LOOP_POINTS_SOFT: - values[0] = static_cast(albuf->LoopStart); - values[1] = static_cast(albuf->LoopEnd); + values[0] = static_cast(albuf->mBuffer.mLoopStart); + values[1] = static_cast(albuf->mBuffer.mLoopEnd); break; default: diff --git a/al/buffer.h b/al/buffer.h index bdc87e07..6b5c48ab 100644 --- a/al/buffer.h +++ b/al/buffer.h @@ -47,9 +47,6 @@ struct ALbuffer { ALuint OriginalSize{0}; ALuint OriginalAlign{0}; - ALuint LoopStart{0u}; - ALuint LoopEnd{0u}; - ALuint UnpackAlign{0}; ALuint PackAlign{0}; ALuint UnpackAmbiOrder{1}; diff --git a/alc/buffer_storage.h b/alc/buffer_storage.h index 4a5b8b5c..6b1f1ba3 100644 --- a/alc/buffer_storage.h +++ b/alc/buffer_storage.h @@ -61,6 +61,9 @@ struct BufferStorage { AmbiScaling mAmbiScaling{AmbiScaling::FuMa}; ALuint mAmbiOrder{0u}; + ALuint mLoopStart{0u}; + ALuint mLoopEnd{0u}; + inline ALuint bytesFromFmt() const noexcept { return BytesFromFmt(mType); } inline ALuint channelsFromFmt() const noexcept { return ChannelsFromFmt(mChannels, mAmbiOrder); } diff --git a/alc/voice.cpp b/alc/voice.cpp index 44c6b7fa..671f8fff 100644 --- a/alc/voice.cpp +++ b/alc/voice.cpp @@ -245,9 +245,9 @@ float *LoadBufferStatic(ALbufferlistitem *BufferListItem, ALbufferlistitem *&Buf const size_t NumChannels, const size_t SampleSize, const size_t chan, size_t DataPosInt, al::span SrcBuffer) { - const ALbuffer *Buffer{BufferListItem->mBuffer}; - const ALuint LoopStart{Buffer->LoopStart}; - const ALuint LoopEnd{Buffer->LoopEnd}; + const BufferStorage &Buffer = BufferListItem->mBuffer->mBuffer; + const ALuint LoopStart{Buffer.mLoopStart}; + const ALuint LoopEnd{Buffer.mLoopEnd}; ASSUME(LoopEnd > LoopStart); /* If current pos is beyond the loop range, do not loop */ @@ -256,12 +256,12 @@ float *LoadBufferStatic(ALbufferlistitem *BufferListItem, ALbufferlistitem *&Buf BufferLoopItem = nullptr; /* Load what's left to play from the buffer */ - const size_t DataRem{minz(SrcBuffer.size(), Buffer->mBuffer.mSampleLen-DataPosInt)}; + const size_t DataRem{minz(SrcBuffer.size(), Buffer.mSampleLen-DataPosInt)}; - const al::byte *Data{Buffer->mBuffer.mData.data()}; + const al::byte *Data{Buffer.mData.data()}; Data += (DataPosInt*NumChannels + chan)*SampleSize; - LoadSamples(SrcBuffer.data(), Data, NumChannels, Buffer->mBuffer.mType, DataRem); + LoadSamples(SrcBuffer.data(), Data, NumChannels, Buffer.mType, DataRem); SrcBuffer = SrcBuffer.subspan(DataRem); } else @@ -269,10 +269,10 @@ float *LoadBufferStatic(ALbufferlistitem *BufferListItem, ALbufferlistitem *&Buf /* Load what's left of this loop iteration */ const size_t DataRem{minz(SrcBuffer.size(), LoopEnd-DataPosInt)}; - const al::byte *Data{Buffer->mBuffer.mData.data()}; + const al::byte *Data{Buffer.mData.data()}; Data += (DataPosInt*NumChannels + chan)*SampleSize; - LoadSamples(SrcBuffer.data(), Data, NumChannels, Buffer->mBuffer.mType, DataRem); + LoadSamples(SrcBuffer.data(), Data, NumChannels, Buffer.mType, DataRem); SrcBuffer = SrcBuffer.subspan(DataRem); /* Load any repeats of the loop we can to fill the buffer. */ @@ -281,9 +281,9 @@ float *LoadBufferStatic(ALbufferlistitem *BufferListItem, ALbufferlistitem *&Buf { const size_t DataSize{minz(SrcBuffer.size(), LoopSize)}; - Data = Buffer->mBuffer.mData.data() + (LoopStart*NumChannels + chan)*SampleSize; + Data = Buffer.mData.data() + (LoopStart*NumChannels + chan)*SampleSize; - LoadSamples(SrcBuffer.data(), Data, NumChannels, Buffer->mBuffer.mType, DataSize); + LoadSamples(SrcBuffer.data(), Data, NumChannels, Buffer.mType, DataSize); SrcBuffer = SrcBuffer.subspan(DataSize); } } @@ -294,14 +294,14 @@ float *LoadBufferCallback(ALbufferlistitem *BufferListItem, const size_t NumChan const size_t SampleSize, const size_t chan, size_t NumCallbackSamples, al::span SrcBuffer) { - const ALbuffer *Buffer{BufferListItem->mBuffer}; + const BufferStorage &Buffer = BufferListItem->mBuffer->mBuffer; /* Load what's left to play from the buffer */ const size_t DataRem{minz(SrcBuffer.size(), NumCallbackSamples)}; - const al::byte *Data{Buffer->mBuffer.mData.data() + chan*SampleSize}; + const al::byte *Data{Buffer.mData.data() + chan*SampleSize}; - LoadSamples(SrcBuffer.data(), Data, NumChannels, Buffer->mBuffer.mType, DataRem); + LoadSamples(SrcBuffer.data(), Data, NumChannels, Buffer.mType, DataRem); SrcBuffer = SrcBuffer.subspan(DataRem); return SrcBuffer.begin(); @@ -701,9 +701,9 @@ void Voice::mix(const State vstate, ALCcontext *Context, const ALuint SamplesToD if(BufferLoopItem) { /* Handle looping static source */ - const ALbuffer *Buffer{BufferListItem->mBuffer}; - const ALuint LoopStart{Buffer->LoopStart}; - const ALuint LoopEnd{Buffer->LoopEnd}; + const BufferStorage &Buffer = BufferListItem->mBuffer->mBuffer; + const ALuint LoopStart{Buffer.mLoopStart}; + const ALuint LoopEnd{Buffer.mLoopEnd}; if(DataPosInt >= LoopEnd) { assert(LoopEnd > LoopStart); @@ -722,12 +722,12 @@ void Voice::mix(const State vstate, ALCcontext *Context, const ALuint SamplesToD } else if((mFlags&VoiceIsCallback)) { - ALbuffer *buffer{BufferListItem->mBuffer}; + BufferStorage &buffer = BufferListItem->mBuffer->mBuffer; if(SrcSamplesDone < mNumCallbackSamples) { const size_t byteOffset{SrcSamplesDone*FrameSize}; const size_t byteEnd{mNumCallbackSamples*FrameSize}; - al::byte *data{buffer->mBuffer.mData.data()}; + al::byte *data{buffer.mData.data()}; std::copy(data+byteOffset, data+byteEnd, data); mNumCallbackSamples -= SrcSamplesDone; }