From f20687d2d5f9b0542fedf0f45291024846d30d28 Mon Sep 17 00:00:00 2001 From: Stéphane Lenclud Date: Mon, 1 Apr 2019 21:10:53 +0200 Subject: Easy Tracker: Renaming some files --- tracker-easy/tracker-easy-api.h | 128 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 128 insertions(+) create mode 100644 tracker-easy/tracker-easy-api.h (limited to 'tracker-easy/tracker-easy-api.h') diff --git a/tracker-easy/tracker-easy-api.h b/tracker-easy/tracker-easy-api.h new file mode 100644 index 00000000..81a52f7f --- /dev/null +++ b/tracker-easy/tracker-easy-api.h @@ -0,0 +1,128 @@ +#pragma once + +#include "pt-settings.hpp" + +#include "cv/numeric.hpp" +#include "options/options.hpp" +#include "video/camera.hpp" + +#include +#include +#include + +#include + +#include +#include + +#ifdef __clang__ +# pragma clang diagnostic push +# pragma clang diagnostic ignored "-Wweak-vtables" +#endif + +const int KPointCount = 3; + +struct pt_camera_info final +{ + using f = numeric_types::f; + + pt_camera_info(); + static f get_focal_length(f fov, int res_x, int res_y); + + f fov = 0; + f fps = 0; + + int res_x = 0; + int res_y = 0; + QString name; +}; + +struct pt_pixel_pos_mixin +{ + using f = numeric_types::f; + + static std::tuple to_pixel_pos(f x, f y, int w, int h); + static std::tuple to_screen_pos(f px, f py, int w, int h); +}; + +struct pt_frame : pt_pixel_pos_mixin +{ + pt_frame(); + virtual ~pt_frame(); + + template + t* as() & + { + return static_cast(this); + } + + template + t const* as_const() const& + { + return static_cast(this); + } +}; + +struct pt_preview : pt_frame +{ + virtual pt_preview& operator=(const pt_frame&) = 0; + virtual QImage get_bitmap() = 0; + virtual void draw_head_center(f x, f y) = 0; +}; + +struct pt_camera +{ + using result = std::tuple; + using f = numeric_types::f; + + pt_camera(); + virtual ~pt_camera(); + + [[nodiscard]] virtual bool start(const QString& name, int fps, int res_x, int res_y) = 0; + virtual void stop() = 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(f value) = 0; + virtual void show_camera_settings() = 0; + + video::impl::camera::info info; +}; + +struct pt_point_extractor : pt_pixel_pos_mixin +{ + using vec2 = numeric_types::vec2; + using f = numeric_types::f; + + pt_point_extractor(); + virtual ~pt_point_extractor(); + virtual void extract_points(const pt_frame& image, pt_preview& preview_frame, std::vector& points, std::vector& imagePoints) = 0; + + static f threshold_radius_value(int w, int h, int threshold); +}; + +struct pt_runtime_traits +{ + template using pointer = std::shared_ptr; + + pt_runtime_traits(); + virtual ~pt_runtime_traits(); + + virtual pointer make_camera() const = 0; + virtual pointer make_point_extractor() const = 0; + virtual pointer make_frame() const = 0; + virtual pointer make_preview(int w, int h) const = 0; + virtual QString get_module_name() const = 0; +}; + +template +using pt_pointer = typename pt_runtime_traits::pointer; + +#ifdef __clang__ +# pragma clang diagnostic pop +#endif -- cgit v1.2.3