From 51a3eb679889844a0f8c8643034615dc12a7f523 Mon Sep 17 00:00:00 2001 From: Wim Vriend Date: Sat, 29 Jan 2011 12:58:57 +0000 Subject: Testing filter. git-svn-id: svn+ssh://svn.code.sf.net/p/facetracknoir/code@45 19e81ba0-9b1a-49c3-bd6c-561e1906d5fb --- FaceTrackNoIR/FGServer.cpp | 6 +- FaceTrackNoIR/FaceTrackNoIR.cpp | 77 ++++++++++++++---- FaceTrackNoIR/FaceTrackNoIR.ui | 4 +- FaceTrackNoIR/FaceTrackNoIR.vcproj | 95 ++++++++++++++++++++++ .../FaceTrackNoIR.exe.intermediate.manifest | 5 -- FaceTrackNoIR/tracker.cpp | 22 +++-- FaceTrackNoIR/tracker.h | 1 + 7 files changed, 173 insertions(+), 37 deletions(-) (limited to 'FaceTrackNoIR') diff --git a/FaceTrackNoIR/FGServer.cpp b/FaceTrackNoIR/FGServer.cpp index fa7b60d5..53cd68ff 100644 --- a/FaceTrackNoIR/FGServer.cpp +++ b/FaceTrackNoIR/FGServer.cpp @@ -46,10 +46,8 @@ FGServer::FGServer( Tracker *parent ) { /** destructor **/ FGServer::~FGServer() { - inSocket->disconnectFromHost(); - inSocket->waitForDisconnected(); - outSocket->disconnectFromHost(); - outSocket->waitForDisconnected(); + inSocket->close(); + outSocket->close(); delete inSocket; delete outSocket; diff --git a/FaceTrackNoIR/FaceTrackNoIR.cpp b/FaceTrackNoIR/FaceTrackNoIR.cpp index 8c678100..eda9b51b 100644 --- a/FaceTrackNoIR/FaceTrackNoIR.cpp +++ b/FaceTrackNoIR/FaceTrackNoIR.cpp @@ -31,6 +31,7 @@ #include "FSUIPCServer.h" #include "FTIRServer.h" #include "FGServer.h" +#include "FTNServer.h" using namespace sm::faceapi; using namespace sm::faceapi::qt; @@ -340,7 +341,8 @@ void FaceTrackNoIR::saveAs() // Get the new filename of the INI-file. // QString fileName = QFileDialog::getSaveFileName(this, tr("Save file"), - QCoreApplication::applicationDirPath() + "/Settings", + oldFile, +// QCoreApplication::applicationDirPath() + "/Settings", tr("Settings file (*.ini);;All Files (*)")); if (!fileName.isEmpty()) { @@ -368,8 +370,10 @@ void FaceTrackNoIR::saveAs() settings.setValue ("SettingsFile", fileName); save(); - // Put the filename in the window-title - setWindowTitle ( "FaceTrackNoIR (1.5) - " + newFileInfo.fileName() ); + // + // Reload the settings, to get the GUI right again... + // + loadSettings(); } } @@ -424,9 +428,10 @@ void FaceTrackNoIR::loadSettings() { ui.chkInvertY->setChecked (iniFile.value ( "invertY", 0 ).toBool()); ui.chkInvertZ->setChecked (iniFile.value ( "invertZ", 0 ).toBool()); ui.chkUseEWMA->setChecked (iniFile.value ( "useEWMA", 1 ).toBool()); - ui.minSmooth->setValue (iniFile.value ( "minSmooth", 2 ).toInt()); + + ui.minSmooth->setValue (iniFile.value ( "minSmooth", 15 ).toInt()); + ui.maxSmooth->setValue (iniFile.value ( "maxSmooth", 50 ).toInt()); ui.powCurve->setValue (iniFile.value ( "powCurve", 10 ).toInt()); - ui.maxSmooth->setValue (iniFile.value ( "maxSmooth", 10 ).toInt()); iniFile.endGroup (); iniFile.beginGroup ( "GameProtocol" ); @@ -514,10 +519,19 @@ void FaceTrackNoIR::startTracker( ) { ui.btnStopTracker->setEnabled ( true ); // Engine controls - ui.btnShowEngineControls->setEnabled ( true ); - ui.iconcomboBox->setEnabled ( false ); + switch (ui.iconcomboTrackerSource->currentIndex()) { + case FT_SM_FACEAPI: // Face API + ui.btnShowEngineControls->setEnabled ( true ); // Active only when started! + break; + case FT_FTNOIR: // FTNoir server + ui.btnShowEngineControls->setEnabled ( false ); + break; + default: + break; + } // Enable/disable Protocol-server Settings + ui.iconcomboBox->setEnabled ( false ); ui.btnShowServerControls->setEnabled ( false ); // @@ -577,6 +591,21 @@ void FaceTrackNoIR::stopTracker( ) { // Enable/disable Protocol-server Settings ui.btnShowServerControls->setEnabled ( true ); + // Engine controls + switch (ui.iconcomboTrackerSource->currentIndex()) { + case FT_SM_FACEAPI: // Face API + ui.btnShowEngineControls->setEnabled ( false ); // Active only when started! + break; + case FT_FTNOIR: // FTNoir server + ui.btnShowEngineControls->setEnabled ( true ); + break; + default: + break; + } + + // + // Stop the timer, so it won't go off again... + // timMinimizeFTN->stop(); } @@ -673,10 +702,27 @@ void FaceTrackNoIR::showHeadPoseWidget() { /** toggles Engine Controls Dialog **/ void FaceTrackNoIR::showEngineControls() { - // Create if new + // + // Delete the existing QDialog + // + if (_engine_controls) { + delete _engine_controls; + _engine_controls = 0; + } + + // Create new if (!_engine_controls) { - _engine_controls = new EngineControls( tracker->getEngine(), true, false, this, Qt::Dialog ); + switch (ui.iconcomboTrackerSource->currentIndex()) { + case FT_SM_FACEAPI: // Face API + _engine_controls = new EngineControls( tracker->getEngine(), true, false, this, Qt::Dialog ); + break; + case FT_FTNOIR: // FTNoir server + break; + default: + break; + } + } // Show if already created @@ -702,11 +748,9 @@ void FaceTrackNoIR::showServerControls() { if (!_server_controls) { - // Show the appropriate Protocol-server Settings switch (ui.iconcomboBox->currentIndex()) { case FREE_TRACK: - case FTNOIR: case SIMCONNECT: break; case PPJOY: @@ -721,6 +765,9 @@ void FaceTrackNoIR::showServerControls() { case FLIGHTGEAR: _server_controls = new FGControls( this, Qt::Dialog ); break; + case FTNOIR: + _server_controls = new FTNServerControls( this, Qt::Dialog ); + break; default: break; } @@ -860,7 +907,6 @@ void FaceTrackNoIR::setIcon(int index) // Enable/disable Protocol-server Settings switch (ui.iconcomboBox->currentIndex()) { case FREE_TRACK: - case FTNOIR: case SIMCONNECT: ui.btnShowServerControls->hide(); break; @@ -868,6 +914,7 @@ void FaceTrackNoIR::setIcon(int index) case FSUIPC: case TRACKIR: case FLIGHTGEAR: + case FTNOIR: ui.btnShowServerControls->show(); ui.btnShowServerControls->setEnabled ( true ); break; @@ -904,11 +951,13 @@ void FaceTrackNoIR::trackingSourceSelected(int index) { settingsDirty = true; switch (ui.iconcomboTrackerSource->currentIndex()) { - case 0: // Face API + case FT_SM_FACEAPI: // Face API + ui.btnShowEngineControls->setEnabled ( false ); break; - case 1: // FTNoir server + case FT_FTNOIR: // FTNoir server ui.video_frame->hide(); ui.headPoseWidget->show(); + ui.btnShowEngineControls->setEnabled ( true ); break; default: break; diff --git a/FaceTrackNoIR/FaceTrackNoIR.ui b/FaceTrackNoIR/FaceTrackNoIR.ui index e6ebde75..698929cb 100644 --- a/FaceTrackNoIR/FaceTrackNoIR.ui +++ b/FaceTrackNoIR/FaceTrackNoIR.ui @@ -408,8 +408,8 @@ color:#000; - 250 - 180 + 500 + 500 diff --git a/FaceTrackNoIR/FaceTrackNoIR.vcproj b/FaceTrackNoIR/FaceTrackNoIR.vcproj index e56d9e5c..aeb346da 100644 --- a/FaceTrackNoIR/FaceTrackNoIR.vcproj +++ b/FaceTrackNoIR/FaceTrackNoIR.vcproj @@ -223,6 +223,10 @@ RelativePath=".\FTIRServer.cpp" > + + @@ -439,6 +443,32 @@ /> + + + + + + + + @@ -691,6 +721,32 @@ /> + + + + + + + + @@ -836,6 +892,10 @@ RelativePath=".\GeneratedFiles\ui_FTNoIR_FTIRcontrols.h" > + + @@ -937,6 +997,18 @@ /> + + + + + @@ -1097,6 +1169,29 @@ /> + + + + + + + + diff --git a/FaceTrackNoIR/Release/FaceTrackNoIR.exe.intermediate.manifest b/FaceTrackNoIR/Release/FaceTrackNoIR.exe.intermediate.manifest index ca044622..324c707e 100644 --- a/FaceTrackNoIR/Release/FaceTrackNoIR.exe.intermediate.manifest +++ b/FaceTrackNoIR/Release/FaceTrackNoIR.exe.intermediate.manifest @@ -5,9 +5,4 @@ - - - - - diff --git a/FaceTrackNoIR/tracker.cpp b/FaceTrackNoIR/tracker.cpp index bc7b45f8..f271ee5b 100644 --- a/FaceTrackNoIR/tracker.cpp +++ b/FaceTrackNoIR/tracker.cpp @@ -163,6 +163,7 @@ QLibrary *filterLib; break; case FTNOIR: + server_Game = QSharedPointer(new FTNServer ( this )); // Create FaceTrackNoIR protocol-server break; case PPJOY: @@ -556,15 +557,15 @@ void Tracker::run() { if (Tracker::do_tracking && Tracker::confid) { // Pitch - target_camera_position.x = X.headPos - X.offset_headPos - X.initial_headPos; - target_camera_position.y = Y.headPos - Y.offset_headPos - Y.initial_headPos; - target_camera_position.z = Z.headPos - Z.offset_headPos - Z.initial_headPos; - target_camera_position.pitch = Pitch.headPos - Pitch.offset_headPos - Pitch.initial_headPos; - target_camera_position.yaw = Yaw.headPos - Yaw.offset_headPos - Yaw.initial_headPos; - target_camera_position.roll = Roll.headPos - Roll.offset_headPos - Roll.initial_headPos; + target_camera_position.x = getSmoothFromList( &X.rawList ) - X.offset_headPos - X.initial_headPos; + target_camera_position.y = getSmoothFromList( &Y.rawList ) - Y.offset_headPos - Y.initial_headPos; + target_camera_position.z = getSmoothFromList( &Z.rawList ) - Z.offset_headPos - Z.initial_headPos; + target_camera_position.pitch = getSmoothFromList( &Pitch.rawList ) - Pitch.offset_headPos - Pitch.initial_headPos; + target_camera_position.yaw = getSmoothFromList( &Yaw.rawList ) - Yaw.offset_headPos - Yaw.initial_headPos; + target_camera_position.roll = getSmoothFromList( &Roll.rawList ) - Roll.offset_headPos - Roll.initial_headPos; if (Tracker::useFilter && pFilter) { - pFilter->FilterHeadPoseData(¤t_camera_position, &target_camera_position, &new_camera_position); + pFilter->FilterHeadPoseData(¤t_camera_position, &target_camera_position, &new_camera_position, Tracker::Pitch.newSample); } else { new_camera_position.x = getSmoothFromList( &X.rawList ) - X.offset_headPos - X.initial_headPos; @@ -658,9 +659,10 @@ void Tracker::run() { debug_Client->prev_value = Tracker::Pitch.prevPos; debug_Client->dT = dT; debug_Client->sendHeadposeToGame(); // Log to Excel - Tracker::Pitch.newSample = false; # endif + Tracker::Pitch.newSample = false; + ReleaseMutex(Tracker::hTrackMutex); server_Game->sendHeadposeToGame(); @@ -694,10 +696,6 @@ void Tracker::receiveHeadPose(void *,smEngineHeadPoseData head_pose, smCameraVid } ReleaseMutex(Tracker::hTrackMutex); - - // for lower cpu load - msleep(10); - yieldCurrentThread(); } /** Add the headpose-data to the Lists **/ diff --git a/FaceTrackNoIR/tracker.h b/FaceTrackNoIR/tracker.h index 73d4161e..6c436ff8 100644 --- a/FaceTrackNoIR/tracker.h +++ b/FaceTrackNoIR/tracker.h @@ -43,6 +43,7 @@ #include "SCServer.h" // SimConnect-server (for MS Flight Simulator X) #include "FSUIPCServer.h" // FSUIPC-server (for MS Flight Simulator 2004) #include "ExcelServer.h" // Excel-server (for analysing purposes) +#include "FTNServer.h" // FaceTrackNoIR-server (for client-server) #include "FTNoIR_cxx_protocolserver.h" #include "FTNoIR_Tracker_base.h" -- cgit v1.2.3