summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorStanislaw Halik <sthalik@misaki.pl>2015-07-20 13:18:06 +0200
committerStanislaw Halik <sthalik@misaki.pl>2015-07-20 13:18:06 +0200
commit3d78a3cb97ed470f331c5cdf7a3f3b2714a92f78 (patch)
tree47c43c005c559e4dfc63c1963c869dca1f336c0a
parentfaec4b17c7cffb2836b4f364326f494af93bb7c1 (diff)
plug in race in camera release
We can crash if start/stop pressed fast eventually.
-rw-r--r--ftnoir_tracker_aruco/ftnoir_tracker_aruco.cpp4
-rw-r--r--ftnoir_tracker_ht/ftnoir_tracker_ht.cpp3
-rw-r--r--ftnoir_tracker_pt/camera.cpp3
-rw-r--r--opentrack/sleep.hpp22
4 files changed, 32 insertions, 0 deletions
diff --git a/ftnoir_tracker_aruco/ftnoir_tracker_aruco.cpp b/ftnoir_tracker_aruco/ftnoir_tracker_aruco.cpp
index 786be62d..8acddc28 100644
--- a/ftnoir_tracker_aruco/ftnoir_tracker_aruco.cpp
+++ b/ftnoir_tracker_aruco/ftnoir_tracker_aruco.cpp
@@ -18,6 +18,7 @@
#include <opencv2/videoio.hpp>
#include "opentrack/camera-names.hpp"
#include "opentrack/opencv-calibration.hpp"
+#include "opentrack/sleep.hpp"
typedef struct {
int width;
@@ -355,6 +356,9 @@ fail:
if (frame.rows > 0)
videoWidget->update_image(frame);
}
+
+ // give opencv time to exit camera threads, etc.
+ portable::sleep(500);
}
void Tracker::data(double *data)
diff --git a/ftnoir_tracker_ht/ftnoir_tracker_ht.cpp b/ftnoir_tracker_ht/ftnoir_tracker_ht.cpp
index 2ac614a2..ad13d716 100644
--- a/ftnoir_tracker_ht/ftnoir_tracker_ht.cpp
+++ b/ftnoir_tracker_ht/ftnoir_tracker_ht.cpp
@@ -4,6 +4,7 @@
#include "opentrack/plugin-api.hpp"
#include <cmath>
#include "opentrack/camera-names.hpp"
+#include "opentrack/sleep.hpp"
typedef struct {
int width;
@@ -158,6 +159,8 @@ void Tracker::run()
}
}
}
+ // give opencv time to exit camera threads, etc.
+ portable::sleep(500);
}
void Tracker::data(double* data)
diff --git a/ftnoir_tracker_pt/camera.cpp b/ftnoir_tracker_pt/camera.cpp
index 2e745f2a..7c4af38f 100644
--- a/ftnoir_tracker_pt/camera.cpp
+++ b/ftnoir_tracker_pt/camera.cpp
@@ -8,6 +8,7 @@
#include "camera.h"
#include <string>
#include <QDebug>
+#include "opentrack/sleep.hpp"
using namespace cv;
@@ -113,6 +114,8 @@ void CVCamera::stop()
cap->release();
delete cap;
cap = nullptr;
+ // give opencv time to exit camera threads, etc.
+ portable::sleep(500);
}
active = false;
}
diff --git a/opentrack/sleep.hpp b/opentrack/sleep.hpp
new file mode 100644
index 00000000..27920842
--- /dev/null
+++ b/opentrack/sleep.hpp
@@ -0,0 +1,22 @@
+#pragma once
+
+namespace portable
+{
+#ifdef _WIN32
+ #include <windows.h>
+
+ template<typename = void>
+ void sleep(unsigned milliseconds)
+ {
+ Sleep(milliseconds);
+ }
+#else
+ #include <unistd.h>
+
+ template<typename = void>
+ void sleep(unsigned milliseconds)
+ {
+ usleep(milliseconds * 1000U); // takes microseconds
+ }
+#endif
+}