From 595dc0ab5ba83a74bda74014e70d1507ef287fc0 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Tue, 9 Jul 2019 16:54:52 +0200 Subject: [PATCH] resample: fix phase calculation --- spa/plugins/audioconvert/resample-native-impl.h | 2 +- spa/plugins/audioconvert/resample-native.h | 14 ++++++++------ 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/spa/plugins/audioconvert/resample-native-impl.h b/spa/plugins/audioconvert/resample-native-impl.h index 422905ab6..27e012efd 100644 --- a/spa/plugins/audioconvert/resample-native-impl.h +++ b/spa/plugins/audioconvert/resample-native-impl.h @@ -97,7 +97,7 @@ DEFINE_RESAMPLER(full,arch) \ const float *s = src[c]; \ float *d = dst[c]; \ \ - index = 0; \ + index = 0; \ phase = data->phase; \ \ for (o = offs; o < olen && index + n_taps <= ilen; o++) { \ diff --git a/spa/plugins/audioconvert/resample-native.h b/spa/plugins/audioconvert/resample-native.h index f13a39535..2af26871d 100644 --- a/spa/plugins/audioconvert/resample-native.h +++ b/spa/plugins/audioconvert/resample-native.h @@ -100,19 +100,21 @@ static void impl_native_update_rate(struct resample *r, double rate) out_rate = r->o_rate; phase = data->phase; - spa_log_trace_fp(r->log, "native %p: new rate:%f", r, rate); - gcd = calc_gcd(in_rate, out_rate); - gcd = calc_gcd(gcd, phase); + in_rate /= gcd; + out_rate /= gcd; data->rate = rate; - data->phase = phase / gcd; - data->in_rate = in_rate / gcd; - data->out_rate = out_rate / gcd; + data->phase = phase * out_rate / data->out_rate; + data->in_rate = in_rate; + data->out_rate = out_rate; data->inc = data->in_rate / data->out_rate; data->frac = data->in_rate % data->out_rate; + spa_log_trace_fp(r->log, "native %p: rate:%f in:%d out:%d phase:%d inc:%d frac:%d", r, + rate, data->in_rate, data->out_rate, data->phase, data->inc, data->frac); + if (data->in_rate == data->out_rate) data->func = do_resample_copy_c; else {