diff options
Diffstat (limited to 'tracker-pt/ftnoir_tracker_pt.h')
| -rw-r--r-- | tracker-pt/ftnoir_tracker_pt.h | 111 |
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; |
