From d764ff2e87b35efda81c7a49fbca28e0ee205059 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Tue, 17 Nov 2015 15:12:04 -0800 Subject: [PATCH] remove static variables in AudioInjector.cpp --- libraries/audio/src/AudioInjector.cpp | 19 +++++++++++-------- libraries/audio/src/AudioInjector.h | 5 +++++ libraries/audio/src/AudioInjectorManager.cpp | 3 +++ 3 files changed, 19 insertions(+), 8 deletions(-) diff --git a/libraries/audio/src/AudioInjector.cpp b/libraries/audio/src/AudioInjector.cpp index b0b0527e11..f43325a846 100644 --- a/libraries/audio/src/AudioInjector.cpp +++ b/libraries/audio/src/AudioInjector.cpp @@ -165,9 +165,6 @@ uint64_t AudioInjector::injectNextFrame() { static int positionOptionOffset = -1; static int volumeOptionOffset = -1; static int audioDataOffset = -1; - static quint16 outgoingInjectedAudioSequenceNumber = 0; - static int nextFrame = 0; - static QElapsedTimer frameTimer; if (!_currentPacket) { if (_currentSendOffset < 0 || @@ -178,8 +175,14 @@ uint64_t AudioInjector::injectNextFrame() { // make sure we actually have samples downloaded to inject if (_audioData.size()) { - nextFrame = 0; - frameTimer.restart(); + _outgoingSequenceNumber = 0; + _nextFrame = 0; + + if (!_frameTimer) { + _frameTimer = std::unique_ptr(new QElapsedTimer); + } + + _frameTimer->restart(); _currentPacket = NLPacket::create(PacketType::InjectAudio); @@ -242,7 +245,7 @@ uint64_t AudioInjector::injectNextFrame() { _currentPacket->seek(0); // pack the sequence number - _currentPacket->writePrimitive(outgoingInjectedAudioSequenceNumber); + _currentPacket->writePrimitive(_outgoingSequenceNumber); _currentPacket->seek(positionOptionOffset); _currentPacket->writePrimitive(_options.position); @@ -267,7 +270,7 @@ uint64_t AudioInjector::injectNextFrame() { if (audioMixer) { // send off this audio packet nodeList->sendUnreliablePacket(*_currentPacket, *audioMixer); - outgoingInjectedAudioSequenceNumber++; + _outgoingSequenceNumber++; } _currentSendOffset += bytesToCopy; @@ -290,7 +293,7 @@ uint64_t AudioInjector::injectNextFrame() { // immediately send the first two frames so the mixer can start using the audio right away return NEXT_FRAME_DELTA_IMMEDIATELY; } else { - return (++nextFrame * AudioConstants::NETWORK_FRAME_USECS) - frameTimer.nsecsElapsed() / 1000; + return (++_nextFrame * AudioConstants::NETWORK_FRAME_USECS) - _frameTimer->nsecsElapsed() / 1000; } } diff --git a/libraries/audio/src/AudioInjector.h b/libraries/audio/src/AudioInjector.h index 9bacb44fde..a02a20c1e7 100644 --- a/libraries/audio/src/AudioInjector.h +++ b/libraries/audio/src/AudioInjector.h @@ -14,6 +14,7 @@ #include +#include #include #include #include @@ -95,6 +96,10 @@ private: AbstractAudioInterface* _localAudioInterface { nullptr }; AudioInjectorLocalBuffer* _localBuffer { nullptr }; + int _nextFrame { 0 }; + std::unique_ptr _frameTimer { nullptr }; + quint16 _outgoingSequenceNumber { 0 }; + friend class AudioInjectorManager; }; diff --git a/libraries/audio/src/AudioInjectorManager.cpp b/libraries/audio/src/AudioInjectorManager.cpp index eaf1cdd406..ee0a1af77b 100644 --- a/libraries/audio/src/AudioInjectorManager.cpp +++ b/libraries/audio/src/AudioInjectorManager.cpp @@ -94,6 +94,9 @@ void AudioInjectorManager::run() { _injectorReady.wait(lock); } + // unlock the lock in case something in process events needs to modify the queue + lock.unlock(); + QCoreApplication::processEvents(); } }