From 6b6e286d9dcf03bd4d96f7d0acbeb797eecbcfdd Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Mon, 20 Jul 2015 12:55:32 +0200 Subject: nix empty dtor --- opentrack/selected-libraries.cpp | 4 ---- opentrack/selected-libraries.hpp | 1 - 2 files changed, 5 deletions(-) diff --git a/opentrack/selected-libraries.cpp b/opentrack/selected-libraries.cpp index c39ee3f5..63517774 100644 --- a/opentrack/selected-libraries.cpp +++ b/opentrack/selected-libraries.cpp @@ -1,10 +1,6 @@ #include "opentrack/selected-libraries.hpp" #include -SelectedLibraries::~SelectedLibraries() -{ -} - SelectedLibraries::SelectedLibraries(QFrame* frame, dylibptr t, dylibptr p, dylibptr f) : pTracker(nullptr), pFilter(nullptr), diff --git a/opentrack/selected-libraries.hpp b/opentrack/selected-libraries.hpp index 2813cd27..3719b109 100644 --- a/opentrack/selected-libraries.hpp +++ b/opentrack/selected-libraries.hpp @@ -18,6 +18,5 @@ struct SelectedLibraries { mem pProtocol; SelectedLibraries(QFrame* frame, dylibptr t, dylibptr p, dylibptr f); SelectedLibraries() : pTracker(nullptr), pFilter(nullptr), pProtocol(nullptr), correct(false) {} - ~SelectedLibraries(); bool correct; }; -- cgit v1.2.3 From 513ef3ab3ad8231b783905f7ddd7a83d6ef1ae1f Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Mon, 20 Jul 2015 12:57:43 +0200 Subject: pt: cleanup some data races --- ftnoir_tracker_pt/camera.h | 2 +- ftnoir_tracker_pt/ftnoir_tracker_pt.cpp | 6 ++++-- ftnoir_tracker_pt/ftnoir_tracker_pt_dialog.cpp | 18 +++++++++++++----- 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/ftnoir_tracker_pt/camera.h b/ftnoir_tracker_pt/camera.h index 2c42652a..5451ec09 100644 --- a/ftnoir_tracker_pt/camera.h +++ b/ftnoir_tracker_pt/camera.h @@ -89,7 +89,7 @@ public: void start() override; void stop() override; - operator cv::VideoCapture&() { return *cap; } + operator cv::VideoCapture*() { return cap; } protected: bool _get_frame(cv::Mat* frame) override; diff --git a/ftnoir_tracker_pt/ftnoir_tracker_pt.cpp b/ftnoir_tracker_pt/ftnoir_tracker_pt.cpp index be946018..013777bc 100644 --- a/ftnoir_tracker_pt/ftnoir_tracker_pt.cpp +++ b/ftnoir_tracker_pt/ftnoir_tracker_pt.cpp @@ -72,6 +72,8 @@ void Tracker_PT::run() if (!log_file.open(QIODevice::WriteOnly | QIODevice::Text)) return; QTextStream log_stream(&log_file); #endif + + apply_settings(); while((commands & ABORT) == 0) { @@ -152,9 +154,11 @@ void Tracker_PT::apply_settings() { qDebug()<<"Tracker:: Applying settings"; QMutexLocker l(&camera_mtx); + camera.stop(); camera.set_device_index(camera_name_to_index(s.camera_name)); camera.set_res(s.cam_res_x, s.cam_res_y); camera.set_fps(s.cam_fps); + camera.start(); cv::Mat intrinsics_ = cv::Mat::eye(3, 3, CV_32FC1); cv::Mat dist_coeffs_ = cv::Mat::zeros(5, 1, CV_32FC1); intrinsics = cv::Mat(); @@ -183,8 +187,6 @@ void Tracker_PT::start_tracker(QFrame *parent_window) video_layout->addWidget(video_widget); video_frame->setLayout(video_layout); video_widget->resize(video_frame->width(), video_frame->height()); - camera.start(); - apply_settings(); start(); } diff --git a/ftnoir_tracker_pt/ftnoir_tracker_pt_dialog.cpp b/ftnoir_tracker_pt/ftnoir_tracker_pt_dialog.cpp index 70511a3f..780e997b 100644 --- a/ftnoir_tracker_pt/ftnoir_tracker_pt_dialog.cpp +++ b/ftnoir_tracker_pt/ftnoir_tracker_pt_dialog.cpp @@ -89,7 +89,13 @@ TrackerDialog_PT::TrackerDialog_PT() void TrackerDialog_PT::camera_settings() { - open_camera_settings(tracker ? &static_cast(tracker->camera) : nullptr, s.camera_name, tracker ? &tracker->camera_mtx : nullptr); + if (tracker) + { + QMutexLocker l(&tracker->camera_mtx); + open_camera_settings(static_cast(tracker->camera), s.camera_name, &tracker->camera_mtx); + } + else + open_camera_settings(nullptr, s.camera_name, nullptr); } void TrackerDialog_PT::startstop_trans_calib(bool start) @@ -121,11 +127,13 @@ void TrackerDialog_PT::poll_tracker_info() if (tracker) { QString to_print; - - // display caminfo CamInfo info; - tracker->get_cam_info(&info); - to_print = QString::number(info.res_x)+"x"+QString::number(info.res_y)+" @ "+QString::number(info.fps)+" FPS"; + { + QMutexLocker l(&tracker->camera_mtx); + // display caminfo + tracker->get_cam_info(&info); + to_print = QString::number(info.res_x)+"x"+QString::number(info.res_y)+" @ "+QString::number(info.fps)+" FPS"; + } ui.caminfo_label->setText(to_print); // display pointinfo -- cgit v1.2.3 From 4b7fe56f5e1015bf29a65aba5ded6e029f26c859 Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Mon, 20 Jul 2015 12:57:50 +0200 Subject: pt: display label only once --- ftnoir_tracker_pt/ftnoir_tracker_pt_dialog.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/ftnoir_tracker_pt/ftnoir_tracker_pt_dialog.cpp b/ftnoir_tracker_pt/ftnoir_tracker_pt_dialog.cpp index 780e997b..ef680ff4 100644 --- a/ftnoir_tracker_pt/ftnoir_tracker_pt_dialog.cpp +++ b/ftnoir_tracker_pt/ftnoir_tracker_pt_dialog.cpp @@ -150,9 +150,8 @@ void TrackerDialog_PT::poll_tracker_info() } else { - QString to_print = "Tracker offline"; - ui.caminfo_label->setText(to_print); - ui.pointinfo_label->setText(to_print); + ui.caminfo_label->setText("Tracker offline"); + ui.pointinfo_label->setText(""); } } -- cgit v1.2.3 From d933b11c29124abc3e99b6591d0d74b4343f4fc0 Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Mon, 20 Jul 2015 12:58:01 +0200 Subject: pass libs by reference --- opentrack/work.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/opentrack/work.hpp b/opentrack/work.hpp index 39eb12fb..5d1f6b54 100644 --- a/opentrack/work.hpp +++ b/opentrack/work.hpp @@ -20,7 +20,7 @@ struct Work { main_settings& s; - SelectedLibraries libs; + SelectedLibraries& libs; mem tracker; mem sc; WId handle; -- cgit v1.2.3 From faec4b17c7cffb2836b4f364326f494af93bb7c1 Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Mon, 20 Jul 2015 12:58:12 +0200 Subject: cleanup ftnoir code --- ftnoir_tracker_pt/ftnoir_tracker_pt.cpp | 23 ++--------------------- 1 file changed, 2 insertions(+), 21 deletions(-) diff --git a/ftnoir_tracker_pt/ftnoir_tracker_pt.cpp b/ftnoir_tracker_pt/ftnoir_tracker_pt.cpp index 013777bc..48a62c2c 100644 --- a/ftnoir_tracker_pt/ftnoir_tracker_pt.cpp +++ b/ftnoir_tracker_pt/ftnoir_tracker_pt.cpp @@ -190,18 +190,7 @@ void Tracker_PT::start_tracker(QFrame *parent_window) start(); } -#ifndef OPENTRACK_API -void Tracker::StopTracker(bool exit) -{ - set_command(PAUSE); -} -#endif - -#ifdef OPENTRACK_API -#define THeadPoseData double -#endif - -void Tracker_PT::data(THeadPoseData *data) +void Tracker_PT::data(double *data) { if (ever_success) { @@ -237,14 +226,6 @@ void Tracker_PT::data(THeadPoseData *data) } } -//----------------------------------------------------------------------------- -#ifdef OPENTRACK_API #include "ftnoir_tracker_pt_dialog.h" OPENTRACK_DECLARE_TRACKER(Tracker_PT, TrackerDialog_PT, TrackerDll) -#else -#pragma comment(linker, "/export:GetTracker=_GetTracker@0") -OPENTRACK_EXPORT ITrackerPtr __stdcall GetTracker() -{ - return new Tracker_PT; -} -#endif + -- cgit v1.2.3 From 3d78a3cb97ed470f331c5cdf7a3f3b2714a92f78 Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Mon, 20 Jul 2015 13:18:06 +0200 Subject: plug in race in camera release We can crash if start/stop pressed fast eventually. --- ftnoir_tracker_aruco/ftnoir_tracker_aruco.cpp | 4 ++++ ftnoir_tracker_ht/ftnoir_tracker_ht.cpp | 3 +++ ftnoir_tracker_pt/camera.cpp | 3 +++ opentrack/sleep.hpp | 22 ++++++++++++++++++++++ 4 files changed, 32 insertions(+) create mode 100644 opentrack/sleep.hpp 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 #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 #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 #include +#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 + + template + void sleep(unsigned milliseconds) + { + Sleep(milliseconds); + } +#else + #include + + template + void sleep(unsigned milliseconds) + { + usleep(milliseconds * 1000U); // takes microseconds + } +#endif +} -- cgit v1.2.3 From fa58baa2bb84fe51a6b835c72a92a7a9050cbf73 Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Mon, 20 Jul 2015 13:25:05 +0200 Subject: cleanup invalid recursive mutex acquisitions --- ftnoir_tracker_pt/ftnoir_tracker_pt_dialog.cpp | 4 ---- 1 file changed, 4 deletions(-) diff --git a/ftnoir_tracker_pt/ftnoir_tracker_pt_dialog.cpp b/ftnoir_tracker_pt/ftnoir_tracker_pt_dialog.cpp index ef680ff4..40262893 100644 --- a/ftnoir_tracker_pt/ftnoir_tracker_pt_dialog.cpp +++ b/ftnoir_tracker_pt/ftnoir_tracker_pt_dialog.cpp @@ -90,10 +90,7 @@ TrackerDialog_PT::TrackerDialog_PT() void TrackerDialog_PT::camera_settings() { if (tracker) - { - QMutexLocker l(&tracker->camera_mtx); open_camera_settings(static_cast(tracker->camera), s.camera_name, &tracker->camera_mtx); - } else open_camera_settings(nullptr, s.camera_name, nullptr); } @@ -129,7 +126,6 @@ void TrackerDialog_PT::poll_tracker_info() QString to_print; CamInfo info; { - QMutexLocker l(&tracker->camera_mtx); // display caminfo tracker->get_cam_info(&info); to_print = QString::number(info.res_x)+"x"+QString::number(info.res_y)+" @ "+QString::number(info.fps)+" FPS"; -- cgit v1.2.3 From 0c1b4510b3f7a744cc4cad94e0d4dde45925269d Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Mon, 20 Jul 2015 13:25:33 +0200 Subject: cleanup #ifdefs We're the only maintainer of the PT tracker now, so don't clutter the file so much. --- ftnoir_tracker_pt/camera.cpp | 17 ----------------- ftnoir_tracker_pt/camera.h | 15 ++------------- ftnoir_tracker_pt/ftnoir_tracker_pt.h | 12 +++--------- ftnoir_tracker_pt/ftnoir_tracker_pt_dialog.cpp | 17 ++--------------- ftnoir_tracker_pt/ftnoir_tracker_pt_dialog.h | 6 +----- ftnoir_tracker_pt/point_tracker.cpp | 6 ------ 6 files changed, 8 insertions(+), 65 deletions(-) diff --git a/ftnoir_tracker_pt/camera.cpp b/ftnoir_tracker_pt/camera.cpp index 7c4af38f..2989c1fe 100644 --- a/ftnoir_tracker_pt/camera.cpp +++ b/ftnoir_tracker_pt/camera.cpp @@ -12,23 +12,6 @@ using namespace cv; -#ifdef OPENTRACK_API -#else -// ---------------------------------------------------------------------------- -void get_camera_device_names(std::vector& device_names) -{ - videoInput VI; - VI.listDevices(); - std::string device_name; - for(int index = 0; ; ++index) { - device_name = VI.getDeviceName(index); - if (device_name.empty()) break; - device_names.push_back(device_name); - } -} -#endif - -// ---------------------------------------------------------------------------- void Camera::set_device_index(int index) { if (desired_index != index) diff --git a/ftnoir_tracker_pt/camera.h b/ftnoir_tracker_pt/camera.h index 5451ec09..343446ac 100644 --- a/ftnoir_tracker_pt/camera.h +++ b/ftnoir_tracker_pt/camera.h @@ -8,21 +8,10 @@ #pragma once #include -#ifndef OPENTRACK_API -# include -#else -# include -# include -# include -#endif +#include +#include #include -#ifndef OPENTRACK_API -// ---------------------------------------------------------------------------- -void get_camera_device_names(std::vector& device_names); -#endif - -// ---------------------------------------------------------------------------- struct CamInfo { CamInfo() : res_x(0), res_y(0), fps(0) {} diff --git a/ftnoir_tracker_pt/ftnoir_tracker_pt.h b/ftnoir_tracker_pt/ftnoir_tracker_pt.h index aeda7dd7..97aa54aa 100644 --- a/ftnoir_tracker_pt/ftnoir_tracker_pt.h +++ b/ftnoir_tracker_pt/ftnoir_tracker_pt.h @@ -8,9 +8,7 @@ #ifndef FTNOIR_TRACKER_PT_H #define FTNOIR_TRACKER_PT_H -#ifdef OPENTRACK_API -# include "opentrack/plugin-api.hpp" -#endif +#include "opentrack/plugin-api.hpp" #include "ftnoir_tracker_pt_settings.h" #include "camera.h" #include "point_extractor.h" @@ -24,11 +22,7 @@ #include #include #include -#ifndef OPENTRACK_API -# include -#else -# include -#endif +#include #include class TrackerDialog_PT; @@ -48,7 +42,7 @@ public: Affine pose() { QMutexLocker lock(&mutex); return point_tracker.pose(); } int get_n_points() { QMutexLocker lock(&mutex); return point_extractor.get_points().size(); } - void get_cam_info(CamInfo* info) { QMutexLocker lock(&mutex); *info = camera.get_info(); } + void get_cam_info(CamInfo* info) { QMutexLocker lock(&camera_mtx); *info = camera.get_info(); } public slots: void apply_settings(); protected: diff --git a/ftnoir_tracker_pt/ftnoir_tracker_pt_dialog.cpp b/ftnoir_tracker_pt/ftnoir_tracker_pt_dialog.cpp index 40262893..9fdab441 100644 --- a/ftnoir_tracker_pt/ftnoir_tracker_pt_dialog.cpp +++ b/ftnoir_tracker_pt/ftnoir_tracker_pt_dialog.cpp @@ -10,12 +10,8 @@ #include #include #include -#ifndef OPENTRACK_API -# include -#else -# include -# include "opentrack/camera-names.hpp" -#endif +#include +#include "opentrack/camera-names.hpp" #include using namespace std; @@ -28,16 +24,7 @@ TrackerDialog_PT::TrackerDialog_PT() { ui.setupUi( this ); -#ifdef OPENTRACK_API ui.camdevice_combo->addItems(get_camera_names()); -#else - vector device_names; - get_camera_device_names(device_names); - for (vector::iterator iter = device_names.begin(); iter != device_names.end(); ++iter) - { - ui.camdevice_combo->addItem(iter->c_str()); - } -#endif tie_setting(s.camera_name, ui.camdevice_combo); tie_setting(s.cam_res_x, ui.res_x_spin); diff --git a/ftnoir_tracker_pt/ftnoir_tracker_pt_dialog.h b/ftnoir_tracker_pt/ftnoir_tracker_pt_dialog.h index 7e75d2a4..3502e227 100644 --- a/ftnoir_tracker_pt/ftnoir_tracker_pt_dialog.h +++ b/ftnoir_tracker_pt/ftnoir_tracker_pt_dialog.h @@ -8,11 +8,7 @@ #ifndef FTNOIR_TRACKER_PT_DIALOG_H #define FTNOIR_TRACKER_PT_DIALOG_H -#ifdef OPENTRACK_API -# include "opentrack/plugin-api.hpp" -#else -#include "..\ftnoir_tracker_base\ftnoir_tracker_base.h" -#endif +#include "opentrack/plugin-api.hpp" #include "ftnoir_tracker_pt_settings.h" #include "ftnoir_tracker_pt.h" #include "trans_calib.h" diff --git a/ftnoir_tracker_pt/point_tracker.cpp b/ftnoir_tracker_pt/point_tracker.cpp index bae89dbe..f141fe36 100644 --- a/ftnoir_tracker_pt/point_tracker.cpp +++ b/ftnoir_tracker_pt/point_tracker.cpp @@ -33,12 +33,10 @@ static void set_row(Matx33f& m, int i, const Vec3f& v) m(i,2) = v[2]; } -#ifdef OPENTRACK_API static bool d_vals_sort(const pair a, const pair b) { return a.first < b.first; } -#endif void PointModel::get_d_order(const std::vector& points, int d_order[], cv::Vec2f d) const { @@ -50,11 +48,7 @@ void PointModel::get_d_order(const std::vector& points, int d_order[] std::sort(d_vals.begin(), d_vals.end(), -#ifdef OPENTRACK_API d_vals_sort -#else - comp -#endif ); for (unsigned i = 0; i