From 0ddf9520ddaba0efaaea0e6480243e754061e3a7 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Thu, 16 Jan 2014 14:55:03 -0800 Subject: [PATCH 1/2] if audio is muted don't loopback local audio, fixes #1561 --- interface/src/Audio.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/src/Audio.cpp b/interface/src/Audio.cpp index 600617b2e7..c57b057d63 100644 --- a/interface/src/Audio.cpp +++ b/interface/src/Audio.cpp @@ -297,7 +297,7 @@ void Audio::handleAudioInput() { QByteArray inputByteArray = _inputDevice->readAll(); - if (Menu::getInstance()->isOptionChecked(MenuOption::EchoLocalAudio)) { + if (Menu::getInstance()->isOptionChecked(MenuOption::EchoLocalAudio) && !_muted) { // if this person wants local loopback add that to the locally injected audio if (!_loopbackOutputDevice) { From d85616d690f78f7e1fc34ad95010168592d63dad Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Thu, 16 Jan 2014 16:14:25 -0800 Subject: [PATCH 2/2] cleaup matching with node in addOrUpdateNode --- libraries/shared/src/NodeList.cpp | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/libraries/shared/src/NodeList.cpp b/libraries/shared/src/NodeList.cpp index 7b3364b0d8..06d2bbe05b 100644 --- a/libraries/shared/src/NodeList.cpp +++ b/libraries/shared/src/NodeList.cpp @@ -674,9 +674,9 @@ void NodeList::pingPublicAndLocalSocketsForInactiveNode(Node* node) { SharedNodePointer NodeList::addOrUpdateNode(const QUuid& uuid, char nodeType, const HifiSockAddr& publicSocket, const HifiSockAddr& localSocket) { - NodeHash::iterator matchingNodeItem = _nodeHash.find(uuid); - - if (matchingNodeItem == _nodeHash.end()) { + SharedNodePointer matchingNode = _nodeHash.value(uuid); + + if (!matchingNode) { // we didn't have this node, so add them Node* newNode = new Node(uuid, nodeType, publicSocket, localSocket); SharedNodePointer newNodeSharedPointer(newNode, &QObject::deleteLater); @@ -689,29 +689,28 @@ SharedNodePointer NodeList::addOrUpdateNode(const QUuid& uuid, char nodeType, return newNodeSharedPointer; } else { - SharedNodePointer node = matchingNodeItem.value(); - QMutexLocker(&node->getMutex()); + QMutexLocker(&matchingNode->getMutex()); - if (node->getType() == NODE_TYPE_AUDIO_MIXER || - node->getType() == NODE_TYPE_VOXEL_SERVER || - node->getType() == NODE_TYPE_METAVOXEL_SERVER) { + if (matchingNode->getType() == NODE_TYPE_AUDIO_MIXER || + matchingNode->getType() == NODE_TYPE_VOXEL_SERVER || + matchingNode->getType() == NODE_TYPE_METAVOXEL_SERVER) { // until the Audio class also uses our nodeList, we need to update // the lastRecvTimeUsecs for the audio mixer so it doesn't get killed and re-added continously - node->setLastHeardMicrostamp(usecTimestampNow()); + matchingNode->setLastHeardMicrostamp(usecTimestampNow()); } // check if we need to change this node's public or local sockets - if (publicSocket != node->getPublicSocket()) { - node->setPublicSocket(publicSocket); - qDebug() << "Public socket change for node" << *node; + if (publicSocket != matchingNode->getPublicSocket()) { + matchingNode->setPublicSocket(publicSocket); + qDebug() << "Public socket change for node" << *matchingNode; } - if (localSocket != node->getLocalSocket()) { - node->setLocalSocket(localSocket); - qDebug() << "Local socket change for node" << *node; + if (localSocket != matchingNode->getLocalSocket()) { + matchingNode->setLocalSocket(localSocket); + qDebug() << "Local socket change for node" << *matchingNode; } // we had this node already, do nothing for now - return node; + return matchingNode; } }