Refine the recenter operation
This change allows recentering to happen for an individual sensor
rather than to all at once. This avoids unecessary recentering and
rate limiting if the sensor being recentered is not being used in the
current mode.
Test: atest --host libheadtracking-test
Bug: 188502620
Change-Id: Ifb73050e0072e676b5936a22e0cd1be8d31e9596
diff --git a/media/libheadtracking/HeadTrackingProcessor.cpp b/media/libheadtracking/HeadTrackingProcessor.cpp
index ee60fa5..3f1a18d 100644
--- a/media/libheadtracking/HeadTrackingProcessor.cpp
+++ b/media/libheadtracking/HeadTrackingProcessor.cpp
@@ -108,10 +108,22 @@
HeadTrackingMode getActualMode() const override { return mModeSelector.getActualMode(); }
- void recenter() override {
- mHeadPoseDriftCompensator.recenter();
- mScreenPoseDriftCompensator.recenter();
- mRateLimiter.enable();
+ void recenter(bool recenterHead, bool recenterScreen) override {
+ if (recenterHead) {
+ mHeadPoseDriftCompensator.recenter();
+ }
+ if (recenterScreen) {
+ mScreenPoseDriftCompensator.recenter();
+ }
+
+ // If a sensor being recentered is included in the current mode, apply rate limiting to
+ // avoid discontinuities.
+ HeadTrackingMode mode = mModeSelector.getActualMode();
+ if ((recenterHead && (mode == HeadTrackingMode::WORLD_RELATIVE ||
+ mode == HeadTrackingMode::SCREEN_RELATIVE)) ||
+ (recenterScreen && mode == HeadTrackingMode::SCREEN_RELATIVE)) {
+ mRateLimiter.enable();
+ }
}
private: