From 445ebbfa3edc12bd79469a61c25257fe853c3768 Mon Sep 17 00:00:00 2001 From: Wim Vriend Date: Sat, 22 Jan 2011 15:21:34 +0000 Subject: Work on DLL-FTNoir-Tracker. git-svn-id: svn+ssh://svn.code.sf.net/p/facetracknoir/code@41 19e81ba0-9b1a-49c3-bd6c-561e1906d5fb --- FaceTrackNoIR/tracker.cpp | 43 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 41 insertions(+), 2 deletions(-) (limited to 'FaceTrackNoIR/tracker.cpp') diff --git a/FaceTrackNoIR/tracker.cpp b/FaceTrackNoIR/tracker.cpp index 974b1251..73023b2f 100644 --- a/FaceTrackNoIR/tracker.cpp +++ b/FaceTrackNoIR/tracker.cpp @@ -194,7 +194,9 @@ Tracker::~Tracker() { ::SetEvent(m_StopThread); // Wait until thread finished - ::WaitForSingleObject(m_WaitThread, INFINITE); + if (isRunning()) { + ::WaitForSingleObject(m_WaitThread, INFINITE); + } // Close handles ::CloseHandle(m_StopThread); @@ -245,6 +247,7 @@ void Tracker::setup(QWidget *head, FaceTrackNoIR *parent) { if (selectedTracker == FT_FTNOIR) { int fooResult = pTracker->Foo(42); qDebug() << "Tracker::setup Foo gives: " << fooResult; + pTracker->StartTracker(); } // set up the line edits for calling @@ -438,6 +441,13 @@ void Tracker::run() { } # endif + if (selectedTracker == FT_FTNOIR) { + THeadPoseData newpose; + pTracker->GiveHeadPoseData(&newpose); + addHeadPose(newpose); + Tracker::confid = true; + } + // // Get the System-time and substract the time from the previous call. // dT will be used for the EWMA-filter. @@ -653,7 +663,6 @@ void Tracker::run() { ReleaseMutex(Tracker::hTrackMutex); server_Game->sendHeadposeToGame(); - //for lower cpu load usleep(10000); yieldCurrentThread(); @@ -720,6 +729,36 @@ void Tracker::addHeadPose( smEngineHeadPoseData head_pose ) addRaw2List ( &Z.rawList, Z.maxItems, Tracker::Z.headPos ); } +/** Add the headpose-data to the Lists **/ +void Tracker::addHeadPose( THeadPoseData head_pose ) +{ + // Pitch + Tracker::Pitch.headPos = head_pose.pitch; // degrees + addRaw2List ( &Pitch.rawList, Pitch.maxItems, Tracker::Pitch.headPos ); +// Tracker::Pitch.confidence = head_pose.confidence; // Just this one ... + Tracker::Pitch.newSample = true; + + // Yaw + Tracker::Yaw.headPos = head_pose.yaw; // degrees + addRaw2List ( &Yaw.rawList, Yaw.maxItems, Tracker::Yaw.headPos ); + + // Roll + Tracker::Roll.headPos = head_pose.roll; // degrees + addRaw2List ( &Roll.rawList, Roll.maxItems, Tracker::Roll.headPos ); + + // X-position + Tracker::X.headPos = head_pose.x; // centimeters + addRaw2List ( &X.rawList, X.maxItems, Tracker::X.headPos ); + + // Y-position + Tracker::Y.headPos = head_pose.y; // centimeters + addRaw2List ( &Y.rawList, Y.maxItems, Tracker::Y.headPos ); + + // Z-position (distance to camera, absolute!) + Tracker::Z.headPos = head_pose.z; // centimeters + addRaw2List ( &Z.rawList, Z.maxItems, Tracker::Z.headPos ); +} + // // Get the ProgramName from the Game and return it. // -- cgit v1.2.3