From 2481d25f0fbb7aaef651ef020162fbda6018a024 Mon Sep 17 00:00:00 2001 From: Andre Leiradella Date: Tue, 28 Feb 2017 14:48:20 +0000 Subject: [PATCH] Fix resampler->process overriding memory because we don't know exactly how much memory it needss --- audio/audio_mixer.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/audio/audio_mixer.c b/audio/audio_mixer.c index 053cfe4324..1df24432d5 100644 --- a/audio/audio_mixer.c +++ b/audio/audio_mixer.c @@ -195,8 +195,15 @@ static bool one_shot_resample(const float* in, size_t samples_in, if (!retro_resampler_realloc(&data, &resampler, NULL, ratio)) return false; - /* Allocate on a 16-byte boundary, and pad to a multiple of 16 bytes */ - *samples_out = samples_in * ratio; + /* + * Allocate on a 16-byte boundary, and pad to a multiple of 16 bytes. We + * add four more samples in the formula below just as safeguard, because + * resampler->process sometimes reports more output samples than the + * formula below calculates. Ideally, audio resamplers should have a + * function to return the number of samples they will output given a + * count of input samples. + */ + *samples_out = samples_in * ratio + 4; *out = (float*)memalign_alloc(16, ((*samples_out + 15) & ~15) * sizeof(float));