From 5048961fa205ecebb2cea4f8d68d51dfbe993189 Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Mon, 21 Oct 2013 21:10:23 +0200 Subject: Rift: avoid leaks, reformat --- ftnoir_tracker_rift/ftnoir_tracker_rift.cpp | 129 ++++++++++++++-------------- 1 file changed, 66 insertions(+), 63 deletions(-) (limited to 'ftnoir_tracker_rift') diff --git a/ftnoir_tracker_rift/ftnoir_tracker_rift.cpp b/ftnoir_tracker_rift/ftnoir_tracker_rift.cpp index ab694108..e94b9d03 100644 --- a/ftnoir_tracker_rift/ftnoir_tracker_rift.cpp +++ b/ftnoir_tracker_rift/ftnoir_tracker_rift.cpp @@ -11,33 +11,36 @@ using namespace OVR; Rift_Tracker::Rift_Tracker() { - bEnableRoll = true; - bEnablePitch = true; - bEnableYaw = true; + bEnableRoll = true; + bEnablePitch = true; + bEnableYaw = true; #if 0 - bEnableX = true; - bEnableY = true; - bEnableZ = true; + bEnableX = true; + bEnableY = true; + bEnableZ = true; #endif - should_quit = false; + should_quit = false; } Rift_Tracker::~Rift_Tracker() { - System::Destroy(); + pSensor.Clear(); + pHMD.Clear(); + pManager.Clear(); + System::Destroy(); } /* void controller_manager_setup_callback( sixenseUtils::ControllerManager::setup_step step ) { - QMessageBox::warning(0,"OpenTrack Info", "controller manager callback",QMessageBox::Ok,QMessageBox::NoButton); - if( sixenseUtils::getTheControllerManager()->isMenuVisible() ) { - // Ask the controller manager what the next instruction string should be. - std::string controller_manager_text_string = sixenseUtils::getTheControllerManager()->getStepString(); - QMessageBox::warning(0,"OpenTrack Info", controller_manager_text_string.c_str(),QMessageBox::Ok,QMessageBox::NoButton); - // We could also load the supplied controllermanager textures using the filename: sixenseUtils::getTheControllerManager()->getTextureFileName(); + QMessageBox::warning(0,"OpenTrack Info", "controller manager callback",QMessageBox::Ok,QMessageBox::NoButton); + if( sixenseUtils::getTheControllerManager()->isMenuVisible() ) { + // Ask the controller manager what the next instruction string should be. + std::string controller_manager_text_string = sixenseUtils::getTheControllerManager()->getStepString(); + QMessageBox::warning(0,"OpenTrack Info", controller_manager_text_string.c_str(),QMessageBox::Ok,QMessageBox::NoButton); + // We could also load the supplied controllermanager textures using the filename: sixenseUtils::getTheControllerManager()->getTextureFileName(); - } + } }*/ void Rift_Tracker::StartTracker(QFrame* videoFrame) @@ -48,33 +51,33 @@ void Rift_Tracker::StartTracker(QFrame* videoFrame) // Startup the Oculus SDK device handling, use the first Rift sensor we find. // System::Init(Log::ConfigureDefaultLog(LogMask_All)); - auto ptr_manager = DeviceManager::Create(); - if (ptr_manager != nullptr) - { - pManager = *ptr_manager; - DeviceEnumerator enumerator = pManager->EnumerateDevices(); - if (enumerator.IsAvailable()) - { - auto ptr_hmd = enumerator.CreateDevice(); - - if (ptr_hmd != nullptr) - { - pHMD = *ptr_hmd; - auto ptr_sensor = pHMD->GetSensor(); - if (ptr_sensor != 0) - pSensor = *ptr_sensor; - } + auto ptr_manager = DeviceManager::Create(); + if (ptr_manager != nullptr) + { + pManager = *ptr_manager; + DeviceEnumerator enumerator = pManager->EnumerateDevices(); + if (enumerator.IsAvailable()) + { + auto ptr_hmd = enumerator.CreateDevice(); + + if (ptr_hmd != nullptr) + { + pHMD = *ptr_hmd; + auto ptr_sensor = pHMD->GetSensor(); + if (ptr_sensor != 0) + pSensor = *ptr_sensor; + } - if (pSensor){ - SFusion.reset(new OVR::SensorFusion()); - SFusion->AttachToSensor(pSensor); - }else{ - QMessageBox::warning(0,"FaceTrackNoIR Error", "Unable to find Rift tracker",QMessageBox::Ok,QMessageBox::NoButton); - } - //isCalibrated = false; - //MagCal.BeginAutoCalibration(SFusion); - } - } + if (pSensor){ + SFusion.reset(new OVR::SensorFusion()); + SFusion->AttachToSensor(pSensor); + }else{ + QMessageBox::warning(0,"FaceTrackNoIR Error", "Unable to find Rift tracker",QMessageBox::Ok,QMessageBox::NoButton); + } + //isCalibrated = false; + //MagCal.BeginAutoCalibration(SFusion); + } + } } @@ -82,22 +85,22 @@ bool Rift_Tracker::GiveHeadPoseData(double *data) { if (SFusion != nullptr) { Quatf hmdOrient = SFusion->GetOrientation(); - float newHeadPose[6]; - + float newHeadPose[6]; + float yaw = 0.0f; float pitch = 0.0f; float roll = 0.0f; hmdOrient.GetEulerAngles(&yaw, &pitch , &roll); - newHeadPose[Yaw] = yaw; + newHeadPose[Yaw] = yaw; newHeadPose[Pitch] =pitch; newHeadPose[Roll] = roll; #if 0 - newHeadPose[TX] = acd.controllers[0].pos[0]/50.0f; - newHeadPose[TY] = acd.controllers[0].pos[1]/50.0f; - newHeadPose[TZ] = acd.controllers[0].pos[2]/50.0f; - - if (bEnableX) { + newHeadPose[TX] = acd.controllers[0].pos[0]/50.0f; + newHeadPose[TY] = acd.controllers[0].pos[1]/50.0f; + newHeadPose[TZ] = acd.controllers[0].pos[2]/50.0f; + + if (bEnableX) { data[TX] = newHeadPose[TX]; } if (bEnableY) { @@ -117,7 +120,7 @@ bool Rift_Tracker::GiveHeadPoseData(double *data) data[Roll] = newHeadPose[Roll] * 57.295781f; } } - return pHMD.GetPtr() != NULL; + return pHMD.GetPtr() != NULL; } @@ -126,24 +129,24 @@ bool Rift_Tracker::GiveHeadPoseData(double *data) // void Rift_Tracker::loadSettings() { - qDebug() << "FTNoIR_Tracker::loadSettings says: Starting "; - QSettings settings("opentrack"); // Registry settings (in HK_USER) + qDebug() << "FTNoIR_Tracker::loadSettings says: Starting "; + QSettings settings("opentrack"); // Registry settings (in HK_USER) - QString currentFile = settings.value ( "SettingsFile", QCoreApplication::applicationDirPath() + "/settings/default.ini" ).toString(); - QSettings iniFile( currentFile, QSettings::IniFormat ); // Application settings (in INI-file) + QString currentFile = settings.value ( "SettingsFile", QCoreApplication::applicationDirPath() + "/settings/default.ini" ).toString(); + QSettings iniFile( currentFile, QSettings::IniFormat ); // Application settings (in INI-file) - qDebug() << "FTNoIR_Tracker::loadSettings says: iniFile = " << currentFile; + qDebug() << "FTNoIR_Tracker::loadSettings says: iniFile = " << currentFile; - iniFile.beginGroup ( "Rift" ); - bEnableRoll = iniFile.value ( "EnableRoll", 1 ).toBool(); - bEnablePitch = iniFile.value ( "EnablePitch", 1 ).toBool(); - bEnableYaw = iniFile.value ( "EnableYaw", 1 ).toBool(); + iniFile.beginGroup ( "Rift" ); + bEnableRoll = iniFile.value ( "EnableRoll", 1 ).toBool(); + bEnablePitch = iniFile.value ( "EnablePitch", 1 ).toBool(); + bEnableYaw = iniFile.value ( "EnableYaw", 1 ).toBool(); #if 0 - bEnableX = iniFile.value ( "EnableX", 1 ).toBool(); - bEnableY = iniFile.value ( "EnableY", 1 ).toBool(); - bEnableZ = iniFile.value ( "EnableZ", 1 ).toBool(); + bEnableX = iniFile.value ( "EnableX", 1 ).toBool(); + bEnableY = iniFile.value ( "EnableY", 1 ).toBool(); + bEnableZ = iniFile.value ( "EnableZ", 1 ).toBool(); #endif - iniFile.endGroup (); + iniFile.endGroup (); } -- cgit v1.2.3 From 7e659504cb12541a571c042d01838d5c72b11bb2 Mon Sep 17 00:00:00 2001 From: mm0zct Date: Mon, 21 Oct 2013 22:12:36 +0100 Subject: fixed Rift tracker for libovr SDK 0.2.5 --- ftnoir_tracker_rift/ftnoir_tracker_rift.cpp | 65 +++++++++++++---------------- ftnoir_tracker_rift/ftnoir_tracker_rift.h | 11 +++-- 2 files changed, 34 insertions(+), 42 deletions(-) (limited to 'ftnoir_tracker_rift') diff --git a/ftnoir_tracker_rift/ftnoir_tracker_rift.cpp b/ftnoir_tracker_rift/ftnoir_tracker_rift.cpp index e94b9d03..7fade51c 100644 --- a/ftnoir_tracker_rift/ftnoir_tracker_rift.cpp +++ b/ftnoir_tracker_rift/ftnoir_tracker_rift.cpp @@ -6,9 +6,6 @@ using namespace OVR; -//used to turn on the re-centre spring effect -//#define OPENTRACK_RIFT_RECENTRE_SPRING - Rift_Tracker::Rift_Tracker() { bEnableRoll = true; @@ -20,71 +17,67 @@ Rift_Tracker::Rift_Tracker() bEnableZ = true; #endif should_quit = false; + pManager = NULL; + pHMD = NULL; + pSensor = NULL; + pSFusion = NULL; } Rift_Tracker::~Rift_Tracker() { - pSensor.Clear(); - pHMD.Clear(); - pManager.Clear(); + pSensor->Release(); + delete pSFusion; + pHMD->Release(); + pManager->Release(); System::Destroy(); } -/* -void controller_manager_setup_callback( sixenseUtils::ControllerManager::setup_step step ) { - - QMessageBox::warning(0,"OpenTrack Info", "controller manager callback",QMessageBox::Ok,QMessageBox::NoButton); - if( sixenseUtils::getTheControllerManager()->isMenuVisible() ) { - // Ask the controller manager what the next instruction string should be. - std::string controller_manager_text_string = sixenseUtils::getTheControllerManager()->getStepString(); - QMessageBox::warning(0,"OpenTrack Info", controller_manager_text_string.c_str(),QMessageBox::Ok,QMessageBox::NoButton); - // We could also load the supplied controllermanager textures using the filename: sixenseUtils::getTheControllerManager()->getTextureFileName(); - } -}*/ void Rift_Tracker::StartTracker(QFrame* videoFrame) { - //QMessageBox::warning(0,"FaceTrackNoIR Notification", "Tracking loading settings...",QMessageBox::Ok,QMessageBox::NoButton); + loadSettings(); // // Startup the Oculus SDK device handling, use the first Rift sensor we find. // System::Init(Log::ConfigureDefaultLog(LogMask_All)); - auto ptr_manager = DeviceManager::Create(); - if (ptr_manager != nullptr) + pManager = DeviceManager::Create(); + if (pManager != NULL) { - pManager = *ptr_manager; DeviceEnumerator enumerator = pManager->EnumerateDevices(); if (enumerator.IsAvailable()) { - auto ptr_hmd = enumerator.CreateDevice(); + pHMD = enumerator.CreateDevice(); - if (ptr_hmd != nullptr) + if (pHMD != NULL) { - pHMD = *ptr_hmd; - auto ptr_sensor = pHMD->GetSensor(); - if (ptr_sensor != 0) - pSensor = *ptr_sensor; + pSensor = pHMD->GetSensor(); + }else{ + QMessageBox::warning(0,"FaceTrackNoIR Error", "Unable to find Rift tracker",QMessageBox::Ok,QMessageBox::NoButton); } if (pSensor){ - SFusion.reset(new OVR::SensorFusion()); - SFusion->AttachToSensor(pSensor); + pSFusion = new OVR::SensorFusion(); + pSFusion->Reset(); + pSFusion->AttachToSensor(pSensor); }else{ - QMessageBox::warning(0,"FaceTrackNoIR Error", "Unable to find Rift tracker",QMessageBox::Ok,QMessageBox::NoButton); + QMessageBox::warning(0,"FaceTrackNoIR Error", "Unable to create Rift sensor",QMessageBox::Ok,QMessageBox::NoButton); } - //isCalibrated = false; - //MagCal.BeginAutoCalibration(SFusion); + + }else{ + QMessageBox::warning(0,"FaceTrackNoIR Error", "Unable to find Rift tracker",QMessageBox::Ok,QMessageBox::NoButton); } - } + }else{ + QMessageBox::warning(0,"FaceTrackNoIR Error", "Unable to start Rift tracker",QMessageBox::Ok,QMessageBox::NoButton); + } } bool Rift_Tracker::GiveHeadPoseData(double *data) { - if (SFusion != nullptr) { - Quatf hmdOrient = SFusion->GetOrientation(); + if (pSFusion != NULL) { + Quatf hmdOrient = pSFusion->GetOrientation(); float newHeadPose[6]; float yaw = 0.0f; @@ -120,7 +113,7 @@ bool Rift_Tracker::GiveHeadPoseData(double *data) data[Roll] = newHeadPose[Roll] * 57.295781f; } } - return pHMD.GetPtr() != NULL; + return pHMD != NULL; } diff --git a/ftnoir_tracker_rift/ftnoir_tracker_rift.h b/ftnoir_tracker_rift/ftnoir_tracker_rift.h index 34742d6c..970a64a2 100644 --- a/ftnoir_tracker_rift/ftnoir_tracker_rift.h +++ b/ftnoir_tracker_rift/ftnoir_tracker_rift.h @@ -22,11 +22,10 @@ protected: private: static bool isInitialised; - OVR::Ptr pManager; - OVR::Ptr pHMD; - OVR::Ptr pSensor; - std::unique_ptr SFusion; - // Magnetometer calibration and yaw correction + OVR::DeviceManager* pManager; + OVR::HMDDevice* pHMD; + OVR::SensorDevice* pSensor; + OVR::SensorFusion* pSFusion; bool bEnableRoll; bool bEnablePitch; bool bEnableYaw; @@ -35,7 +34,7 @@ private: bool bEnableY; bool bEnableZ; #endif - QMutex mutex; + }; // Widget that has controls for FTNoIR protocol client-settings. -- cgit v1.2.3