diff options
| author | Stanislaw Halik <sthalik@misaki.pl> | 2022-06-17 11:58:04 +0200 | 
|---|---|---|
| committer | Stanislaw Halik <sthalik@misaki.pl> | 2022-06-17 12:19:25 +0200 | 
| commit | 2aee2a94ea53620e3da7f976875ca4101eec780d (patch) | |
| tree | f2ff98bbf54040c9dcf48a7edb77248755d27f50 | |
| parent | 3f273418b564f8ca93ec687fa8ab7809099e6c67 (diff) | |
tracker/wii: clean up a little
| -rw-r--r-- | tracker-wii/wii_camera.cpp | 61 | ||||
| -rw-r--r-- | tracker-wii/wii_camera.h | 40 | ||||
| -rw-r--r-- | tracker-wii/wii_point_extractor.cpp | 77 | 
3 files changed, 82 insertions, 96 deletions
| diff --git a/tracker-wii/wii_camera.cpp b/tracker-wii/wii_camera.cpp index 98d180bf..1e05a11c 100644 --- a/tracker-wii/wii_camera.cpp +++ b/tracker-wii/wii_camera.cpp @@ -15,11 +15,9 @@  #include "wii_camera.h"  #include "wii_frame.hpp" -#include "compat/sleep.hpp"  #include "compat/math-imports.hpp"  #include <opencv2/imgproc.hpp> -  #include <bluetoothapis.h>  using namespace pt_module; @@ -41,46 +39,46 @@ WIICamera::~WIICamera()  QString WIICamera::get_desired_name() const  { -    return desired_name; +	return QStringLiteral("Wii");  }  QString WIICamera::get_active_name() const  { -    return active_name; +	return get_desired_name();  }  void WIICamera::show_camera_settings()  { -  }  WIICamera::result WIICamera::get_info() const  { -    if (cam_info.res_x == 0 || cam_info.res_y == 0) -        return result(false, pt_camera_info()); -    return result(true, cam_info); +	if (cam_info.res_x == 0 || cam_info.res_y == 0) +		return result(false, pt_camera_info()); +	return result(true, cam_info);  }  WIICamera::result WIICamera::get_frame(pt_frame& frame_)  { -    cv::Mat& frame = frame_.as<WIIFrame>()->mat; +	cv::Mat& frame = frame_.as<WIIFrame>()->mat;  	struct wii_info& wii = frame_.as<WIIFrame>()->wii; +	const wii_camera_status new_frame = get_frame(frame); -    const wii_camera_status new_frame = get_frame(frame);  	//create a fake blank frame -	frame = cv::Mat(cam_info.res_x, cam_info.res_y, CV_8UC3, cv::Scalar(0, 0, 0)); +	frame.create(cam_info.res_x, cam_info.res_y, CV_8UC3); +	frame.setTo({0});  	wii.status = new_frame; -    switch (new_frame) -    { +	switch (new_frame) +	{  	case wii_cam_data_change: -        get_status(wii); -        get_points(wii); +		get_status(wii); +		get_points(wii);  		break;  	case wii_cam_data_no_change:  		return result(false, cam_info); -    default: -        break; +	default: +		break;  	}  	return result(true, cam_info); @@ -88,30 +86,28 @@ WIICamera::result WIICamera::get_frame(pt_frame& frame_)  bool WIICamera::start(const pt_settings&)  { +	if (m_pDev) +		return true;  	m_pDev = std::make_unique<wiimote>();  	m_pDev->ChangedCallback = on_state_change;  	m_pDev->CallbackTriggerFlags = (state_change_flags)(CONNECTED |  		EXTENSION_CHANGED |  		MOTIONPLUS_CHANGED); -        return true; +	return true;  }  void WIICamera::stop()  { -    desired_name = QString(); -    active_name = QString(); -    cam_info = pt_camera_info(); -    cam_desired = pt_camera_info(); -    onExit = true; - -    if (m_pDev) -    { -        m_pDev->ChangedCallback = nullptr; -        m_pDev->Disconnect(); -        m_pDev = nullptr; -    } - -	Beep(1000, 200); +	if (!m_pDev) +		return; + +	cam_info = {}; +	cam_desired = {}; +	pitch_ = 0; roll_ = 0; + +	m_pDev->ChangedCallback = nullptr; +	m_pDev->Disconnect(); +	m_pDev = nullptr;  }  #ifdef __MINGW32__ @@ -149,7 +145,6 @@ wii_camera_status WIICamera::pair()  	while (ibtidx < max_devices && BluetoothFindNextRadio(&bt_param, hbtlist + ibtidx));  	BluetoothFindRadioClose(hbt); -  	int i;  	bool error = false;  	for (i = 0; i < ibtidx; i++) diff --git a/tracker-wii/wii_camera.h b/tracker-wii/wii_camera.h index 038e25e7..3a7993aa 100644 --- a/tracker-wii/wii_camera.h +++ b/tracker-wii/wii_camera.h @@ -27,47 +27,39 @@ namespace pt_module {  struct WIICamera final : pt_camera  { -    WIICamera(const QString& module_name); -    ~WIICamera() override; +	WIICamera(const QString& module_name); +	~WIICamera() override; -    bool start(const pt_settings&) override; -    void stop() override; +	bool start(const pt_settings&) override; +	void stop() override; -    result get_frame(pt_frame& Frame) override; -    result get_info() const override; +	result get_frame(pt_frame& Frame) override; +	result get_info() const override; -    pt_camera_info get_desired() const override { return cam_desired; } -    QString get_desired_name() const override; -    QString get_active_name() const override; +	pt_camera_info get_desired() const override { return cam_desired; } +	QString get_desired_name() const override; +	QString get_active_name() const override; -    void set_fov(f x) override { (void) x; } -    void show_camera_settings() override; +	void set_fov(f x) override { (void) x; } +	void show_camera_settings() override;  private:  	std::unique_ptr<wiimote> m_pDev;  	static void on_state_change(wiimote &remote,  		state_change_flags changed,  		const wiimote_state &new_state); -	bool onExit = false;  	wii_camera_status pair();  	wii_camera_status get_frame(cv::Mat& Frame);  	bool get_points(struct wii_info& wii);  	void get_status(struct wii_info& wii); -    double dt_mean = 0; +	pt_camera_info cam_info; +	pt_camera_info cam_desired; +	int pitch_ = 0, roll_ = 0; +	pt_settings s; -    Timer t; - -    pt_camera_info cam_info; -    pt_camera_info cam_desired; -    QString desired_name, active_name; - -    pt_settings s; - -    int pitch_ = 0, roll_ = 0; - -    static constexpr inline double dt_eps = 1./384; +	static constexpr inline double dt_eps = 1./384;  };  } // ns pt_module diff --git a/tracker-wii/wii_point_extractor.cpp b/tracker-wii/wii_point_extractor.cpp index 6f86da1d..4f1f92b9 100644 --- a/tracker-wii/wii_point_extractor.cpp +++ b/tracker-wii/wii_point_extractor.cpp @@ -27,7 +27,6 @@ using namespace pt_module;  WIIPointExtractor::WIIPointExtractor(const QString& module_name) : s(module_name)  { -  }  //define a temp draw function @@ -35,8 +34,8 @@ void WIIPointExtractor::draw_point(cv::Mat& preview_frame, const vec2& p, const  {  	static constexpr int len = 9; -    cv::Point p2(iround(p[0] * preview_frame.cols + preview_frame.cols / 2.f), -                 iround(-p[1] * preview_frame.cols + preview_frame.rows / 2.f)); +	cv::Point p2(iround(p[0] * preview_frame.cols + preview_frame.cols / 2.f), +		 iround(-p[1] * preview_frame.cols + preview_frame.rows / 2.f));  	cv::line(preview_frame,  		cv::Point(p2.x - len, p2.y), @@ -48,7 +47,7 @@ void WIIPointExtractor::draw_point(cv::Mat& preview_frame, const vec2& p, const  		cv::Point(p2.x, p2.y + len),  		color,  		thickness); -}; +}  void WIIPointExtractor::draw_points(cv::Mat& preview_frame, const struct wii_info& wii)  { @@ -75,11 +74,11 @@ void WIIPointExtractor::draw_points(cv::Mat& preview_frame, const struct wii_inf  void WIIPointExtractor::draw_bg(cv::Mat& preview_frame, const struct wii_info& wii)  {  	//draw battery status -    cv::line(preview_frame, -             cv::Point(0, 0), -             cv::Point(preview_frame.cols*wii.BatteryPercent / 100, 0), -             (wii.bBatteryDrained ? cv::Scalar(255, 0, 0) : cv::Scalar(0, 140, 0)), -             2); +	cv::line(preview_frame, +		cv::Point(0, 0), +		cv::Point(preview_frame.cols*wii.BatteryPercent / 100, 0), +		(wii.bBatteryDrained ? cv::Scalar(255, 0, 0) : cv::Scalar(0, 140, 0)), +		2);  	//draw horizon  	int pdelta = iround(preview_frame.rows / 4.f * tan(wii.Pitch * pi / 180.f)); @@ -100,38 +99,38 @@ void WIIPointExtractor::extract_points(const pt_frame& frame_,  	const struct wii_info& wii = frame_.as_const<WIIFrame>()->wii;  	cv::Mat& preview_frame = *preview_frame_.as<WIIPreview>(); -    map_points(wii, points); -    if (preview_visible && wii.status == wii_cam_data_change) -    { -        draw_bg(preview_frame, wii); -        draw_points(preview_frame, wii); -    } +	map_points(wii, points); +	if (preview_visible && wii.status == wii_cam_data_change) +	{ +		draw_bg(preview_frame, wii); +		draw_points(preview_frame, wii); +	}  }  bool WIIPointExtractor::map_points(const struct wii_info& wii, std::vector<vec2>& points)  { -    constexpr int W = 1024; -    constexpr int H = 768; -    points.reserve(4); -    points.clear(); - -    for (unsigned index = 0; index < 4; index++) // NOLINT(modernize-loop-convert) -    { -        const struct wii_info_points &dot = wii.Points[index]; -        if (dot.bvis) { -            //qDebug() << "wii:" << dot.RawX << "+" << dot.RawY; -            //anti-clockwise rotate the 2D point -            const float RX = W - dot.ux; -            const float RY = H - dot.uy; -            //vec2 dt((dot.RawX - W / 2.0f) / W, -(dot.RawY - H / 2.0f) / W); -            //vec2 dt((RX - W / 2.0f) / W, -(RY - H / 2.0f) / W); -            //vec2 dt((2.0f*RX - W) / W, -(2.0f*RY - H ) / W); -            vec2 dt; -            std::tie(dt[0], dt[1]) = to_screen_pos(RX, RY, W, H); - -            points.push_back(dt); -        } -    } - -    return points.size() >= PointModel::N_POINTS; +	constexpr int W = 1024; +	constexpr int H = 768; +	points.reserve(4); +	points.clear(); + +	for (unsigned index = 0; index < 4; index++) // NOLINT(modernize-loop-convert) +	{ +		const struct wii_info_points &dot = wii.Points[index]; +		if (dot.bvis) { +			//qDebug() << "wii:" << dot.RawX << "+" << dot.RawY; +			//anti-clockwise rotate the 2D point +			const float RX = W - dot.ux; +			const float RY = H - dot.uy; +			//vec2 dt((dot.RawX - W / 2.0f) / W, -(dot.RawY - H / 2.0f) / W); +			//vec2 dt((RX - W / 2.0f) / W, -(RY - H / 2.0f) / W); +			//vec2 dt((2.0f*RX - W) / W, -(2.0f*RY - H ) / W); +			vec2 dt; +			std::tie(dt[0], dt[1]) = to_screen_pos(RX, RY, W, H); + +			points.push_back(dt); +		} +	} + +	return points.size() >= PointModel::N_POINTS;  } | 
