blob: f145bdf9915208f6672fb7e68d7940106661221a [file] [edit]
// Copyright 2019 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "ui/base/prediction/one_euro_filter.h"
#include "ui/base/ui_base_features.h"
namespace ui {
const double OneEuroFilter::kDefaultFrequency;
const double OneEuroFilter::kDefaultMincutoff;
const double OneEuroFilter::kDefaultBeta;
const double OneEuroFilter::kDefaultDcutoff;
const char OneEuroFilter::kParamBeta[];
const char OneEuroFilter::kParamMincutoff[];
OneEuroFilter::OneEuroFilter(double mincutoff, double beta) {
CHECK_GE(mincutoff, 0);
CHECK_GE(beta, 0);
x_filter_ = std::make_unique<::OneEuroFilter>(kDefaultFrequency, mincutoff,
beta, kDefaultDcutoff);
y_filter_ = std::make_unique<::OneEuroFilter>(kDefaultFrequency, mincutoff,
beta, kDefaultDcutoff);
}
OneEuroFilter::~OneEuroFilter() {}
bool OneEuroFilter::Filter(const base::TimeTicks& timestamp,
gfx::PointF* position) const {
if (!position)
return false;
double ts = (timestamp - base::TimeTicks()).InSecondsF();
position->set_x(x_filter_->filter(position->x(), ts));
position->set_y(y_filter_->filter(position->y(), ts));
return true;
}
const char* OneEuroFilter::GetName() const {
return features::kFilterNameOneEuro;
}
} // namespace ui