From e737456dcd40175c3948258d14985f4770ab7de6 Mon Sep 17 00:00:00 2001 From: Al Bernstein Date: Thu, 6 Apr 2017 16:56:03 -0700 Subject: [PATCH] used thread safe moving average for the quaternions --- libraries/shared/src/SimpleMovingAverage.h | 2 +- plugins/hifiKinect/src/KinectPlugin.cpp | 8 ++++---- plugins/hifiKinect/src/KinectPlugin.h | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/libraries/shared/src/SimpleMovingAverage.h b/libraries/shared/src/SimpleMovingAverage.h index 2559bb36ec..783c13d4b1 100644 --- a/libraries/shared/src/SimpleMovingAverage.h +++ b/libraries/shared/src/SimpleMovingAverage.h @@ -61,7 +61,7 @@ public: const float WEIGHTING = 1.0f / (float)MAX_NUM_SAMPLES; const float ONE_MINUS_WEIGHTING = 1.0f - WEIGHTING; std::atomic numSamples{ 0 }; - T average; + std::atomic average; void clear() { numSamples = 0; diff --git a/plugins/hifiKinect/src/KinectPlugin.cpp b/plugins/hifiKinect/src/KinectPlugin.cpp index 8f10efed86..a6bf5df9dd 100644 --- a/plugins/hifiKinect/src/KinectPlugin.cpp +++ b/plugins/hifiKinect/src/KinectPlugin.cpp @@ -496,21 +496,21 @@ void KinectPlugin::ProcessBody(INT64 time, int bodyCount, IBody** bodies) { static const quat kinectToHandRight = glm::angleAxis(-PI / 2.0f, Vectors::UNIT_Y); // add moving average of orientation quaternion glm::quat jointSample = jointOrientation * kinectToHandRight; - if (glm::dot(jointSample, _RightHandOrientationAverage.average) < 0) { + if (glm::dot(jointSample, _RightHandOrientationAverage.getAverage()) < 0) { jointSample = -jointSample; } _RightHandOrientationAverage.addSample(jointSample); - _joints[j].orientation = glm::normalize(_RightHandOrientationAverage.average); + _joints[j].orientation = glm::normalize(_RightHandOrientationAverage.getAverage()); } else if (joints[j].JointType == JointType_HandLeft) { // To transform from Kinect to our LEFT Hand.... Postive 90 deg around Y static const quat kinectToHandLeft = glm::angleAxis(PI / 2.0f, Vectors::UNIT_Y); // add moving average of orientation quaternion glm::quat jointSample = jointOrientation * kinectToHandLeft; - if (glm::dot(jointSample, _LeftHandOrientationAverage.average) < 0) { + if (glm::dot(jointSample, _LeftHandOrientationAverage.getAverage()) < 0) { jointSample = -jointSample; } _LeftHandOrientationAverage.addSample(jointSample); - _joints[j].orientation = glm::normalize(_LeftHandOrientationAverage.average); + _joints[j].orientation = glm::normalize(_LeftHandOrientationAverage.getAverage()); } else { _joints[j].orientation = jointOrientation; } diff --git a/plugins/hifiKinect/src/KinectPlugin.h b/plugins/hifiKinect/src/KinectPlugin.h index 73cc9f4103..68ba1a7b86 100644 --- a/plugins/hifiKinect/src/KinectPlugin.h +++ b/plugins/hifiKinect/src/KinectPlugin.h @@ -62,8 +62,8 @@ public: private: // add variables for moving average - MovingAverage _LeftHandOrientationAverage; - MovingAverage _RightHandOrientationAverage; + ThreadSafeMovingAverage _LeftHandOrientationAverage; + ThreadSafeMovingAverage _RightHandOrientationAverage; protected: