On Tue, Aug 04, 2015 at 10:48:19AM +0800, Jonas Ådahl wrote:
> On Tue, Aug 04, 2015 at 10:05:10AM +1000, Peter Hutterer wrote:
> > Everything in libinput is in µs now, make it clear that this is all in ms.
> > 
> > Signed-off-by: Peter Hutterer <[email protected]>
> > ---
> 
> We also have the "speed" in the profiles that are in units/ms but not
> named accordingly. Also wonder why we have both "speed" and "velocity",
> especially since we pass the velocity to a profile function, and then
> the profile function calls it speed.
> 

heh, after googling what the difference between speed and velocity is, the
current usage actually appears to be correct.

from the first hit:
http://www.physicsclassroom.com/class/1DKin/Lesson-1/Speed-and-Velocity
"Speed is a scalar quantity and does not keep track of direction; velocity is
a vector quantity and is direction aware."

and we do calculate velocity based on the directions of the input data,
whereas the acceleration profiles just take a speed and multiply that.
so I guess we should leave it as-is to be correct, I'll just append the ms.

Cheers,
   Peter



> >  src/filter.c | 64 
> > ++++++++++++++++++++++++++++++------------------------------
> >  src/filter.h |  2 +-
> >  2 files changed, 33 insertions(+), 33 deletions(-)
> > 
> > diff --git a/src/filter.c b/src/filter.c
> > index 2506ee2..d9eb61d 100644
> > --- a/src/filter.c
> > +++ b/src/filter.c
> > @@ -85,7 +85,7 @@ filter_get_speed(struct motion_filter *filter)
> >   * Pointer acceleration filter constants
> >   */
> >  
> > -#define MAX_VELOCITY_DIFF  1 /* units/ms */
> > +#define MAX_VELOCITY_DIFF_MS       1 /* units/ms */
> >  #define MOTION_TIMEOUT             ms2us(1000)
> >  #define NUM_POINTER_TRACKERS       16
> >  
> > @@ -101,8 +101,8 @@ struct pointer_accelerator {
> >  
> >     accel_profile_func_t profile;
> >  
> > -   double velocity;        /* units/ms */
> > -   double last_velocity;   /* units/ms */
> > +   double velocity_ms;     /* units/ms */
> > +   double last_velocity_ms;/* units/ms */
> >     struct normalized_coords last;
> >  
> >     struct pointer_tracker *trackers;
> > @@ -147,14 +147,14 @@ tracker_by_offset(struct pointer_accelerator *accel, 
> > unsigned int offset)
> >  }
> >  
> >  static double
> > -calculate_tracker_velocity(struct pointer_tracker *tracker, uint64_t time)
> > +calculate_tracker_velocity_ms(struct pointer_tracker *tracker, uint64_t 
> > time)
> >  {
> >     double tdelta = time - tracker->time + 1;
> >     return normalized_length(tracker->delta) / tdelta * 1000.0; /* units/ms 
> > */
> >  }
> >  
> >  static inline double
> > -calculate_velocity_after_timeout(struct pointer_tracker *tracker)
> > +calculate_velocity_ms_after_timeout(struct pointer_tracker *tracker)
> >  {
> >     /* First movement after timeout needs special handling.
> >      *
> > @@ -167,18 +167,18 @@ calculate_velocity_after_timeout(struct 
> > pointer_tracker *tracker)
> >      * for really slow movements but provides much more useful initial
> >      * movement in normal use-cases (pause, move, pause, move)
> >      */
> > -   return calculate_tracker_velocity(tracker,
> > -                                     tracker->time + MOTION_TIMEOUT);
> > +   return calculate_tracker_velocity_ms(tracker,
> > +                                        tracker->time + MOTION_TIMEOUT);
> >  }
> >  
> >  static double
> > -calculate_velocity(struct pointer_accelerator *accel, uint64_t time)
> > +calculate_velocity_ms(struct pointer_accelerator *accel, uint64_t time)
> >  {
> >     struct pointer_tracker *tracker;
> > -   double velocity;
> > +   double velocity_ms;
> >     double result = 0.0;
> > -   double initial_velocity = 0.0;
> > -   double velocity_diff;
> > +   double initial_velocity_ms = 0.0;
> > +   double velocity_diff_ms;
> >     unsigned int offset;
> >  
> >     unsigned int dir = tracker_by_offset(accel, 0)->dir;
> > @@ -192,11 +192,11 @@ calculate_velocity(struct pointer_accelerator *accel, 
> > uint64_t time)
> >             if (time - tracker->time > MOTION_TIMEOUT ||
> >                 tracker->time > time) {
> >                     if (offset == 1)
> > -                           result = 
> > calculate_velocity_after_timeout(tracker);
> > +                           result = 
> > calculate_velocity_ms_after_timeout(tracker);
> >                     break;
> >             }
> >  
> > -           velocity = calculate_tracker_velocity(tracker, time);
> > +           velocity_ms = calculate_tracker_velocity_ms(tracker, time);
> >  
> >             /* Stop if direction changed */
> >             dir &= tracker->dir;
> > @@ -204,19 +204,19 @@ calculate_velocity(struct pointer_accelerator *accel, 
> > uint64_t time)
> >                     /* First movement after dirchange - velocity is that
> >                      * of the last movement */
> >                     if (offset == 1)
> > -                           result = velocity;
> > +                           result = velocity_ms;
> >                     break;
> >             }
> >  
> > -           if (initial_velocity == 0.0) {
> > -                   result = initial_velocity = velocity;
> > +           if (initial_velocity_ms == 0.0) {
> > +                   result = initial_velocity_ms = velocity_ms;
> >             } else {
> >                     /* Stop if velocity differs too much from initial */
> > -                   velocity_diff = fabs(initial_velocity - velocity);
> > -                   if (velocity_diff > MAX_VELOCITY_DIFF)
> > +                   velocity_diff_ms = fabs(initial_velocity_ms - 
> > velocity_ms);
> > +                   if (velocity_diff_ms > MAX_VELOCITY_DIFF_MS)
> >                             break;
> >  
> > -                   result = velocity;
> > +                   result = velocity_ms;
> >             }
> >     }
> >  
> > @@ -225,27 +225,27 @@ calculate_velocity(struct pointer_accelerator *accel, 
> > uint64_t time)
> >  
> >  static double
> >  acceleration_profile(struct pointer_accelerator *accel,
> > -                void *data, double velocity, uint64_t time)
> > +                void *data, double velocity_ms, uint64_t time)
> >  {
> > -   return accel->profile(&accel->base, data, velocity, time);
> > +   return accel->profile(&accel->base, data, velocity_ms, time);
> >  }
> >  
> >  static double
> >  calculate_acceleration(struct pointer_accelerator *accel,
> >                    void *data,
> > -                  double velocity,
> > -                  double last_velocity,
> > +                  double velocity_ms,
> > +                  double last_velocity_ms,
> >                    uint64_t time)
> >  {
> >     double factor;
> >  
> >     /* Use Simpson's rule to calculate the avarage acceleration between
> >      * the previous motion and the most recent. */
> > -   factor = acceleration_profile(accel, data, velocity, time);
> > -   factor += acceleration_profile(accel, data, last_velocity, time);
> > +   factor = acceleration_profile(accel, data, velocity_ms, time);
> > +   factor += acceleration_profile(accel, data, last_velocity_ms, time);
> >     factor += 4.0 *
> >             acceleration_profile(accel, data,
> > -                                (last_velocity + velocity) / 2,
> > +                                (last_velocity_ms + velocity_ms) / 2,
> >                                  time);
> >  
> >     factor = factor / 6.0;
> > @@ -260,7 +260,7 @@ accelerator_filter(struct motion_filter *filter,
> >  {
> >     struct pointer_accelerator *accel =
> >             (struct pointer_accelerator *) filter;
> > -   double velocity; /* units/ms */
> > +   double velocity_ms; /* units/ms */
> >     double accel_value; /* unitless factor */
> >     struct normalized_coords accelerated;
> >     struct normalized_coords unnormalized;
> > @@ -273,11 +273,11 @@ accelerator_filter(struct motion_filter *filter,
> >     unnormalized.y = unaccelerated->y * dpi_factor;
> >  
> >     feed_trackers(accel, &unnormalized, time);
> > -   velocity = calculate_velocity(accel, time);
> > +   velocity_ms = calculate_velocity_ms(accel, time);
> >     accel_value = calculate_acceleration(accel,
> >                                          data,
> > -                                        velocity,
> > -                                        accel->last_velocity,
> > +                                        velocity_ms,
> > +                                        accel->last_velocity_ms,
> >                                          time);
> >  
> >     accelerated.x = accel_value * unnormalized.x;
> > @@ -285,7 +285,7 @@ accelerator_filter(struct motion_filter *filter,
> >  
> >     accel->last = unnormalized;
> >  
> > -   accel->last_velocity = velocity;
> > +   accel->last_velocity_ms = velocity_ms;
> >  
> >     return accelerated;
> >  }
> > @@ -367,7 +367,7 @@ create_pointer_accelerator_filter(accel_profile_func_t 
> > profile,
> >     filter->base.interface = &accelerator_interface;
> >  
> >     filter->profile = profile;
> > -   filter->last_velocity = 0.0;
> > +   filter->last_velocity_ms = 0.0;
> >     filter->last.x = 0;
> >     filter->last.y = 0;
> >  
> > diff --git a/src/filter.h b/src/filter.h
> > index 617fab1..0480aea 100644
> > --- a/src/filter.h
> > +++ b/src/filter.h
> > @@ -54,7 +54,7 @@ filter_get_speed(struct motion_filter *filter);
> >  
> >  typedef double (*accel_profile_func_t)(struct motion_filter *filter,
> >                                    void *data,
> > -                                  double velocity,
> > +                                  double velocity_ms,
> >                                    uint64_t time);
> >  
> >  struct motion_filter *
> > -- 
> > 2.4.3
> > 
> > _______________________________________________
> > wayland-devel mailing list
> > [email protected]
> > http://lists.freedesktop.org/mailman/listinfo/wayland-devel
_______________________________________________
wayland-devel mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to