From a20116379fa278874d3b3b98411aaf81fba7f109 Mon Sep 17 00:00:00 2001
From: Nicolas Pope <nwpope@utu.fi>
Date: Mon, 3 Aug 2020 13:47:07 +0300
Subject: [PATCH] Add vr pose calibration timer

---
 components/streams/src/renderers/openvr_render.cpp | 8 +++++++-
 components/streams/src/renderers/openvr_render.hpp | 1 +
 2 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/components/streams/src/renderers/openvr_render.cpp b/components/streams/src/renderers/openvr_render.cpp
index 6b571c62f..386c8b6aa 100644
--- a/components/streams/src/renderers/openvr_render.cpp
+++ b/components/streams/src/renderers/openvr_render.cpp
@@ -315,6 +315,8 @@ bool OpenVRRender::retrieve(ftl::data::Frame &frame_out) {
 			auto viewPose = t.matrix() * rotmat_;
 
 			if (!pose_calibrated_.test_and_set()) {
+				if (pose_calibration_start_ == -1) pose_calibration_start_ = ftl::timer::get_time();
+
 				std::string headset_origin = host_->value("headset_origin", std::string(""));
 				Eigen::Matrix4d horigin;
 				horigin.setIdentity();
@@ -324,7 +326,11 @@ bool OpenVRRender::retrieve(ftl::data::Frame &frame_out) {
 				}
 				initial_pose_ = horigin*viewPose.inverse();
 
-				if (host_->value("reset_pose", false)) pose_calibrated_.clear();
+				if (host_->value("reset_pose", false) && ftl::timer::get_time() < pose_calibration_start_ + host_->value("calibration_time",10000)) {
+					pose_calibrated_.clear();
+				} else {
+					pose_calibration_start_ = -1;
+				}
 			}
 
 			rgbdframe.setPose() = initial_pose_*viewPose;
diff --git a/components/streams/src/renderers/openvr_render.hpp b/components/streams/src/renderers/openvr_render.hpp
index 9accd58a4..3907b9c3e 100644
--- a/components/streams/src/renderers/openvr_render.hpp
+++ b/components/streams/src/renderers/openvr_render.hpp
@@ -44,6 +44,7 @@ class OpenVRRender : public ftl::render::BaseSourceImpl {
 	ftl::operators::Graph *post_pipe_;
 
 	std::atomic_flag pose_calibrated_;
+	int64_t pose_calibration_start_=-1;
 
 	float baseline_;
 	Eigen::Matrix4d initial_pose_;
-- 
GitLab