Clean up the spaghetti mess in alcCaptureSamples

This commit is contained in:
Chris Robinson
2019-09-15 13:42:56 -07:00
parent a999df8ce5
commit 35129d66b7
+19 -7
View File
@@ -3907,14 +3907,26 @@ START_API_FUNC
return;
}
ALCenum err{ALC_INVALID_VALUE};
{ std::lock_guard<std::mutex> _{dev->StateLock};
BackendBase *backend{dev->Backend.get()};
if(samples >= 0 && backend->availableSamples() >= static_cast<ALCuint>(samples))
err = backend->captureSamples(static_cast<al::byte*>(buffer),
static_cast<ALuint>(samples));
if(samples < 0 || (samples > 0 && buffer == nullptr))
{
alcSetError(dev.get(), ALC_INVALID_VALUE);
return;
}
if(err != ALC_NO_ERROR)
if(samples < 1)
return;
std::lock_guard<std::mutex> _{dev->StateLock};
BackendBase *backend{dev->Backend.get()};
const auto usamples = static_cast<ALCuint>(samples);
if(usamples > backend->availableSamples())
{
alcSetError(dev.get(), ALC_INVALID_VALUE);
return;
}
auto *bbuffer = static_cast<al::byte*>(buffer);
if(ALCenum err{backend->captureSamples(bbuffer, usamples)})
alcSetError(dev.get(), err);
}
END_API_FUNC