summaryrefslogtreecommitdiffhomepage
path: root/tracker-pt/ftnoir_tracker_pt.h
diff options
context:
space:
mode:
Diffstat (limited to 'tracker-pt/ftnoir_tracker_pt.h')
-rw-r--r--tracker-pt/ftnoir_tracker_pt.h111
1 files changed, 46 insertions, 65 deletions
diff --git a/tracker-pt/ftnoir_tracker_pt.h b/tracker-pt/ftnoir_tracker_pt.h
index b7b0019a..a793f94b 100644
--- a/tracker-pt/ftnoir_tracker_pt.h
+++ b/tracker-pt/ftnoir_tracker_pt.h
@@ -9,90 +9,71 @@
#pragma once
#include "api/plugin-api.hpp"
-#include "ftnoir_tracker_pt_settings.h"
-
-#include "numeric.hpp"
-
-#include "camera.h"
-#include "point_extractor.h"
+#include "pt-api.hpp"
#include "point_tracker.h"
-#include "cv/video-widget.hpp"
-#include "compat/util.hpp"
+#include "cv/numeric.hpp"
+#include "video/video-widget.hpp"
+#include "point-filter.hpp"
-#include <QCoreApplication>
-#include <QThread>
-#include <QMutex>
-#include <QMutexLocker>
-#include <QTime>
-#include <QLayout>
-#include <QSize>
#include <atomic>
#include <memory>
#include <vector>
-class TrackerDialog_PT;
+#include <QThread>
+#include <QMutex>
+#include <QLayout>
-namespace impl {
+namespace pt_impl {
-using namespace types;
+class TrackerDialog_PT;
+
+using namespace numeric_types;
-class Tracker_PT : public QThread, public ITracker
+struct Tracker_PT : QThread, ITracker
{
- Q_OBJECT
- friend class camera_dialog;
- friend class ::TrackerDialog_PT;
-public:
- Tracker_PT();
+ friend class TrackerDialog_PT;
+
+ template<typename t> using pointer = pt_pointer<t>;
+
+ explicit Tracker_PT(pointer<pt_runtime_traits> const& pt_runtime_traits);
~Tracker_PT() override;
- void start_tracker(QFrame* parent_window) override;
+ module_status start_tracker(QFrame* parent_window) override;
void data(double* data) override;
+ bool center() override;
- Affine pose();
int get_n_points();
- bool get_cam_info(CamInfo* info);
-public slots:
- void maybe_reopen_camera();
- void set_fov(int value);
-protected:
- void run() override;
+ [[nodiscard]] bool get_cam_info(pt_camera_info& info);
+ Affine pose() const;
+
private:
- // thread commands
- enum Command : unsigned char
- {
- ABORT = 1<<0
- };
- void set_command(Command command);
- void reset_command(Command command);
-
- QMutex camera_mtx;
- QMutex data_mtx;
- Camera camera;
- PointExtractor point_extractor;
- PointTracker point_tracker;
-
- qshared<cv_video_widget> video_widget;
- qshared<QLayout> layout;
-
- settings_pt s;
- cv::Mat frame, preview_frame;
- std::vector<vec2> points;
+ void run() override;
+ [[nodiscard]] bool check_camera();
- QSize preview_size;
+ pointer<pt_runtime_traits> traits;
- volatile unsigned point_count;
- volatile unsigned char commands;
- volatile bool ever_success;
+ PointTracker point_tracker;
- static constexpr f rad2deg = f(180/M_PI);
- //static constexpr float deg2rad = float(M_PI/180);
-};
+ pt_settings s;
-} // ns impl
+ std::unique_ptr<QLayout> layout;
+ std::vector<vec2> points;
-class PT_metadata : public Metadata
-{
- QString name() { return QString(QCoreApplication::translate("PT_metadata", "PointTracker 1.1")); }
- QIcon icon() { return QIcon(":/Resources/Logo_IR.png"); }
+ int preview_width = 320, preview_height = 240;
+
+ pointer<pt_point_extractor> point_extractor;
+ pointer<pt_camera> camera;
+ pointer<video_widget> widget;
+ pointer<pt_frame> frame;
+ pointer<pt_preview> preview_frame;
+
+ std::atomic<unsigned> point_count { 0 };
+ std::atomic<bool> ever_success = false;
+ std::atomic<bool> reopen_camera_flag = true;
+ std::atomic<bool> open_camera_dialog_flag = false;
+ mutable QMutex center_lock, data_lock;
+ point_filter filter{s};
};
-using impl::Tracker_PT;
+} // ns pt_impl
+
+using Tracker_PT = pt_impl::Tracker_PT;