diff options
author | Stanislaw Halik <sthalik@misaki.pl> | 2016-07-21 14:31:31 +0200 |
---|---|---|
committer | Stanislaw Halik <sthalik@misaki.pl> | 2016-07-23 11:05:33 +0200 |
commit | 42c687b8adb54d3c446483ad085b06d2caf0f1c8 (patch) | |
tree | 115ed3e86f73a7fd718da1dfc25778b3af28f8b0 | |
parent | 72f7a1b07d393e6cfdbac1ecb168a703919fd03e (diff) |
tracker/{aruco,pt}: only check window visibility once every two seconds
The check is becoming more expensive with more positions checked.
-rw-r--r-- | tracker-aruco/pt_video_widget.cpp | 14 | ||||
-rw-r--r-- | tracker-aruco/pt_video_widget.h | 11 | ||||
-rw-r--r-- | tracker-pt/pt_video_widget.cpp | 14 | ||||
-rw-r--r-- | tracker-pt/pt_video_widget.h | 11 |
4 files changed, 34 insertions, 16 deletions
diff --git a/tracker-aruco/pt_video_widget.cpp b/tracker-aruco/pt_video_widget.cpp index 38d7a5e8..749eca0b 100644 --- a/tracker-aruco/pt_video_widget.cpp +++ b/tracker-aruco/pt_video_widget.cpp @@ -13,7 +13,8 @@ PTVideoWidget::PTVideoWidget(QWidget* parent) : QWidget(parent), - freshp(false) + freshp(false), + visible(true) { connect(&timer, SIGNAL(timeout()), this, SLOT(update_and_repaint())); timer.start(50); @@ -44,9 +45,16 @@ void PTVideoWidget::paintEvent(QPaintEvent* e) void PTVideoWidget::update_and_repaint() { - if (is_window_visible(this)) + QMutexLocker l(&mtx); + + if (window_check_timer.elapsed_ms() > 2000) + { + visible = is_window_visible(this); + window_check_timer.start(); + } + + if (visible) { - QMutexLocker foo(&mtx); if (_frame.empty() || !freshp) return; cv::cvtColor(_frame, _frame2, cv::COLOR_RGB2BGR); diff --git a/tracker-aruco/pt_video_widget.h b/tracker-aruco/pt_video_widget.h index c2957876..82de3eab 100644 --- a/tracker-aruco/pt_video_widget.h +++ b/tracker-aruco/pt_video_widget.h @@ -8,10 +8,11 @@ #pragma once -#include <QObject> -#include <QWidget> +#include "opentrack-compat/timer.hpp" #include <opencv2/core/core.hpp> #include <memory> +#include <QObject> +#include <QWidget> #include <QPainter> #include <QPaintEvent> #include <QTimer> @@ -22,17 +23,17 @@ class PTVideoWidget final : public QWidget { Q_OBJECT - public: PTVideoWidget(QWidget *parent); void update_image(const cv::Mat &frame); protected slots: - void paintEvent(QPaintEvent* e) override; + void paintEvent(QPaintEvent*) override; void update_and_repaint(); private: QMutex mtx; QImage texture; QTimer timer; + Timer window_check_timer; cv::Mat _frame, _frame2, _frame3; - bool freshp; + bool freshp, visible; }; diff --git a/tracker-pt/pt_video_widget.cpp b/tracker-pt/pt_video_widget.cpp index 38d7a5e8..749eca0b 100644 --- a/tracker-pt/pt_video_widget.cpp +++ b/tracker-pt/pt_video_widget.cpp @@ -13,7 +13,8 @@ PTVideoWidget::PTVideoWidget(QWidget* parent) : QWidget(parent), - freshp(false) + freshp(false), + visible(true) { connect(&timer, SIGNAL(timeout()), this, SLOT(update_and_repaint())); timer.start(50); @@ -44,9 +45,16 @@ void PTVideoWidget::paintEvent(QPaintEvent* e) void PTVideoWidget::update_and_repaint() { - if (is_window_visible(this)) + QMutexLocker l(&mtx); + + if (window_check_timer.elapsed_ms() > 2000) + { + visible = is_window_visible(this); + window_check_timer.start(); + } + + if (visible) { - QMutexLocker foo(&mtx); if (_frame.empty() || !freshp) return; cv::cvtColor(_frame, _frame2, cv::COLOR_RGB2BGR); diff --git a/tracker-pt/pt_video_widget.h b/tracker-pt/pt_video_widget.h index c2957876..82de3eab 100644 --- a/tracker-pt/pt_video_widget.h +++ b/tracker-pt/pt_video_widget.h @@ -8,10 +8,11 @@ #pragma once -#include <QObject> -#include <QWidget> +#include "opentrack-compat/timer.hpp" #include <opencv2/core/core.hpp> #include <memory> +#include <QObject> +#include <QWidget> #include <QPainter> #include <QPaintEvent> #include <QTimer> @@ -22,17 +23,17 @@ class PTVideoWidget final : public QWidget { Q_OBJECT - public: PTVideoWidget(QWidget *parent); void update_image(const cv::Mat &frame); protected slots: - void paintEvent(QPaintEvent* e) override; + void paintEvent(QPaintEvent*) override; void update_and_repaint(); private: QMutex mtx; QImage texture; QTimer timer; + Timer window_check_timer; cv::Mat _frame, _frame2, _frame3; - bool freshp; + bool freshp, visible; }; |