On Sun, 2016-06-05 at 21:05 +0200, Georg Chini wrote: > @@ -337,6 +338,8 @@ static void adjust_rates(struct userdata *u) { > u->next_latency_with_drift = current_latency; > > } else { > + /* Low pass filtered latency error. This value reflects how well the > measured values match the prediction. */ > + u->latency_error = (1 - FILTER_PARAMETER) * u->latency_error + > FILTER_PARAMETER * (double)abs((int32_t)(current_latency - > u->next_latency_with_drift));
The (int32_t) cast should be applied to the individual terms rather than to the result of the substraction. > /* Called from main context */ > @@ -627,6 +634,7 @@ static void source_output_detach_cb(pa_source_output *o) { > u->iteration_counter = 0; > u->underrun_counter = 0; > u->extra_latency = 0; > + u->latency_error = 0; u->latency_error should be set from the main thread ... except that the main thread is waiting when detach() is called, so actually this is safe. I may have had some incorrect complaints about those other variables too. -- Tanu _______________________________________________ pulseaudio-discuss mailing list pulseaudio-discuss@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/pulseaudio-discuss