From b9878bbbd68228e44d8cf1e2b7d0274c0e7cd11d Mon Sep 17 00:00:00 2001 From: Andrzej Kapolka Date: Tue, 10 Sep 2013 16:55:59 -0700 Subject: [PATCH] Adjustment to UDP code. --- interface/src/devices/Faceshift.cpp | 32 ++++++++++++++++++++--------- interface/src/devices/Faceshift.h | 2 ++ 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/interface/src/devices/Faceshift.cpp b/interface/src/devices/Faceshift.cpp index 66ba958bbd..0df7ac79c4 100644 --- a/interface/src/devices/Faceshift.cpp +++ b/interface/src/devices/Faceshift.cpp @@ -26,12 +26,12 @@ Faceshift::Faceshift() : _eyeGazeRightYaw(0.0f), _leftBlink(0.0f), _rightBlink(0.0f), - _leftBlinkIndex(-1), - _rightBlinkIndex(-1), + _leftBlinkIndex(0), // see http://support.faceshift.com/support/articles/35129-export-of-blendshapes + _rightBlinkIndex(1), _browHeight(0.0f), - _browUpCenterIndex(-1), + _browUpCenterIndex(16), _mouthSize(0.0f), - _jawOpenIndex(-1), + _jawOpenIndex(21), _longTermAverageEyePitch(0.0f), _longTermAverageEyeYaw(0.0f), _estimatedEyePitch(0.0f), @@ -41,7 +41,7 @@ Faceshift::Faceshift() : connect(&_tcpSocket, SIGNAL(error(QAbstractSocket::SocketError)), SLOT(noteError(QAbstractSocket::SocketError))); connect(&_tcpSocket, SIGNAL(readyRead()), SLOT(readFromSocket())); - connect(&_udpSocket, SIGNAL(readyRead()), SLOT(readFromSocket())); + connect(&_udpSocket, SIGNAL(readyRead()), SLOT(readPendingDatagrams())); _udpSocket.bind(FACESHIFT_PORT); } @@ -109,8 +109,24 @@ void Faceshift::noteError(QAbstractSocket::SocketError error) { } } +void Faceshift::readPendingDatagrams() { + QByteArray buffer; + while (_udpSocket.hasPendingDatagrams()) { + buffer.resize(_udpSocket.pendingDatagramSize()); + _udpSocket.readDatagram(buffer.data(), buffer.size()); + receive(buffer); + } +} + void Faceshift::readFromSocket() { - QByteArray buffer = static_cast(sender())->readAll(); + receive(_tcpSocket.readAll()); +} + +void Faceshift::send(const std::string& message) { + _tcpSocket.write(message.data(), message.size()); +} + +void Faceshift::receive(const QByteArray& buffer) { _stream.received(buffer.size(), buffer.constData()); fsMsgPtr msg; for (fsMsgPtr msg; (msg = _stream.get_message()); ) { @@ -167,7 +183,3 @@ void Faceshift::readFromSocket() { } _lastMessageReceived = usecTimestampNow(); } - -void Faceshift::send(const std::string& message) { - _tcpSocket.write(message.data(), message.size()); -} diff --git a/interface/src/devices/Faceshift.h b/interface/src/devices/Faceshift.h index f93bbba2b4..f8ec6f122d 100644 --- a/interface/src/devices/Faceshift.h +++ b/interface/src/devices/Faceshift.h @@ -58,11 +58,13 @@ private slots: void connectSocket(); void noteConnected(); void noteError(QAbstractSocket::SocketError error); + void readPendingDatagrams(); void readFromSocket(); private: void send(const std::string& message); + void receive(const QByteArray& buffer); QTcpSocket _tcpSocket; QUdpSocket _udpSocket;