Combine some checks

master
Chris Robinson 2021-06-14 01:51:04 -07:00
parent 9c58ed73d3
commit 2f16fc190f
1 changed files with 23 additions and 22 deletions

View File

@ -557,28 +557,6 @@ void Voice::mix(const State vstate, ContextBase *Context, const uint SamplesToDo
}
}
if((mFlags&(VoiceIsCallback|VoiceCallbackStopped)) == VoiceIsCallback && BufferListItem)
{
if(SrcBufferSize > mNumCallbackSamples)
{
const size_t byteOffset{mNumCallbackSamples*mFrameSize};
const size_t needBytes{SrcBufferSize*mFrameSize - byteOffset};
const int gotBytes{BufferListItem->mCallback(BufferListItem->mUserData,
&BufferListItem->mSamples[byteOffset], static_cast<int>(needBytes))};
if(gotBytes < 0)
mFlags |= VoiceCallbackStopped;
else if(static_cast<uint>(gotBytes) < needBytes)
{
mFlags |= VoiceCallbackStopped;
mNumCallbackSamples += static_cast<uint>(static_cast<uint>(gotBytes) /
mFrameSize);
}
else
mNumCallbackSamples = SrcBufferSize;
}
}
if UNLIKELY(!BufferListItem)
{
for(auto &chanbuffer : mVoiceSamples)
@ -604,8 +582,31 @@ void Voice::mix(const State vstate, ContextBase *Context, const uint SamplesToDo
LoadBufferStatic(BufferListItem, BufferLoopItem, DataPosInt, mFmtType, mFmtChannels,
SrcBufferSize, mVoiceSamples);
else if((mFlags&VoiceIsCallback))
{
if(!(mFlags&VoiceCallbackStopped))
{
if(SrcBufferSize > mNumCallbackSamples)
{
const size_t byteOffset{mNumCallbackSamples*mFrameSize};
const size_t needBytes{SrcBufferSize*mFrameSize - byteOffset};
const int gotBytes{BufferListItem->mCallback(BufferListItem->mUserData,
&BufferListItem->mSamples[byteOffset], static_cast<int>(needBytes))};
if(gotBytes < 0)
mFlags |= VoiceCallbackStopped;
else if(static_cast<uint>(gotBytes) < needBytes)
{
mFlags |= VoiceCallbackStopped;
mNumCallbackSamples += static_cast<uint>(static_cast<uint>(gotBytes) /
mFrameSize);
}
else
mNumCallbackSamples = SrcBufferSize;
}
}
LoadBufferCallback(BufferListItem, mNumCallbackSamples, mFmtType, mFmtChannels,
SrcBufferSize, mVoiceSamples);
}
else
LoadBufferQueue(BufferListItem, BufferLoopItem, DataPosInt, mFmtType, mFmtChannels,
SrcBufferSize, mVoiceSamples);