blob: 5577aa8f13008d5ba27b9b8e0e391d616b602952 [file] [log] [blame] [edit]
// Copyright 2024 The ChromiumOS Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef LIBTOUCHRAW_RESHAPER_H_
#define LIBTOUCHRAW_RESHAPER_H_
#include <cstdint>
#include <memory>
#include <utility>
#include <base/task/sequenced_task_runner.h>
#include <gtest/gtest_prod.h>
#include "libtouchraw/consumer_interface.h"
#include "libtouchraw/crop.h"
#include "libtouchraw/touchraw.h"
#include "libtouchraw/touchraw_export.h"
namespace touchraw {
class LIBTOUCHRAW_EXPORT Reshaper : public HeatmapConsumerInterface {
public:
/**
* Reshaper takes a heatmap and crops it according to the crop
* specification. Reshaping is sometimes needed when feeding the heatmap into
* a consumer that is expecting a fixed size heatmap. This initial
* implementation only supports cropping.
*
* @param crop Crop specification to be applied.
* @param queue Heatmap consumer queue for tasks to be posted.
*/
explicit Reshaper(Crop crop, std::unique_ptr<HeatmapConsumerInterface> queue);
Reshaper(const Reshaper&) = delete;
Reshaper& operator=(const Reshaper&) = delete;
void Push(std::unique_ptr<Heatmap> heatmap) override {
base::SequencedTaskRunner::GetCurrentDefault()->PostTask(
FROM_HERE, base::BindOnce(&Reshaper::ReshapeHeatmap,
base::Unretained(this), std::move(heatmap)));
}
protected:
/**
* Reshape parsed heatmap events.
*
* @param heatmap The parsed heatmap that will be reshaped.
*/
void ReshapeHeatmap(std::unique_ptr<Heatmap> heatmap);
private:
// The crop specification to be applied to the heatmap.
Crop crop_;
// Task queue.
const std::unique_ptr<HeatmapConsumerInterface> queue_;
};
} // namespace touchraw
#endif // LIBTOUCHRAW_RESHAPER_H_