diff options
author | Stanislaw Halik <sthalik@misaki.pl> | 2015-07-20 13:18:06 +0200 |
---|---|---|
committer | Stanislaw Halik <sthalik@misaki.pl> | 2015-07-20 13:18:06 +0200 |
commit | 3d78a3cb97ed470f331c5cdf7a3f3b2714a92f78 (patch) | |
tree | 47c43c005c559e4dfc63c1963c869dca1f336c0a | |
parent | faec4b17c7cffb2836b4f364326f494af93bb7c1 (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.cpp | 4 | ||||
-rw-r--r-- | ftnoir_tracker_ht/ftnoir_tracker_ht.cpp | 3 | ||||
-rw-r--r-- | ftnoir_tracker_pt/camera.cpp | 3 | ||||
-rw-r--r-- | opentrack/sleep.hpp | 22 |
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 +} |