media_perception: Proto Mojom conversion for presence_perception.mojom

BUG=chromium:919873
TEST=Unittests pass.

Change-Id: Ic1dee41687d531a6a848fd65a724033267383167
Reviewed-on: https://chromium-review.googlesource.com/1401202
Commit-Ready: ChromeOS CL Exonerator Bot <chromiumos-cl-exonerator@appspot.gserviceaccount.com>
Tested-by: Wei Guan <weigua@chromium.org>
Reviewed-by: Luke Sorenson <lasoren@chromium.org>
Reviewed-by: Jacob Dufault <jdufault@chromium.org>
(cherry picked from commit 790d6f9fd225d4352c6252dbd31d67abebd39e96)
Reviewed-on: https://chromium-review.googlesource.com/c/1436097
Commit-Queue: Wei Guan <weigua@chromium.org>
diff --git a/media_perception/media_perception.gyp b/media_perception/media_perception.gyp
index 1955d8e..747f9f6 100644
--- a/media_perception/media_perception.gyp
+++ b/media_perception/media_perception.gyp
@@ -19,9 +19,10 @@
         '<(proto_in_dir)/common.proto',
         '<(proto_in_dir)/device_management.proto',
         '<(proto_in_dir)/frame_perception.proto',
-        '<(proto_in_dir)/media_perception_mojom.proto',
         '<(proto_in_dir)/hotword_detection.proto',
+        '<(proto_in_dir)/media_perception_mojom.proto',
         '<(proto_in_dir)/pipeline.proto',
+        '<(proto_in_dir)/presence_perception.proto',
       ],
       'includes': ['../common-mk/protoc.gypi'],
     },
@@ -44,6 +45,7 @@
         'mojom/media_perception.mojom',
         'mojom/media_perception_service.mojom',
         'mojom/pipeline.mojom',
+        'mojom/presence_perception.mojom',
         'mojom/producer.mojom',
         'mojom/receiver.mojom',
         'mojom/scoped_access_permission.mojom',
diff --git a/media_perception/mojom/presence_perception.mojom b/media_perception/mojom/presence_perception.mojom
new file mode 100644
index 0000000..714df5d
--- /dev/null
+++ b/media_perception/mojom/presence_perception.mojom
@@ -0,0 +1,15 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+//
+// Next MinVersion: 1
+
+module chromeos.media_perception.mojom;
+
+struct PresencePerception {
+  // The timestamp associated with the perception result.
+  int64 timestamp_us@0;
+
+  // Overall probability [0, 1] that a human is present.
+  float presence_confidence@1;
+};
diff --git a/media_perception/proto/presence_perception.proto b/media_perception/proto/presence_perception.proto
new file mode 100644
index 0000000..3fd74de
--- /dev/null
+++ b/media_perception/proto/presence_perception.proto
@@ -0,0 +1,16 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+//
+// See platform2/media_perception/mojom/presence_perception.mojom for relevant comments on
+// data fields.
+
+syntax = "proto2";
+
+package mri;
+
+message PresencePerception {
+  optional int64 timestamp_us = 1;
+
+  optional float presence_confidence = 3;
+}
diff --git a/media_perception/proto_mojom_conversion.cc b/media_perception/proto_mojom_conversion.cc
index d3ae875..24232ef 100644
--- a/media_perception/proto_mojom_conversion.cc
+++ b/media_perception/proto_mojom_conversion.cc
@@ -284,6 +284,13 @@
   return state_ptr;
 }
 
+PresencePerceptionPtr ToMojom(const mri::PresencePerception& perception) {
+  PresencePerceptionPtr perception_ptr = PresencePerception::New();
+  perception_ptr->timestamp_us = perception.timestamp_us();
+  perception_ptr->presence_confidence = perception.presence_confidence();
+  return perception_ptr;
+}
+
 }  // namespace mojom
 }  // namespace media_perception
 }  // namespace chromeos
@@ -694,4 +701,16 @@
   return state;
 }
 
