summaryrefslogtreecommitdiff
path: root/input/classifier/1.0/default/InputClassifier.cpp
diff options
context:
space:
mode:
authorSiarhei Vishniakou <svv@google.com>2018-01-17 11:49:04 -0800
committerSiarhei Vishniakou <svv@google.com>2019-01-09 15:01:16 -0800
commita0e7f731c748e937879856a38368f8bcae29e190 (patch)
treed97155b7347da9c83a88cec110e2f8ab640f6566 /input/classifier/1.0/default/InputClassifier.cpp
parent2cd287dd2f07ea8cd39522b92430cbf46271326a (diff)
Add an InputClassifier HAL
The new HAL will be responsible for processing touch video frames that are received from InputClassifier stage. After processing, the HAL will generate a classification of the current gesture. This classification will later be provided to the app via the MotionEvent.getClassification() public API. The eventual goal is to classify each event stream as a force touch or not a force touch. An example implementation of the HAL is presented here. This code was used for local testing on blueline, and should not be actually installed or used in any way other than for reference. Bug: 62940136 Test: observed "detected deep press" logs when pressing with large finger area on the touchscreen Change-Id: Id6ac4337435e4ac07877da11ca184b6dd4d64780
Diffstat (limited to 'input/classifier/1.0/default/InputClassifier.cpp')
-rw-r--r--input/classifier/1.0/default/InputClassifier.cpp65
1 files changed, 65 insertions, 0 deletions
diff --git a/input/classifier/1.0/default/InputClassifier.cpp b/input/classifier/1.0/default/InputClassifier.cpp
new file mode 100644
index 0000000000..c463361dcb
--- /dev/null
+++ b/input/classifier/1.0/default/InputClassifier.cpp
@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#define LOG_TAG "InputClassifierHAL"
+
+#include "InputClassifier.h"
+#include <inttypes.h>
+#include <log/log.h>
+#include <utils/Timers.h>
+
+using namespace android::hardware::input::classifier::V1_0;
+
+namespace android {
+namespace hardware {
+namespace input {
+namespace classifier {
+namespace V1_0 {
+namespace implementation {
+
+// Methods from ::android::hardware::input::classifier::V1_0::IInputClassifier follow.
+Return<Classification> InputClassifier::classify(const MotionEvent& event) {
+ /**
+ * In this example implementation, we will see how many "pixels" inside the video frame
+ * exceed the value of 250. If more than 6 such pixels are present, then treat the event
+ * as a "DEEP_PRESS".
+ */
+ if (event.frames.size() == 0) {
+ return Classification::NONE;
+ }
+ ALOGI("Frame(O) timestamp = %" PRIu64 ", received %zu frame(s)", event.frames[0].timestamp,
+ event.frames.size());
+ for (const VideoFrame& frame : event.frames) {
+ size_t count = 0;
+ for (size_t i = 0; i < frame.data.size(); i++) {
+ if (frame.data[i] > 250) {
+ count++;
+ }
+ }
+ if (count > 6) {
+ return Classification::DEEP_PRESS;
+ }
+ }
+
+ return Classification::NONE;
+}
+
+} // namespace implementation
+} // namespace V1_0
+} // namespace classifier
+} // namespace input
+} // namespace hardware
+} // namespace android