From da9bc9bb5438002e9711720e2446bf6e4d47e386 Mon Sep 17 00:00:00 2001 From: Stanislaw Halik <sthalik@misaki.pl> Date: Wed, 24 Apr 2013 17:57:29 +0200 Subject: Use atomic ops instead of locking --- ftnoir_tracker_pt/ftnoir_tracker_pt.cpp | 23 +++++++++++------------ ftnoir_tracker_pt/ftnoir_tracker_pt.h | 2 +- 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/ftnoir_tracker_pt/ftnoir_tracker_pt.cpp b/ftnoir_tracker_pt/ftnoir_tracker_pt.cpp index 654e9924..09e758c7 100644 --- a/ftnoir_tracker_pt/ftnoir_tracker_pt.cpp +++ b/ftnoir_tracker_pt/ftnoir_tracker_pt.cpp @@ -39,13 +39,13 @@ Tracker::~Tracker() void Tracker::set_command(Command command) { - QMutexLocker lock(&mutex); + //QMutexLocker lock(&mutex); commands |= command; } void Tracker::reset_command(Command command) { - QMutexLocker lock(&mutex); + //QMutexLocker lock(&mutex); commands &= ~command; } @@ -65,11 +65,10 @@ void Tracker::run() forever { { - - QMutexLocker lock(&mutex); + QMutexLocker lock(&mutex); if (should_quit) break; - + if (commands & ABORT) break; if (commands & PAUSE) continue; commands = 0; @@ -149,27 +148,25 @@ void Tracker::refreshVideo() Mat frame_copy; std::auto_ptr< vector<Vec2f> > points; { -//QMutexLocker lock(&mutex); + //QMutexLocker lock(&mutex); if (!draw_frame || frame.empty()) return; // copy the frame and points from the tracker thread frame_copy = frame.clone(); points = std::auto_ptr< vector<Vec2f> >(new vector<Vec2f>(point_extractor.get_points())); } - + //QMutexLocker lck(&mutex); video_widget->update_image(frame_copy, points); } } void Tracker::StartTracker(QFrame* videoframe) { - const int VIDEO_FRAME_WIDTH = 252; - const int VIDEO_FRAME_HEIGHT = 189; + const int VIDEO_FRAME_WIDTH = videoframe->width(); + const int VIDEO_FRAME_HEIGHT = videoframe->height(); TrackerSettings settings; settings.load_ini(); apply(settings); - camera.start(); - start(); qDebug("Tracker::Initialize"); // setup video frame video_widget = new VideoWidget(videoframe); @@ -180,9 +177,11 @@ void Tracker::StartTracker(QFrame* videoframe) videoframe->setLayout(layout); video_widget->resize(VIDEO_FRAME_WIDTH, VIDEO_FRAME_HEIGHT); videoframe->show(); - reset_command(PAUSE); connect(&timer, SIGNAL(timeout()), this, SLOT(paint_widget()), Qt::QueuedConnection); timer.start(40); + camera.start(); + start(); + reset_command(PAUSE); } void Tracker::paint_widget() { diff --git a/ftnoir_tracker_pt/ftnoir_tracker_pt.h b/ftnoir_tracker_pt/ftnoir_tracker_pt.h index 014cab76..0c45c6b6 100644 --- a/ftnoir_tracker_pt/ftnoir_tracker_pt.h +++ b/ftnoir_tracker_pt/ftnoir_tracker_pt.h @@ -80,7 +80,7 @@ protected: bool bEnableZ; long frame_count; - int commands; + volatile int commands; VideoWidget* video_widget; Timer time; -- cgit v1.2.3