Skip to content

Commit

Permalink
Prevent app crash when miniaudio samples bigger than capacity
Browse files Browse the repository at this point in the history
  • Loading branch information
jonian committed Sep 7, 2024
1 parent f1b7830 commit be3613d
Showing 1 changed file with 3 additions and 2 deletions.
5 changes: 3 additions & 2 deletions src/core/audio/miniaudio_device.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -90,16 +90,17 @@ void MiniAudioDevice::init(Samples& samples, bool safe) {
deviceConfig.dataCallback = [](ma_device* device, void* out, const void* input, ma_uint32 frameCount) {
auto self = reinterpret_cast<MiniAudioDevice*>(device->pUserData);
s16* output = reinterpret_cast<ma_int16*>(out);
usize maxSamples = std::min(self->samples->Capacity(), (usize)(frameCount * channelCount));

// Wait until there's enough samples to pop
while (self->samples->size() < frameCount * channelCount) {
while (self->samples->size() < maxSamples) {
// If audio output is disabled from the emulator thread, make sure that this callback will return and not hang
if (!self->running) {
return;
}
}

self->samples->pop(output, frameCount * channelCount);
self->samples->pop(output, maxSamples);
};

if (ma_device_init(&context, &deviceConfig, &device) != MA_SUCCESS) {
Expand Down

0 comments on commit be3613d

Please sign in to comment.