From 47f86fac68d64c72ebfaa3fa1e3ef1f8bea2d62c Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Thu, 20 Nov 2014 13:48:29 -0800 Subject: [PATCH] have QAudioOutput cleaned up with injector thread --- interface/src/Audio.cpp | 20 +++++++------------- interface/src/Audio.h | 5 ----- 2 files changed, 7 insertions(+), 18 deletions(-) diff --git a/interface/src/Audio.cpp b/interface/src/Audio.cpp index b7076b6c1a..af11b4922c 100644 --- a/interface/src/Audio.cpp +++ b/interface/src/Audio.cpp @@ -1378,10 +1378,14 @@ bool Audio::outputLocalInjector(bool isStereo, qreal volume, AudioInjector* inje localFormat, this); localOutput->setVolume(volume); - // add this to our list of local injected outputs, we will need to clean it up when the injector says it is done - _injectedOutputInterfaces.insert(injector, localOutput); + // move the localOutput to the same thread as the local injector buffer + localOutput->moveToThread(injector->getLocalBuffer()->thread()); - connect(injector, &AudioInjector::finished, this, &Audio::cleanupLocalOutputInterface); + // have it be cleaned up when that thread is done + connect(injector->thread(), &QThread::finished, localOutput, &QAudioOutput::stop); + connect(injector->thread(), &QThread::finished, localOutput, &QAudioOutput::deleteLater); + + qDebug() << "Starting QAudioOutput for local injector" << localOutput; localOutput->start(injector->getLocalBuffer()); return localOutput->state() == QAudio::ActiveState; @@ -1390,16 +1394,6 @@ bool Audio::outputLocalInjector(bool isStereo, qreal volume, AudioInjector* inje return false; } -void Audio::cleanupLocalOutputInterface() { - QAudioOutput* outputInterface = _injectedOutputInterfaces.value(sender()); - if (outputInterface) { - qDebug() << "Stopping a QAudioOutput interface since injector" << sender() << "is finished"; - - outputInterface->stop(); - outputInterface->deleteLater(); - } -} - void Audio::renderToolBox(int x, int y, bool boxed) { glEnable(GL_TEXTURE_2D); diff --git a/interface/src/Audio.h b/interface/src/Audio.h index 2380c49a91..65db32b723 100644 --- a/interface/src/Audio.h +++ b/interface/src/Audio.h @@ -179,9 +179,6 @@ signals: void preProcessOriginalInboundAudio(unsigned int sampleTime, QByteArray& samples, const QAudioFormat& format); void processInboundAudio(unsigned int sampleTime, const QByteArray& samples, const QAudioFormat& format); void processLocalAudio(unsigned int sampleTime, const QByteArray& samples, const QAudioFormat& format); - -private slots: - void cleanupLocalOutputInterface(); private: void outputFormatChanged(); @@ -369,8 +366,6 @@ private: AudioOutputIODevice _audioOutputIODevice; WeakRecorderPointer _recorder; - - QHash _injectedOutputInterfaces; };