diff --git a/interface/src/devices/DdeFaceTracker.cpp b/interface/src/devices/DdeFaceTracker.cpp index 55a9b7979b..4ab2d70509 100644 --- a/interface/src/devices/DdeFaceTracker.cpp +++ b/interface/src/devices/DdeFaceTracker.cpp @@ -20,6 +20,7 @@ #include "DdeFaceTracker.h" #include "FaceshiftConstants.h" #include "InterfaceLogging.h" +#include "Menu.h" static const QHostAddress DDE_SERVER_ADDR("127.0.0.1"); @@ -178,6 +179,7 @@ void DdeFaceTracker::setEnabled(bool enabled) { if (enabled && !_ddeProcess) { qDebug() << "[Info] DDE Face Tracker Starting"; _ddeProcess = new QProcess(qApp); + connect(_ddeProcess, SIGNAL(finished(int, QProcess::ExitStatus)), SLOT(processFinished(int, QProcess::ExitStatus))); _ddeProcess->start(QCoreApplication::applicationDirPath() + DDE_PROGRAM_PATH, DDE_ARGUMENTS); } @@ -195,6 +197,16 @@ void DdeFaceTracker::setEnabled(bool enabled) { #endif } +void DdeFaceTracker::processFinished(int exitCode, QProcess::ExitStatus exitStatus) { + if (_ddeProcess) { + // DDE crashed or was manually terminated + qDebug() << "[Info] DDE Face Tracker Stopped Unexpectedly"; + _udpSocket.close(); + _ddeProcess = NULL; + Menu::getInstance()->setIsOptionChecked(MenuOption::NoFaceTracking, true); + } +} + void DdeFaceTracker::resetTracking() { qDebug() << "[Info] Reset DDE Tracking"; const char* DDE_RESET_COMMAND = "reset"; diff --git a/interface/src/devices/DdeFaceTracker.h b/interface/src/devices/DdeFaceTracker.h index a53fbdb379..490020e511 100644 --- a/interface/src/devices/DdeFaceTracker.h +++ b/interface/src/devices/DdeFaceTracker.h @@ -53,7 +53,8 @@ public slots: void resetTracking(); private slots: - + void processFinished(int exitCode, QProcess::ExitStatus exitStatus); + //sockets void socketErrorOccurred(QAbstractSocket::SocketError socketError); void readPendingDatagrams();