mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-10-29 05:40:27 -04:00
resample: fix phase calculation
This commit is contained in:
parent
a3c0bb0e9a
commit
595dc0ab5b
2 changed files with 9 additions and 7 deletions
|
|
@ -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++) { \
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue