summaryrefslogtreecommitdiff
path: root/src/player/testcalibrator.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/player/testcalibrator.cpp')
-rw-r--r--src/player/testcalibrator.cpp120
1 files changed, 120 insertions, 0 deletions
diff --git a/src/player/testcalibrator.cpp b/src/player/testcalibrator.cpp
new file mode 100644
index 0000000..a9898f5
--- /dev/null
+++ b/src/player/testcalibrator.cpp
@@ -0,0 +1,120 @@
+//
+// libavg - Media Playback Engine.
+// Copyright (C) 2003-2014 Ulrich von Zadow
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+// Current versions can be found at www.libavg.de
+//
+
+#include "TrackerCalibrator.h"
+
+#include "../base/GLMHelper.h"
+
+#include "../base/TestSuite.h"
+#include "../base/Exception.h"
+#include "../base/Logger.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+using namespace avg;
+using namespace std;
+
+class CalibratorTest: public Test {
+public:
+ CalibratorTest()
+ : Test("CalibratorTest", 2)
+ {
+ }
+
+ void runTests()
+ {
+ DeDistortPtr pTrafo;
+ {
+ TrackerCalibrator calibrator(IntPoint(640, 480), IntPoint(640,480));
+ bool bDone = false;
+ while (!bDone) {
+ IntPoint displayPoint(calibrator.getDisplayPoint());
+ calibrator.setCamPoint(glm::vec2(displayPoint));
+ bDone = !calibrator.nextPoint();
+ }
+ pTrafo = calibrator.makeTransformer();
+ TEST(glm::length(pTrafo->transformBlobToScreen(glm::dvec2(1.00,1.00)) -
+ glm::dvec2(1.00,1.00)) < 1);
+ TEST(checkTransform(pTrafo, glm::dvec2(0,0), glm::dvec2(0,0)));
+ TEST(checkTransform(pTrafo, glm::dvec2(640, 480), glm::dvec2(640, 480)));
+ }
+ {
+ TrackerCalibrator calibrator(IntPoint(640, 480), IntPoint(1280,720));
+ bool bDone = false;
+ while (!bDone) {
+ IntPoint displayPoint(calibrator.getDisplayPoint());
+ calibrator.setCamPoint(glm::vec2(displayPoint.x/2, displayPoint.y/1.5));
+ bDone = !calibrator.nextPoint();
+ }
+ pTrafo = calibrator.makeTransformer();
+ TEST(glm::length(pTrafo->transformBlobToScreen(glm::dvec2(1.00,1.00)) -
+ glm::dvec2(2.00,1.50)) < 1);
+ TEST(checkTransform(pTrafo, glm::dvec2(0,0), glm::dvec2(0,0)));
+ TEST(checkTransform(pTrafo, glm::dvec2(640, 480), glm::dvec2(640, 480)));
+ TEST(checkBlobToScreen(pTrafo, glm::dvec2(0,0), glm::dvec2(0,0)));
+ TEST(checkBlobToScreen(pTrafo, glm::dvec2(640, 480), glm::dvec2(1280, 720)));
+ }
+ }
+
+ bool checkTransform(CoordTransformerPtr pTrafo, const glm::dvec2& srcPt,
+ const glm::dvec2& destPt)
+ {
+ glm::dvec2 ResultPt = pTrafo->transform_point(srcPt);
+// cerr << srcPt << " -> " << ResultPt << ", expected " << destPt << endl;
+ return ((fabs(ResultPt.x-destPt.x) < 0.1) && (fabs(ResultPt.y-destPt.y) < 0.1));
+ }
+
+ bool checkBlobToScreen(DeDistortPtr pTrafo,
+ const glm::dvec2& srcPt, const glm::dvec2& destPt)
+ {
+ glm::dvec2 ResultPt =
+ pTrafo->transformBlobToScreen(pTrafo->transform_point(srcPt));
+// cerr << srcPt << " -> " << ResultPt << ", expected " << destPt << endl;
+ return ((fabs(ResultPt.x-destPt.x) < 1) && (fabs(ResultPt.y-destPt.y) < 1));
+ }
+
+};
+
+class CalibratorTestSuite: public TestSuite {
+public:
+ CalibratorTestSuite()
+ : TestSuite("CalibratorTestSuite")
+ {
+ addTest(TestPtr(new CalibratorTest));
+ }
+};
+
+
+int main(int nargs, char** args)
+{
+ CalibratorTestSuite suite;
+ suite.runTests();
+ bool bOK = suite.isOk();
+
+ if (bOK) {
+ return 0;
+ } else {
+ return 1;
+ }
+}
+