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]; \
float *d = dst[c]; \
\
index = 0; \
index = 0; \
phase = data->phase; \
\
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;
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 {