resample: fix phase calculation

This commit is contained in:
Wim Taymans 2019-07-09 16:54:52 +02:00
parent a3c0bb0e9a
commit 595dc0ab5b
2 changed files with 9 additions and 7 deletions

View file

@ -97,7 +97,7 @@ DEFINE_RESAMPLER(full,arch) \
const float *s = src[c]; \ const float *s = src[c]; \
float *d = dst[c]; \ float *d = dst[c]; \
\ \
index = 0; \ index = 0; \
phase = data->phase; \ phase = data->phase; \
\ \
for (o = offs; o < olen && index + n_taps <= ilen; o++) { \ for (o = offs; o < olen && index + n_taps <= ilen; o++) { \

View file

@ -100,19 +100,21 @@ static void impl_native_update_rate(struct resample *r, double rate)
out_rate = r->o_rate; out_rate = r->o_rate;
phase = data->phase; 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(in_rate, out_rate);
gcd = calc_gcd(gcd, phase); in_rate /= gcd;
out_rate /= gcd;
data->rate = rate; data->rate = rate;
data->phase = phase / gcd; data->phase = phase * out_rate / data->out_rate;
data->in_rate = in_rate / gcd; data->in_rate = in_rate;
data->out_rate = out_rate / gcd; data->out_rate = out_rate;
data->inc = data->in_rate / data->out_rate; data->inc = data->in_rate / data->out_rate;
data->frac = 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) if (data->in_rate == data->out_rate)
data->func = do_resample_copy_c; data->func = do_resample_copy_c;
else { else {