diff options
author | Stanislaw Halik <sthalik@misaki.pl> | 2016-06-09 11:43:04 +0200 |
---|---|---|
committer | Stanislaw Halik <sthalik@misaki.pl> | 2016-06-09 11:43:04 +0200 |
commit | 7b07d63e8129b620d275845c5d79573aac72a800 (patch) | |
tree | 40677974ca967af42ccd30cd9b8c53c279d35bb5 /tracker-pt | |
parent | 1b9dcf43be582c2719b9d5bf10b15acd59eac944 (diff) |
tracker/pt: only reset camera input when needed
Diffstat (limited to 'tracker-pt')
-rw-r--r-- | tracker-pt/camera.cpp | 12 | ||||
-rw-r--r-- | tracker-pt/camera.h | 9 | ||||
-rw-r--r-- | tracker-pt/ftnoir_tracker_pt.cpp | 30 |
3 files changed, 39 insertions, 12 deletions
diff --git a/tracker-pt/camera.cpp b/tracker-pt/camera.cpp index c995c11b..85a5a93b 100644 --- a/tracker-pt/camera.cpp +++ b/tracker-pt/camera.cpp @@ -9,9 +9,14 @@ #include <string> #include <QDebug> #include "opentrack-compat/sleep.hpp" +#include "opentrack-compat/camera-names.hpp" -void Camera::set_device_index(int index) +void Camera::set_device(const QString& name) { + const int index = camera_name_to_index(name); + + desired_name = name; + if (desired_index != index) { desired_index = index; @@ -24,6 +29,11 @@ void Camera::set_device_index(int index) } } +QString Camera::get_desired_name() const +{ + return desired_name; +} + void Camera::set_fps(int fps) { if (cam_desired.fps != fps) diff --git a/tracker-pt/camera.h b/tracker-pt/camera.h index e73d9dff..615f7142 100644 --- a/tracker-pt/camera.h +++ b/tracker-pt/camera.h @@ -11,6 +11,7 @@ #include <memory> #include <opencv2/highgui.hpp> #include <string> +#include <QString> struct CamInfo { @@ -35,7 +36,7 @@ public: void restart() { stop(); start(); } // calls corresponding template methods and reinitializes frame rate calculation - void set_device_index(int index); + void set_device(const QString& name); void set_fps(int fps); void set_res(int x_res, int y_res); @@ -46,6 +47,7 @@ public: bool get_info(CamInfo &ret); CamInfo get_desired() const { return cam_desired; } + QString get_desired_name() const; protected: // get a frame from the camera virtual bool _get_frame(cv::Mat* frame) = 0; @@ -58,10 +60,11 @@ private: float dt_valid; float dt_mean; protected: - int desired_index; - int active_index; CamInfo cam_info; CamInfo cam_desired; + QString desired_name; + int desired_index; + int active_index; }; inline Camera::~Camera() {} diff --git a/tracker-pt/ftnoir_tracker_pt.cpp b/tracker-pt/ftnoir_tracker_pt.cpp index 6dd40ceb..14813b62 100644 --- a/tracker-pt/ftnoir_tracker_pt.cpp +++ b/tracker-pt/ftnoir_tracker_pt.cpp @@ -153,15 +153,29 @@ void Tracker_PT::run() void Tracker_PT::apply_settings() { - qDebug()<<"Tracker:: Applying settings"; + qDebug() << "Tracker:: Applying settings"; QMutexLocker l(&camera_mtx); - camera.stop(); - camera.set_device_index(camera_name_to_index(s.camera_name)); - camera.set_res(s.cam_res_x, s.cam_res_y); - camera.set_fps(s.cam_fps); - camera.start(); - frame = cv::Mat(); - qDebug()<<"Tracker::apply ends"; + + CamInfo info = camera.get_desired(); + const QString name = camera.get_desired_name(); + + if (s.cam_fps != info.fps || + s.cam_res_x != info.res_x || + s.cam_res_y != info.res_y || + s.camera_name != name) + { + qDebug() << "pt: camera reset needed"; + camera.stop(); + camera.set_device(s.camera_name); + camera.set_res(s.cam_res_x, s.cam_res_y); + camera.set_fps(s.cam_fps); + frame = cv::Mat(); + camera.start(); + } + else + qDebug() << "pt: camera not needing reset"; + + qDebug() << "Tracker::apply ends"; } void Tracker_PT::start_tracker(QFrame *parent_window) |