From 34713f40d1a611222f682bf278f5cd9d587638a6 Mon Sep 17 00:00:00 2001 From: Themaister Date: Mon, 15 Oct 2012 22:53:05 +0200 Subject: [PATCH] Fix spurious segfaults when ratio dips below 1. --- audio/sinc.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/audio/sinc.c b/audio/sinc.c index 62e1640c75..0498ab01af 100644 --- a/audio/sinc.c +++ b/audio/sinc.c @@ -239,12 +239,7 @@ void resampler_process(rarch_resampler_t *re, struct resampler_data *data) while (frames) { - process_sinc(re, output); - output += 2; - out_frames++; - - re->time += ratio; - while (re->time >= PHASES_WRAP) + while (frames && re->time >= PHASES_WRAP) { re->buffer_l[re->ptr + TAPS] = re->buffer_l[re->ptr] = *input++; re->buffer_r[re->ptr + TAPS] = re->buffer_r[re->ptr] = *input++; @@ -253,6 +248,15 @@ void resampler_process(rarch_resampler_t *re, struct resampler_data *data) re->time -= PHASES_WRAP; frames--; } + + if (re->time >= PHASES_WRAP) + break; + + process_sinc(re, output); + output += 2; + out_frames++; + + re->time += ratio; } data->output_frames = out_frames;