···10911091 DRV_TRACE_MARKER();
1092109210931093 struct wmr_hmd *wh = wmr_hmd(xdev);
10941094+10951095+ at_timestamp_ns += (uint64_t)(wh->tracked_offset_ms.val * (double)U_TIME_1MS_IN_NS);
10961096+10941097 if (wh->tracking.slam_enabled && wh->slam_over_3dof) {
10951098 wmr_hmd_get_slam_tracked_pose(xdev, name, at_timestamp_ns, out_relation);
10961099 } else {
···16171620 u_var_add_pose(wh, &wh->pose, "Tracked Pose");
16181621 u_var_add_pose(wh, &wh->offset, "Pose Offset");
16191622 u_var_add_bool(wh, &wh->average_imus, "Average IMU samples");
16231623+ u_var_add_draggable_f32(wh, &wh->tracked_offset_ms, "Timecode offset(ms)");
1620162416211625 u_var_add_gui_header(wh, NULL, "3DoF Tracking");
16221626 m_imu_3dof_add_vars(&wh->fusion.i3dof, wh, "");
···18871891 wh->pose = (struct xrt_pose)XRT_POSE_IDENTITY;
18881892 wh->offset = (struct xrt_pose)XRT_POSE_IDENTITY;
18891893 wh->average_imus = true;
18941894+ wh->tracked_offset_ms = (struct u_var_draggable_f32){
18951895+ .val = 0.0,
18961896+ .min = -40.0,
18971897+ .step = 0.1,
18981898+ .max = +120.0,
18991899+ };
1890190018911901 /* Now that we have the config loaded, iterate the map of known headsets and see if we have
18921902 * an entry for this specific headset (otherwise the generic entry will be used)
+8-1
src/xrt/drivers/wmr/wmr_hmd.h
···11// Copyright 2018, Philipp Zabel.
22// Copyright 2020-2021, N Madsen.
33-// Copyright 2020-2021, Collabora, Ltd.
33+// Copyright 2020-2023, Collabora, Ltd.
44// SPDX-License-Identifier: BSL-1.0
55/*!
66 * @file
···173173174174 //! Average 4 IMU samples before sending them to the trackers
175175 bool average_imus;
176176+177177+ /*!
178178+ * Offset for tracked pose offsets (applies to both fusion and SLAM).
179179+ * Applied when getting the tracked poses, so is effectivily a offset
180180+ * to increase or decrease prediction.
181181+ */
182182+ struct u_var_draggable_f32 tracked_offset_ms;
176183177184 struct
178185 {