diff --git a/spa/plugins/audioconvert/resample-native-impl.h b/spa/plugins/audioconvert/resample-native-impl.h index 6bb5ffc51..ddc5833c7 100644 --- a/spa/plugins/audioconvert/resample-native-impl.h +++ b/spa/plugins/audioconvert/resample-native-impl.h @@ -29,7 +29,7 @@ struct native_data { uint32_t n_phases; uint32_t in_rate; uint32_t out_rate; - uint32_t phase; + float phase; uint32_t inc; uint32_t frac; uint32_t filter_stride; @@ -117,11 +117,12 @@ DEFINE_RESAMPLER(full,arch) \ DEFINE_RESAMPLER(inter,arch) \ { \ struct native_data *data = r->data; \ - uint32_t index, phase, stride = data->filter_stride; \ + uint32_t index, stride = data->filter_stride; \ uint32_t n_phases = data->n_phases, out_rate = data->out_rate; \ uint32_t n_taps = data->n_taps; \ uint32_t c, o, olen = *out_len, ilen = *in_len; \ uint32_t inc = data->inc, frac = data->frac; \ + float phase; \ \ if (r->channels == 0) \ return; \ @@ -134,7 +135,7 @@ DEFINE_RESAMPLER(inter,arch) \ phase = data->phase; \ \ for (o = ooffs; o < olen && index + n_taps <= ilen; o++) { \ - float ph = (float)phase * n_phases / out_rate; \ + float ph = phase * n_phases / out_rate; \ uint32_t offset = floorf(ph); \ inner_product_ip_##arch(&d[o], &s[index], \ &data->filter[(offset + 0) * stride], \ diff --git a/spa/plugins/audioconvert/resample-native.c b/spa/plugins/audioconvert/resample-native.c index 9ed929f37..2d8e25080 100644 --- a/spa/plugins/audioconvert/resample-native.c +++ b/spa/plugins/audioconvert/resample-native.c @@ -134,7 +134,8 @@ static inline uint32_t calc_gcd(uint32_t a, uint32_t b) static void impl_native_update_rate(struct resample *r, double rate) { struct native_data *data = r->data; - uint32_t in_rate, out_rate, phase, gcd, old_out_rate; + uint32_t in_rate, out_rate, gcd, old_out_rate; + float phase; if (SPA_LIKELY(data->rate == rate)) return; @@ -149,7 +150,7 @@ static void impl_native_update_rate(struct resample *r, double rate) out_rate /= gcd; data->rate = rate; - data->phase = phase * out_rate / old_out_rate; + data->phase = phase * out_rate / (float)old_out_rate; data->in_rate = in_rate; data->out_rate = out_rate;