Skip to content

Commit 08b544c

Browse files
Jeff BrownAndroid (Google) Code Review
authored andcommitted
Merge "Fix pointer indexing issue in VelocityTracker." into jb-dev
2 parents a5b2d48 + dcab190 commit 08b544c

File tree

1 file changed

+13
-6
lines changed

1 file changed

+13
-6
lines changed

libs/androidfw/VelocityTracker.cpp

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -145,8 +145,8 @@ void VelocityTracker::addMovement(nsecs_t eventTime, BitSet32 idBits, const Posi
145145
"estimator (degree=%d, xCoeff=%s, yCoeff=%s, confidence=%f)",
146146
id, positions[index].x, positions[index].y,
147147
int(estimator.degree),
148-
vectorToString(estimator.xCoeff, estimator.degree).string(),
149-
vectorToString(estimator.yCoeff, estimator.degree).string(),
148+
vectorToString(estimator.xCoeff, estimator.degree + 1).string(),
149+
vectorToString(estimator.yCoeff, estimator.degree + 1).string(),
150150
estimator.confidence);
151151
}
152152
#endif
@@ -195,23 +195,30 @@ void VelocityTracker::addMovement(const MotionEvent* event) {
195195
idBits.markBit(event->getPointerId(i));
196196
}
197197

198+
uint32_t pointerIndex[MAX_POINTERS];
199+
for (size_t i = 0; i < pointerCount; i++) {
200+
pointerIndex[i] = idBits.getIndexOfBit(event->getPointerId(i));
201+
}
202+
198203
nsecs_t eventTime;
199204
Position positions[pointerCount];
200205

201206
size_t historySize = event->getHistorySize();
202207
for (size_t h = 0; h < historySize; h++) {
203208
eventTime = event->getHistoricalEventTime(h);
204209
for (size_t i = 0; i < pointerCount; i++) {
205-
positions[i].x = event->getHistoricalX(i, h);
206-
positions[i].y = event->getHistoricalY(i, h);
210+
uint32_t index = pointerIndex[i];
211+
positions[index].x = event->getHistoricalX(i, h);
212+
positions[index].y = event->getHistoricalY(i, h);
207213
}
208214
addMovement(eventTime, idBits, positions);
209215
}
210216

211217
eventTime = event->getEventTime();
212218
for (size_t i = 0; i < pointerCount; i++) {
213-
positions[i].x = event->getX(i);
214-
positions[i].y = event->getY(i);
219+
uint32_t index = pointerIndex[i];
220+
positions[index].x = event->getX(i);
221+
positions[index].y = event->getY(i);
215222
}
216223
addMovement(eventTime, idBits, positions);
217224
}

0 commit comments

Comments
 (0)