blob: a616a95ab170f73db3cca6e4140a8ec89be40cd1 [file] [log] [blame]
Siarhei Vishniakou7b7c8f62018-12-12 16:09:20 -08001/*
2 * Copyright (C) 2018 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
Prabir Pradhanc08b0db2022-09-10 00:57:15 +000017#pragma once
Siarhei Vishniakou7b7c8f62018-12-12 16:09:20 -080018
19#include <stdint.h>
20#include <sys/time.h>
21#include <vector>
22
23namespace android {
24
25/**
26 * Represents data from a single scan of the touchscreen device.
27 * Similar in concept to a video frame, but the touch strength is used as
28 * the values instead.
29 */
30class TouchVideoFrame {
31public:
Siarhei Vishniakoufda3aee2019-02-15 17:10:53 -060032 TouchVideoFrame(uint32_t height, uint32_t width, std::vector<int16_t> data,
Siarhei Vishniakou26cf29d2019-02-15 16:48:38 -060033 const struct timeval& timestamp);
Siarhei Vishniakou7b7c8f62018-12-12 16:09:20 -080034
Siarhei Vishniakou26cf29d2019-02-15 16:48:38 -060035 bool operator==(const TouchVideoFrame& rhs) const;
Siarhei Vishniakou473174e2017-12-27 16:44:42 -080036
Siarhei Vishniakou7b7c8f62018-12-12 16:09:20 -080037 /**
Siarhei Vishniakou7b7c8f62018-12-12 16:09:20 -080038 * Height of the frame
39 */
Siarhei Vishniakou26cf29d2019-02-15 16:48:38 -060040 uint32_t getHeight() const;
Siarhei Vishniakou7b7c8f62018-12-12 16:09:20 -080041 /**
Siarhei Vishniakoufda3aee2019-02-15 17:10:53 -060042 * Width of the frame
43 */
44 uint32_t getWidth() const;
45 /**
Siarhei Vishniakou7b7c8f62018-12-12 16:09:20 -080046 * The touch strength data.
47 * The array is a 2-D row-major matrix, with dimensions (height, width).
48 * Total size of the array should equal getHeight() * getWidth().
49 * Data is allowed to be negative.
50 */
Siarhei Vishniakou26cf29d2019-02-15 16:48:38 -060051 const std::vector<int16_t>& getData() const;
Siarhei Vishniakou7b7c8f62018-12-12 16:09:20 -080052 /**
53 * Time at which the heatmap was taken.
54 */
Siarhei Vishniakou26cf29d2019-02-15 16:48:38 -060055 const struct timeval& getTimestamp() const;
Siarhei Vishniakou7b7c8f62018-12-12 16:09:20 -080056
Siarhei Vishniakou8154bbd2019-02-15 17:21:03 -060057 /**
58 * Rotate the video frame.
Marin Shalamanov228f46b2021-01-28 21:11:45 +010059 * The rotation value is an enum from ui/Rotation.h
Siarhei Vishniakou8154bbd2019-02-15 17:21:03 -060060 */
61 void rotate(int32_t orientation);
62
Siarhei Vishniakou7b7c8f62018-12-12 16:09:20 -080063private:
Siarhei Vishniakou7b7c8f62018-12-12 16:09:20 -080064 uint32_t mHeight;
Siarhei Vishniakoufda3aee2019-02-15 17:10:53 -060065 uint32_t mWidth;
Siarhei Vishniakou7b7c8f62018-12-12 16:09:20 -080066 std::vector<int16_t> mData;
67 struct timeval mTimestamp;
Siarhei Vishniakou8154bbd2019-02-15 17:21:03 -060068
69 /**
70 * Common method for 90 degree and 270 degree rotation
71 */
72 void rotateQuarterTurn(bool clockwise);
73 void rotate180();
Siarhei Vishniakou7b7c8f62018-12-12 16:09:20 -080074};
75
76} // namespace android