diff --git a/components/streams/src/renderers/openvr_render.cpp b/components/streams/src/renderers/openvr_render.cpp index 6b571c62f29059a3de41b0b2207b8b8a72ca3408..386c8b6aa580fbc746f14b757b1d3ec7c9b23607 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 9accd58a436a04cca87c959e117b423af853b6c7..3907b9c3eab2adb692be82ca3935f75ac5b9b96b 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_;