mirror of
https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
synced 2025-11-04 13:29:59 -05:00
convert to double only once, and make sure we can deal with negative results of -y
This commit is contained in:
parent
eab1cb8df9
commit
dcbb7f2680
1 changed files with 9 additions and 4 deletions
|
|
@ -295,24 +295,29 @@ static void estimate(pa_smoother *s, pa_usec_t x, pa_usec_t *y, double *deriv) {
|
|||
*deriv = s->dp;
|
||||
|
||||
} else {
|
||||
double tx, ty;
|
||||
|
||||
/* Ok, we're not yet on track, thus let's interpolate, and
|
||||
* make sure that the first derivative is smooth */
|
||||
|
||||
calc_abc(s);
|
||||
|
||||
tx = (double) x;
|
||||
|
||||
/* Move to origin */
|
||||
x -= s->ex;
|
||||
tx -= (double) s->ex;
|
||||
|
||||
/* Horner scheme */
|
||||
*y = (pa_usec_t) ((double) x * (s->c + (double) x * (s->b + (double) x * s->a)));
|
||||
ty = (tx * (s->c + tx * (s->b + tx * s->a)));
|
||||
|
||||
/* Move back from origin */
|
||||
*y += s->ey;
|
||||
ty += (double) s->ey;
|
||||
|
||||
*y = ty >= 0 ? (pa_usec_t) ty : 0;
|
||||
|
||||
/* Horner scheme */
|
||||
if (deriv)
|
||||
*deriv = s->c + ((double) x * (s->b*2 + (double) x * s->a*3));
|
||||
*deriv = s->c + (tx * (s->b*2 + tx * s->a*3));
|
||||
}
|
||||
|
||||
/* Guarantee monotonicity */
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue