blob: 04117ffa944b8cdd0ecfe392b28fe74872675c90 [file] [log] [blame]
// Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "touch_noise_filter/single_frame_tap_filter.h"
#include <base/macros.h>
#include <cstddef>
#include <cstdio>
namespace touch_noise_filter {
namespace {
double kMaxTapDuration = 0.1;
} // namespace {}
void SingleFrameTapFilter::FilterFrame(Frame* previous, Frame* current,
size_t num_slots) {
for (size_t i = 0; i < num_slots; i++) {
Finger* prev = &previous->fingers_[i];
Finger* cur = &current->fingers_[i];
Log("got finger at %f in slot %zu", current->timestamp_, i);
bool arrived = cur->tracking_id_ >= 0 && prev->tracking_id_ == -1;
bool departing = cur->tracking_id_ == -1 && prev->tracking_id_ >= 0;
if ((prev_arrived_ & (1ULL << i)) && departing &&
(current->timestamp_ - previous->timestamp_ < kMaxTapDuration)) {
cur->canceled_ = true;
TouchNoiseFilterLog(TOUCH_NOISE_LOG_INFO, "CANCEL AT %f, %zu\n",
current->timestamp_, i);
}
if (arrived)
prev_arrived_ |= 1ULL << i;
else
prev_arrived_ &= ~(1ULL << i);
}
}
} // namespace touch_noise_filter