On 04/20/2011 08:28 AM, Peter Hutterer wrote: > i → used_offset > iveloc → initial_velocity > res → result > vdiff → velocity_diff > vfac → velocity_factor > tmp → tracker_velocity > > Signed-off-by: Peter Hutterer <peter.hutte...@who-t.net> > --- > dix/ptrveloc.c | 42 +++++++++++++++++++++++------------------- > 1 files changed, 23 insertions(+), 19 deletions(-) > > diff --git a/dix/ptrveloc.c b/dix/ptrveloc.c > index 6fef0ee..9e1cf87 100644 > --- a/dix/ptrveloc.c > +++ b/dix/ptrveloc.c > @@ -590,13 +590,14 @@ CalcTracker(const MotionTracker *tracker, int cur_t){ > */ > static float > QueryTrackers(DeviceVelocityPtr vel, int cur_t){ > - int offset, dir = UNDEFINED, i = -1, age_ms; > + int offset, dir = UNDEFINED, used_offset = -1, age_ms; > /* initial velocity: a low-offset, valid velocity */ > - float iveloc = 0, res = 0, tmp, vdiff; > - float vfac = vel->corr_mul * vel->const_acceleration; /* premultiply */ > + float initial_velocity = 0, result = 0, velocity_diff; > + float velocity_factor = vel->corr_mul * vel->const_acceleration; /* > premultiply */ > /* loop from current to older data */ > for(offset = 1; offset < vel->num_tracker; offset++){ > MotionTracker *tracker = TRACKER(vel, offset); > + float tracker_velocity; > > age_ms = cur_t - tracker->time; > > @@ -620,42 +621,45 @@ QueryTrackers(DeviceVelocityPtr vel, int cur_t){ > break; > } > > - tmp = CalcTracker(tracker, cur_t) * vfac; > + tracker_velocity = CalcTracker(tracker, cur_t) * velocity_factor; > > - if ((iveloc == 0 || offset <= vel->initial_range) && tmp != 0) { > + if (tracker_velocity == 0) > + continue; > + > + if (initial_velocity == 0 || offset <= vel->initial_range) { > /* set initial velocity and result */ > - res = iveloc = tmp; > - i = offset; > - } else if (iveloc != 0 && tmp != 0) { > - vdiff = fabs(iveloc - tmp); > - if (vdiff <= vel->max_diff || > - vdiff/(iveloc + tmp) < vel->max_rel_diff) { > + result = initial_velocity = tracker_velocity; > + used_offset = offset; > + } else if (initial_velocity != 0) { > + velocity_diff = fabs(initial_velocity - tracker_velocity); > + if (velocity_diff <= vel->max_diff || > + velocity_diff/(initial_velocity + tracker_velocity) < > vel->max_rel_diff) { > /* we're in range with the initial velocity, > * so this result is likely better > * (it contains more information). */ > - res = tmp; > - i = offset; > + result = tracker_velocity; > + used_offset = offset; > }else{ > /* we're not in range, quit - it won't get better. */ > DebugAccelF("(dix prtacc) query: tracker too different:" > " old %2.2f initial %2.2f diff: %2.2f\n", > - tmp, iveloc, vdiff); > + tracker_velocity, initial_velocity, velocity_diff); > break; > } > } > } > if(offset == vel->num_tracker){ > DebugAccelF("(dix prtacc) query: last tracker in effect\n"); > - i = vel->num_tracker-1; > + used_offset = vel->num_tracker-1; > } > - if(i>=0){ > + if(used_offset >= 0){ > #ifdef PTRACCEL_DEBUGGING > - MotionTracker *tracker = TRACKER(vel, i); > + MotionTracker *tracker = TRACKER(vel, used_offset); > DebugAccelF("(dix prtacc) result: offset %i [dx: %i dy: %i diff: %i]\n", > - i, tracker->dx, tracker->dy, cur_t - tracker->time); > + used_offset, tracker->dx, tracker->dy, cur_t - > tracker->time); > #endif > } > - return res; > + return result; > } > > #undef TRACKER_INDEX Reviewed-by: Simon Thum <simon.t...@gmx.de>
Cheers, Simon _______________________________________________ xorg-devel@lists.x.org: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel