summaryrefslogtreecommitdiffhomepage
path: root/tracker-pt/pt-api.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'tracker-pt/pt-api.hpp')
-rw-r--r--tracker-pt/pt-api.hpp92
1 files changed, 60 insertions, 32 deletions
diff --git a/tracker-pt/pt-api.hpp b/tracker-pt/pt-api.hpp
index de097a04..15021ff3 100644
--- a/tracker-pt/pt-api.hpp
+++ b/tracker-pt/pt-api.hpp
@@ -1,42 +1,47 @@
#pragma once
-#include "export.hpp"
-
#include "pt-settings.hpp"
#include "cv/numeric.hpp"
#include "options/options.hpp"
#include <tuple>
-#include <type_traits>
+#include <vector>
#include <memory>
-#include <opencv2/core.hpp>
-
#include <QImage>
+#include <QString>
-struct OTR_PT_EXPORT pt_camera_info final
+#ifdef __clang__
+# pragma clang diagnostic push
+# pragma clang diagnostic ignored "-Wweak-vtables"
+#endif
+
+struct pt_camera_info final
{
- typedef typename types::f f;
+ using f = numeric_types::f;
pt_camera_info();
- static double get_focal_length(f fov, int res_x, int res_y);
+ static f get_focal_length(f fov, int res_x, int res_y);
- double fov = 0;
- double fps = 0;
+ f fov = 0;
+ f fps = 0;
int res_x = 0;
int res_y = 0;
- int idx = -1;
+ QString name;
+ bool use_mjpeg = false;
};
-struct OTR_PT_EXPORT pt_pixel_pos_mixin
+struct pt_pixel_pos_mixin
{
- static std::tuple<double, double> to_pixel_pos(double x, double y, int w, int h);
- static std::tuple<double, double> to_screen_pos(double px, double py, int w, int h);
+ using f = numeric_types::f;
+
+ static std::tuple<f, f> to_pixel_pos(f x, f y, int w, int h);
+ static std::tuple<f, f> to_screen_pos(f px, f py, int w, int h);
};
-struct OTR_PT_EXPORT pt_frame : pt_pixel_pos_mixin
+struct pt_frame : pt_pixel_pos_mixin
{
pt_frame();
virtual ~pt_frame();
@@ -44,62 +49,78 @@ struct OTR_PT_EXPORT pt_frame : pt_pixel_pos_mixin
template<typename t>
t* as() &
{
- using u = std::decay_t<t>;
- static_assert(std::is_convertible_v<u*, pt_frame*>, "must be derived from pt_image");
-
return static_cast<t*>(this);
}
template<typename t>
t const* as_const() const&
{
- return const_cast<pt_frame*>(this)->as<const t>();
+ return static_cast<t const*>(this);
}
+
+protected:
+ pt_frame(const pt_frame&) = default;
+ pt_frame(pt_frame&&) = default;
+ pt_frame& operator=(const pt_frame&) = default;
+ pt_frame& operator=(pt_frame&&) = default;
};
-struct OTR_PT_EXPORT pt_preview : pt_frame
+struct pt_preview : pt_frame
{
- virtual pt_preview& operator=(const pt_frame&) = 0;
+ pt_preview() = default;
+
+ OTR_DISABLE_MOVE_COPY(pt_preview);
+
+ virtual void set_last_frame(const pt_frame&) = 0;
virtual QImage get_bitmap() = 0;
- virtual void draw_head_center(double x, double y) = 0;
+ virtual void draw_head_center(f x, f y) = 0;
};
-struct OTR_PT_EXPORT pt_camera
+struct pt_camera
{
using result = std::tuple<bool, pt_camera_info>;
+ using f = numeric_types::f;
pt_camera();
virtual ~pt_camera();
- virtual warn_result_unused bool start(int idx, int fps, int res_x, int res_y) = 0;
+ OTR_DISABLE_MOVE_COPY(pt_camera);
+
+ [[nodiscard]] virtual bool start(const pt_settings& s) = 0;
virtual void stop() = 0;
- virtual warn_result_unused result get_frame(pt_frame& frame) = 0;
- virtual warn_result_unused result get_info() const = 0;
+ virtual result get_frame(pt_frame& frame) = 0;
+ virtual result get_info() const = 0;
virtual pt_camera_info get_desired() const = 0;
virtual QString get_desired_name() const = 0;
virtual QString get_active_name() const = 0;
- virtual void set_fov(double value) = 0;
+ virtual void set_fov(f value) = 0;
virtual void show_camera_settings() = 0;
+ virtual f deadzone_amount() const { return 1; }
};
-struct OTR_PT_EXPORT pt_point_extractor : pt_pixel_pos_mixin
+struct pt_point_extractor : pt_pixel_pos_mixin
{
- using vec2 = types::vec2;
+ using vec2 = numeric_types::vec2;
+ using f = numeric_types::f;
+
+ OTR_DISABLE_MOVE_COPY(pt_point_extractor);
pt_point_extractor();
virtual ~pt_point_extractor();
- virtual void extract_points(const pt_frame& image, pt_preview& preview_frame, std::vector<vec2>& points) = 0;
+ virtual void extract_points(const pt_frame& image, pt_preview& preview_frame, bool preview_visible, std::vector<vec2>& points) = 0;
- static double threshold_radius_value(int w, int h, int threshold);
+ static f threshold_radius_value(int w, int h, int threshold);
};
-struct OTR_PT_EXPORT pt_runtime_traits
+struct pt_runtime_traits
{
template<typename t> using pointer = std::shared_ptr<t>;
+ OTR_DISABLE_MOVE_COPY(pt_runtime_traits);
+
pt_runtime_traits();
virtual ~pt_runtime_traits();
@@ -109,3 +130,10 @@ struct OTR_PT_EXPORT pt_runtime_traits
virtual pointer<pt_preview> make_preview(int w, int h) const = 0;
virtual QString get_module_name() const = 0;
};
+
+template<typename t>
+using pt_pointer = typename pt_runtime_traits::pointer<t>;
+
+#ifdef __clang__
+# pragma clang diagnostic pop
+#endif