filter: Ignore non-suitable trackers when calculating initial velocity
authorJonas Ådahl <jadahl@gmail.com>
Sat, 24 May 2014 19:49:13 +0000 (21:49 +0200)
committerJonas Ådahl <jadahl@gmail.com>
Thu, 29 May 2014 11:06:42 +0000 (13:06 +0200)
calculate_velocity() didn't skip pointer trackers far away in time when
calculating the initial velocity. This check was done later when
iterating the rest, so while at it, simplify the function by doing both
iterations in one single loop.

Signed-off-by: Jonas Ådahl <jadahl@gmail.com>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
src/filter.c

index df4d60a4b7a8441b8e9431af006bb59e8ab234ef..3221d1939554dfa9ac7819fb424be7539583fa31 100644 (file)
@@ -183,28 +183,15 @@ calculate_velocity(struct pointer_accelerator *accel, uint64_t time)
        struct pointer_tracker *tracker;
        double velocity;
        double result = 0.0;
-       double initial_velocity;
+       double initial_velocity = 0.0;
        double velocity_diff;
        unsigned int offset;
 
        unsigned int dir = tracker_by_offset(accel, 0)->dir;
 
-       /* Find first velocity */
-       for (offset = 1; offset < NUM_POINTER_TRACKERS; offset++) {
-               tracker = tracker_by_offset(accel, offset);
-
-               if (time <= tracker->time)
-                       continue;
-
-               result = initial_velocity =
-                       calculate_tracker_velocity(tracker, time);
-               if (initial_velocity > 0.0)
-                       break;
-       }
-
        /* Find least recent vector within a timelimit, maximum velocity diff
         * and direction threshold. */
-       for (; offset < NUM_POINTER_TRACKERS; offset++) {
+       for (offset = 1; offset < NUM_POINTER_TRACKERS; offset++) {
                tracker = tracker_by_offset(accel, offset);
 
                /* Stop if too far away in time */
@@ -219,12 +206,16 @@ calculate_velocity(struct pointer_accelerator *accel, uint64_t time)
 
                velocity = calculate_tracker_velocity(tracker, time);
 
-               /* Stop if velocity differs too much from initial */
-               velocity_diff = fabs(initial_velocity - velocity);
-               if (velocity_diff > MAX_VELOCITY_DIFF)
-                       break;
+               if (initial_velocity == 0.0) {
+                       result = initial_velocity = velocity;
+               } else {
+                       /* Stop if velocity differs too much from initial */
+                       velocity_diff = fabs(initial_velocity - velocity);
+                       if (velocity_diff > MAX_VELOCITY_DIFF)
+                               break;
 
-               result = velocity;
+                       result = velocity;
+               }
        }
 
        return result;