diff options
Diffstat (limited to 'tracker-pt/pt-api.hpp')
-rw-r--r-- | tracker-pt/pt-api.hpp | 92 |
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 |