+PresencePerception ToProto(
+    const chromeos::media_perception::mojom::PresencePerceptionPtr&
+        perception_ptr) {
+  PresencePerception perception;
+  if (perception_ptr.is_null())
+    return perception;
+
+  perception.set_timestamp_us(perception_ptr->timestamp_us);
+  perception.set_presence_confidence(perception_ptr->presence_confidence);
+  return perception;
+}
+
 }  // namespace mri
diff --git a/media_perception/proto_mojom_conversion.h b/media_perception/proto_mojom_conversion.h
index 64e6a3e..b3b9000 100644
--- a/media_perception/proto_mojom_conversion.h
+++ b/media_perception/proto_mojom_conversion.h
@@ -10,15 +10,17 @@
 #include "media_perception/common.pb.h"
 #include "media_perception/device_management.pb.h"
 #include "media_perception/frame_perception.pb.h"
-#include "media_perception/media_perception_mojom.pb.h"
 #include "media_perception/hotword_detection.pb.h"
+#include "media_perception/media_perception_mojom.pb.h"
 #include "media_perception/pipeline.pb.h"
+#include "media_perception/presence_perception.pb.h"
 #include "mojom/common.mojom.h"
 #include "mojom/device_management.mojom.h"
 #include "mojom/frame_perception.mojom.h"
 #include "mojom/hotword_detection.mojom.h"
 #include "mojom/media_perception.mojom.h"
 #include "mojom/pipeline.mojom.h"
+#include "mojom/presence_perception.mojom.h"
 
 namespace chromeos {
 namespace media_perception {
@@ -57,6 +59,9 @@
 PipelineErrorPtr ToMojom(const mri::PipelineError& error);
 PipelineStatePtr ToMojom(const mri::PipelineState& state);
 
+// Presence perception conversions.
+PresencePerceptionPtr ToMojom(const mri::PresencePerception& perception);
+
 }  // namespace mojom
 }  // namespace media_perception
 }  // namespace chromeos
@@ -131,6 +136,11 @@
 PipelineState ToProto(
     const chromeos::media_perception::mojom::PipelineStatePtr& state_ptr);
 
+// Presence perception conversions.
+PresencePerception ToProto(
+    const chromeos::media_perception::mojom::PresencePerceptionPtr&
+        perception_ptr);
+
 }  // namespace mri
 
 #endif  // MEDIA_PERCEPTION_PROTO_MOJOM_CONVERSION_H_
diff --git a/media_perception/proto_mojom_conversion_test.cc b/media_perception/proto_mojom_conversion_test.cc
index 6fe819d..bfdeb96 100644
--- a/media_perception/proto_mojom_conversion_test.cc
+++ b/media_perception/proto_mojom_conversion_test.cc
@@ -303,6 +303,16 @@
   EXPECT_EQ(*error_ptr->error_string, kMockErrorString);
 }
 
+TEST(ProtoMojomConversionTest, PresencePerceptionToMojom) {
+  mri::PresencePerception perception;
+  perception.set_timestamp_us(100);
+  perception.set_presence_confidence(0.5);
+
+  PresencePerceptionPtr perception_ptr = ToMojom(perception);
+  EXPECT_EQ(perception_ptr->timestamp_us, 100);
+  EXPECT_FLOAT_EQ(perception_ptr->presence_confidence, 0.5);
+}
+
 }  // namespace
 }  // namespace mojom
 }  // namespace media_perception
@@ -632,5 +642,16 @@
   EXPECT_EQ(state.error().error_string(), kMockErrorString);
 }
 
+TEST(ProtoMojomConversionTest, PresencePerceptionToProto) {
+  chromeos::media_perception::mojom::PresencePerceptionPtr perception_ptr =
+      chromeos::media_perception::mojom::PresencePerception::New();
+  perception_ptr->timestamp_us = 100;
+  perception_ptr->presence_confidence = 0.5;
+
+  PresencePerception perception = ToProto(perception_ptr);
+  EXPECT_EQ(perception.timestamp_us(), 100);
+  EXPECT_FLOAT_EQ(perception.presence_confidence(), 0.5);
+}
+
 }  // namespace
 }  // namespace mri