summaryrefslogtreecommitdiffhomepage
path: root/FTNoIR_Tracker_PT
diff options
context:
space:
mode:
Diffstat (limited to 'FTNoIR_Tracker_PT')
-rw-r--r--FTNoIR_Tracker_PT/boost-compat.h3
-rw-r--r--FTNoIR_Tracker_PT/ftnoir_tracker_pt.cpp6
-rw-r--r--FTNoIR_Tracker_PT/ftnoir_tracker_pt.h9
-rw-r--r--FTNoIR_Tracker_PT/ftnoir_tracker_pt_dialog.h2
-rw-r--r--FTNoIR_Tracker_PT/pt_video_widget.cpp52
-rw-r--r--FTNoIR_Tracker_PT/pt_video_widget.h (renamed from FTNoIR_Tracker_PT/video_widget.h)43
-rw-r--r--FTNoIR_Tracker_PT/video_widget.cpp145
7 files changed, 65 insertions, 195 deletions
diff --git a/FTNoIR_Tracker_PT/boost-compat.h b/FTNoIR_Tracker_PT/boost-compat.h
index aea5e1a2..b5be237a 100644
--- a/FTNoIR_Tracker_PT/boost-compat.h
+++ b/FTNoIR_Tracker_PT/boost-compat.h
@@ -1,6 +1,5 @@
#pragma once
#include <memory>
-#define shared_ptr auto_ptr
namespace boost {
- using std::auto_ptr;
+ using std::shared_ptr;
};
diff --git a/FTNoIR_Tracker_PT/ftnoir_tracker_pt.cpp b/FTNoIR_Tracker_PT/ftnoir_tracker_pt.cpp
index d4741101..745d98e9 100644
--- a/FTNoIR_Tracker_PT/ftnoir_tracker_pt.cpp
+++ b/FTNoIR_Tracker_PT/ftnoir_tracker_pt.cpp
@@ -12,10 +12,6 @@
#include <QFile>
#include <QCoreApplication>
-#ifdef OPENTRACK_API
-# define VideoWidget VideoWidget2
-#endif
-
using namespace std;
using namespace cv;
using namespace boost;
@@ -192,7 +188,7 @@ void Tracker::update_show_video_widget()
{
const int VIDEO_FRAME_WIDTH = 252;
const int VIDEO_FRAME_HEIGHT = 189;
- video_widget = new VideoWidget(video_frame, this);
+ video_widget = new PTVideoWidget(video_frame, this);
QHBoxLayout* video_layout = new QHBoxLayout();
video_layout->setContentsMargins(0, 0, 0, 0);
video_layout->addWidget(video_widget);
diff --git a/FTNoIR_Tracker_PT/ftnoir_tracker_pt.h b/FTNoIR_Tracker_PT/ftnoir_tracker_pt.h
index 7dcfc8bb..2430f5f0 100644
--- a/FTNoIR_Tracker_PT/ftnoir_tracker_pt.h
+++ b/FTNoIR_Tracker_PT/ftnoir_tracker_pt.h
@@ -11,15 +11,13 @@
#ifdef OPENTRACK_API
# include "ftnoir_tracker_base/ftnoir_tracker_base.h"
# include "facetracknoir/global-settings.h"
-#else
-# include "..\ftnoir_tracker_base\ftnoir_tracker_base.h"
#endif
#include "ftnoir_tracker_pt_settings.h"
#include "frame_observer.h"
#include "camera.h"
#include "point_extractor.h"
#include "point_tracker.h"
-#include "video_widget.h"
+#include "pt_video_widget.h"
#include "timer.h"
#include <QThread>
@@ -82,7 +80,6 @@ protected:
// --- tracking chain ---
#ifdef OPENTRACK_API
-#define VideoWidget VideoWidget2
CVCamera camera;
#else
VICamera camera;
@@ -101,7 +98,9 @@ protected:
void update_show_video_widget();
bool show_video_widget;
- VideoWidget* video_widget;
+#ifdef OPENTRACK_API
+ PTVideoWidget* video_widget;
+#endif
QFrame* video_frame;
// --- misc ---
diff --git a/FTNoIR_Tracker_PT/ftnoir_tracker_pt_dialog.h b/FTNoIR_Tracker_PT/ftnoir_tracker_pt_dialog.h
index 14df7ede..3e1af50a 100644
--- a/FTNoIR_Tracker_PT/ftnoir_tracker_pt_dialog.h
+++ b/FTNoIR_Tracker_PT/ftnoir_tracker_pt_dialog.h
@@ -16,7 +16,7 @@
#include "ftnoir_tracker_pt_settings.h"
#include "ftnoir_tracker_pt.h"
#include "trans_calib.h"
-#include "video_widget.h"
+#include "pt_video_widget.h"
#include "ui_FTNoIR_PT_Controls.h"
#include <QTimer>
diff --git a/FTNoIR_Tracker_PT/pt_video_widget.cpp b/FTNoIR_Tracker_PT/pt_video_widget.cpp
new file mode 100644
index 00000000..03c42fc7
--- /dev/null
+++ b/FTNoIR_Tracker_PT/pt_video_widget.cpp
@@ -0,0 +1,52 @@
+/* Copyright (c) 2012 Patrick Ruoff
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * 20130312, WVR: Add 7 lines to resizeGL after resize_frame. This should lower CPU-load.
+ */
+
+#include "pt_video_widget.h"
+
+#include <QDebug>
+#include <QHBoxLayout>
+
+using namespace cv;
+using namespace std;
+
+void PTVideoWidget::update_image(const cv::Mat& frame)
+{
+ QMutexLocker foo(&mtx);
+ QImage qframe = QImage(frame.cols, frame.rows, QImage::Format_RGB888);
+ uchar* data = qframe.bits();
+ const int pitch = qframe.bytesPerLine();
+ for (int y = 0; y < frame.rows; y++)
+ for (int x = 0; x < frame.cols; x++)
+ {
+ const int pos = 3 * (y*frame.cols + x);
+ data[y * pitch + x * 3 + 0] = frame.data[pos + 2];
+ data[y * pitch + x * 3 + 1] = frame.data[pos + 1];
+ data[y * pitch + x * 3 + 2] = frame.data[pos + 0];
+ }
+ qframe = qframe.scaled(size(), Qt::IgnoreAspectRatio, Qt::FastTransformation);
+ pixmap = QPixmap::fromImage(qframe);
+}
+
+// ----------------------------------------------------------------------------
+VideoWidgetDialog::VideoWidgetDialog(QWidget *parent, FrameProvider* provider)
+ : QDialog(parent),
+ video_widget(NULL)
+{
+ const int VIDEO_FRAME_WIDTH = 640;
+ const int VIDEO_FRAME_HEIGHT = 480;
+
+ video_widget = new PTVideoWidget(this, provider);
+
+ QHBoxLayout* layout = new QHBoxLayout();
+ layout->setContentsMargins(0, 0, 0, 0);
+ layout->addWidget(video_widget);
+ if (this->layout()) delete this->layout();
+ setLayout(layout);
+ resize(VIDEO_FRAME_WIDTH, VIDEO_FRAME_HEIGHT);
+}
diff --git a/FTNoIR_Tracker_PT/video_widget.h b/FTNoIR_Tracker_PT/pt_video_widget.h
index 3164dacc..e67e6d57 100644
--- a/FTNoIR_Tracker_PT/video_widget.h
+++ b/FTNoIR_Tracker_PT/pt_video_widget.h
@@ -5,11 +5,10 @@
* copyright notice and this permission notice appear in all copies.
*/
-#ifndef VIDEOWIDGET_H
-#define VIDEOWIDGET_H
+#pragma once
#include "frame_observer.h"
-
+#include <QObject>
#include <QTime>
#include <QDialog>
#include <opencv2/opencv.hpp>
@@ -26,39 +25,12 @@
#include <QPaintEvent>
#include <QTimer>
-#ifndef OPENTRACK_API
-// ----------------------------------------------------------------------------
-// OpenGL based widget to display an OpenCV image with some points on top
-class VideoWidget : public QGLWidget, public FrameObserver
-{
- Q_OBJECT
-
-public:
- VideoWidget(QWidget *parent, FrameProvider* provider) : QGLWidget(parent), FrameObserver(provider) {}
-
- virtual void initializeGL();
- virtual void resizeGL(int w, int h);
- virtual void paintGL();
-
- void update_frame_and_points();
-
-private:
- void resize_frame();
-
- cv::Mat frame;
- QImage qframe;
- QImage resized_qframe;
-
- boost::shared_ptr< std::vector<cv::Vec2f> > points;
-};
-#else
-/* Qt moc likes to skip over preprocessor directives -sh */
-class VideoWidget2 : public QWidget, public FrameObserver
+class PTVideoWidget : public QWidget, public FrameObserver
{
Q_OBJECT
public:
- VideoWidget2(QWidget *parent, FrameProvider* provider) : QWidget(parent), /* to avoid linker errors */ FrameObserver(provider) {
+ PTVideoWidget(QWidget *parent, FrameProvider* provider) : QWidget(parent), /* to avoid linker errors */ FrameObserver(provider) {
connect(&timer, SIGNAL(timeout()), this, SLOT(update()));
timer.start(45);
}
@@ -75,7 +47,6 @@ private:
QPixmap pixmap;
QTimer timer;
};
-#endif
// ----------------------------------------------------------------------------
// A VideoWidget embedded in a dialog frame
@@ -86,10 +57,8 @@ public:
VideoWidgetDialog(QWidget *parent, FrameProvider* provider);
virtual ~VideoWidgetDialog() {}
- VideoWidget2* get_video_widget() { return video_widget; }
+ PTVideoWidget* get_video_widget() { return video_widget; }
private:
- VideoWidget2* video_widget;
+ PTVideoWidget* video_widget;
};
-
-#endif // VIDEOWIDGET_H
diff --git a/FTNoIR_Tracker_PT/video_widget.cpp b/FTNoIR_Tracker_PT/video_widget.cpp
deleted file mode 100644
index 0d31620f..00000000
--- a/FTNoIR_Tracker_PT/video_widget.cpp
+++ /dev/null
@@ -1,145 +0,0 @@
-/* Copyright (c) 2012 Patrick Ruoff
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * 20130312, WVR: Add 7 lines to resizeGL after resize_frame. This should lower CPU-load.
- */
-
-#include "video_widget.h"
-
-#include <QDebug>
-#include <QHBoxLayout>
-
-using namespace cv;
-using namespace std;
-#ifndef OPENTRACK_API
-using namespace boost;
-#endif
-#ifndef OPENTRACK_API
-// ----------------------------------------------------------------------------
-void VideoWidget::initializeGL()
-{
- glClearColor(0.0, 0.0, 0.0, 0.0);
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity();
-}
-
-void VideoWidget::resizeGL(int w, int h)
-{
- // setup 1 to 1 projection
- glViewport(0, 0, w, h);
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- glOrtho(0, w, 0, h, -1, 1);
- resize_frame();
- glDisable(GL_DEPTH_TEST);
- glBegin(GL_QUADS);
- glVertex2f(0,0);
- glVertex2f(1,0);
- glVertex2f(1,1);
- glVertex2f(0,1);
- glEnd();
-}
-
-void VideoWidget::paintGL()
-{
- glClear(GL_COLOR_BUFFER_BIT);
- if (!resized_qframe.isNull())
- {
- glDrawPixels(resized_qframe.width(), resized_qframe.height(), GL_RGBA, GL_UNSIGNED_BYTE, resized_qframe.bits());
-
- const int crosshair_radius = 10;
- const int crosshair_thickness = 1;
-
- if (points)
- {
- glColor3f(1.0, 0.0, 0.0);
- glLineWidth(crosshair_thickness);
- int x,y;
- for (vector<Vec2f>::iterator iter = points->begin();
- iter != points->end();
- ++iter)
- {
- x = (*iter)[0] * resized_qframe.width() + resized_qframe.width()/2.0 + 0.5;
- y = (*iter)[1] * resized_qframe.width() + resized_qframe.height()/2.0 + 0.5;
-
- glBegin(GL_LINES);
- glVertex2i(x-crosshair_radius, y);
- glVertex2i(x+crosshair_radius, y);
- glEnd();
- glBegin(GL_LINES);
- glVertex2i(x, y-crosshair_radius);
- glVertex2i(x, y+crosshair_radius);
- glEnd();
- }
- }
- }
- glFlush();
-}
-
-
-void VideoWidget::resize_frame()
-{
- if (!qframe.isNull())
- resized_qframe = qframe.scaled(this->size(), Qt::KeepAspectRatio);
-}
-
-
-void VideoWidget::update_frame_and_points()
-{
- if (!get_frame_and_points(frame, points)) return;
-
- // convert to QImage
- if (frame.channels() == 3)
- qframe = QImage((const unsigned char*)(frame.data), frame.cols, frame.rows, frame.step, QImage::Format_RGB888).rgbSwapped();
- else if (frame.channels() == 1)
- qframe = QImage((const unsigned char*)(frame.data), frame.cols, frame.rows, frame.step, QImage::Format_Indexed8);
- qframe = QGLWidget::convertToGLFormat(qframe);
-
- resize_frame();
- updateGL();
-}
-
-#else
-void VideoWidget2::update_image(const cv::Mat& frame)
-{
- QMutexLocker foo(&mtx);
- QImage qframe = QImage(frame.cols, frame.rows, QImage::Format_RGB888);
- uchar* data = qframe.bits();
- const int pitch = qframe.bytesPerLine();
- for (int y = 0; y < frame.rows; y++)
- for (int x = 0; x < frame.cols; x++)
- {
- const int pos = 3 * (y*frame.cols + x);
- data[y * pitch + x * 3 + 0] = frame.data[pos + 2];
- data[y * pitch + x * 3 + 1] = frame.data[pos + 1];
- data[y * pitch + x * 3 + 2] = frame.data[pos + 0];
- }
- qframe = qframe.scaled(size(), Qt::IgnoreAspectRatio, Qt::FastTransformation);
- pixmap = QPixmap::fromImage(qframe);
-}
-#endif
-
-// ----------------------------------------------------------------------------
-VideoWidgetDialog::VideoWidgetDialog(QWidget *parent, FrameProvider* provider)
- : QDialog(parent),
- video_widget(NULL)
-{
- const int VIDEO_FRAME_WIDTH = 640;
- const int VIDEO_FRAME_HEIGHT = 480;
-
-#ifdef OPENTRACK_API
- video_widget = new VideoWidget2(this, provider);
-#else
- video_widget = new VideoWidget(this, provider);
-#endif
-
- QHBoxLayout* layout = new QHBoxLayout();
- layout->setContentsMargins(0, 0, 0, 0);
- layout->addWidget(video_widget);
- if (this->layout()) delete this->layout();
- setLayout(layout);
- resize(VIDEO_FRAME_WIDTH, VIDEO_FRAME_HEIGHT);
-}