summaryrefslogtreecommitdiffhomepage
path: root/tracker-pt
diff options
context:
space:
mode:
authorStanislaw Halik <sthalik@misaki.pl>2017-06-18 18:19:17 +0200
committerStanislaw Halik <sthalik@misaki.pl>2017-06-18 18:48:42 +0200
commite88c7b29ea9ec9fcd6ac6b15c965085152100d2e (patch)
tree6747fe7fa797e024b986ba624d05e6f59032f0ac /tracker-pt
parent646530b5f9ca5debe7a9b4840192e32e43f919bf (diff)
get rid of "volatile" abuse
We heavily used "volatile bool" to check if the thread loop should stop. But this functionality is already provided by Qt5's QThread::requestInterruption. In other cases, "volatile" is wonderfully underspecified so it's better to ditch its usage in favor of std::atomic<t>. At the time we don't appear to be using the "volatile" keyword except when calling win32's Interlocked*() family of functions as necessary. In freetrackclient's header the "volatile" qualifier was used as part of a typedef. This doesn't work. Use it as part of data declaration.
Diffstat (limited to 'tracker-pt')
-rw-r--r--tracker-pt/ftnoir_tracker_pt.h8
-rw-r--r--tracker-pt/point_tracker.cpp2
2 files changed, 6 insertions, 4 deletions
diff --git a/tracker-pt/ftnoir_tracker_pt.h b/tracker-pt/ftnoir_tracker_pt.h
index b7b0019a..65e367f5 100644
--- a/tracker-pt/ftnoir_tracker_pt.h
+++ b/tracker-pt/ftnoir_tracker_pt.h
@@ -11,6 +11,8 @@
#include "api/plugin-api.hpp"
#include "ftnoir_tracker_pt_settings.h"
+#include <atomic>
+
#include "numeric.hpp"
#include "camera.h"
@@ -79,9 +81,9 @@ private:
QSize preview_size;
- volatile unsigned point_count;
- volatile unsigned char commands;
- volatile bool ever_success;
+ std::atomic<unsigned> point_count;
+ std::atomic<unsigned char> commands;
+ std::atomic<bool> ever_success;
static constexpr f rad2deg = f(180/M_PI);
//static constexpr float deg2rad = float(M_PI/180);
diff --git a/tracker-pt/point_tracker.cpp b/tracker-pt/point_tracker.cpp
index 8e0c28de..4022cbb2 100644
--- a/tracker-pt/point_tracker.cpp
+++ b/tracker-pt/point_tracker.cpp
@@ -37,7 +37,7 @@ PointModel::PointModel(settings_pt& s)
set_model(s);
// calculate u
u = M01.cross(M02);
- u /= norm(u);
+ u = cv::normalize(u);
// calculate projection matrix on M01,M02 plane
f s11 = M01.dot(M01);