void pa_smoother_put(pa_smoother *s, pa_usec_t x, pa_usec_t y) { pa_usec_t ney; double nde; pa_assert(s); pa_assert(x >= s->time_offset); /* Fix up x value */ if (s->paused) x = s->pause_time; pa_assert(x >= s->time_offset); x -= s->time_offset; pa_assert(x >= s->ex); /* First, we calculate the position we'd estimate for x, so that * we can adjust our position smoothly from this one */ estimate(s, x, &ney, &nde); s->ex = x; s->ey = ney; s->de = nde; /* Then, we add the new measurement to our history */ add_to_history(s, x, y); /* And determine the average gradient of the history */ s->dp = avg_gradient(s, x); /* And calculate when we want to be on track again */ s->px = x + s->adjust_time; s->py = y + s->dp *s->adjust_time; s->abc_valid = FALSE; }
void pa_smoother_put(pa_smoother *s, uint64_t x, uint64_t y) { uint64_t ney; double nde; bool is_new; pa_assert(s); /* Fix up x value */ if (s->paused) x = s->pause_time; x = PA_LIKELY(x >= s->time_offset) ? x - s->time_offset : 0; is_new = x >= s->ex; if (is_new) { /* First, we calculate the position we'd estimate for x, so that * we can adjust our position smoothly from this one */ estimate(s, x, &ney, &nde); s->ex = x; s->ey = ney; s->de = nde; s->ry = y; } /* Then, we add the new measurement to our history */ add_to_history(s, x, y); /* And determine the average gradient of the history */ s->dp = avg_gradient(s, x); /* And calculate when we want to be on track again */ if (s->smoothing) { s->px = s->ex + s->adjust_time; s->py = s->ry + (uint64_t) llrint(s->dp * (double) s->adjust_time); } else { s->px = s->ex; s->py = s->ry; } s->abc_valid = false; #ifdef DEBUG_DATA pa_log_debug("%p, put(%llu | %llu) = %llu", s, (unsigned long long) (x + s->time_offset), (unsigned long long) x, (unsigned long long) y); #endif }