From 80f42dfdd48bf7391c90eaad67d93f9e78b2a24d Mon Sep 17 00:00:00 2001 From: Ansariel Date: Tue, 16 Jun 2015 20:25:27 +0200 Subject: [PATCH] Backed out changeset 158bbab1eb2a (FIRE-12077) as it causes other issues --- indra/llaudio/llaudioengine_fmodex.cpp | 4 +- indra/llaudio/llstreamingaudio.h | 3 - indra/llaudio/llstreamingaudio_fmodex.cpp | 126 +++++----------------- indra/llaudio/llstreamingaudio_fmodex.h | 8 +- indra/newview/llappviewer.cpp | 35 +----- 5 files changed, 29 insertions(+), 147 deletions(-) diff --git a/indra/llaudio/llaudioengine_fmodex.cpp b/indra/llaudio/llaudioengine_fmodex.cpp index c69e361d29..9867d06cbd 100644 --- a/indra/llaudio/llaudioengine_fmodex.cpp +++ b/indra/llaudio/llaudioengine_fmodex.cpp @@ -358,9 +358,7 @@ void LLAudioEngine_FMODEX::allocateListener(void) void LLAudioEngine_FMODEX::shutdown() { - // Safe stop and release for FMOD Ex music streams - //stopInternetStream(); - // + stopInternetStream(); LL_INFOS() << "About to LLAudioEngine::shutdown()" << LL_ENDL; LLAudioEngine::shutdown(); diff --git a/indra/llaudio/llstreamingaudio.h b/indra/llaudio/llstreamingaudio.h index befca39628..aa3fbe93e5 100755 --- a/indra/llaudio/llstreamingaudio.h +++ b/indra/llaudio/llstreamingaudio.h @@ -45,9 +45,6 @@ class LLStreamingAudioInterface virtual void setGain(F32 vol) = 0; virtual F32 getGain() = 0; virtual std::string getURL() = 0; - // Safe stop and release for FMOD Ex music streams - virtual bool delayedRelease(bool force = false){return false;} - // virtual bool supportsAdjustableBufferSizes(){return false;} virtual void setBufferSizes(U32 streambuffertime, U32 decodebuffertime){}; diff --git a/indra/llaudio/llstreamingaudio_fmodex.cpp b/indra/llaudio/llstreamingaudio_fmodex.cpp index dff80578bc..cc942e636a 100644 --- a/indra/llaudio/llstreamingaudio_fmodex.cpp +++ b/indra/llaudio/llstreamingaudio_fmodex.cpp @@ -52,9 +52,6 @@ public: LLAudioStreamManagerFMODEX(FMOD::System *system, const std::string& url); FMOD::Channel* startStream(); bool stopStream(); // Returns true if the stream was successfully stopped. - // Safe stop and release for FMOD Ex music streams - void forceReleaseStream(); // This should rarely if ever be called. - // bool ready(); const std::string& getURL() { return mInternetStreamURL; } @@ -129,31 +126,22 @@ void LLStreamingAudio_FMODEX::start(const std::string& url) void LLStreamingAudio_FMODEX::update() { - // Safe stop and release for FMOD Ex music streams - //// Kill dead internet streams, if possible - //std::list::iterator iter; - //for (iter = mDeadStreams.begin(); iter != mDeadStreams.end();) - //{ - // LLAudioStreamManagerFMODEX *streamp = *iter; - // if (streamp->stopStream()) - // { - // LL_INFOS() << "Closed dead stream" << LL_ENDL; - // delete streamp; - // mDeadStreams.erase(iter++); - // } - // else - // { - // iter++; - // } - //} - - // Doesn't matter if this returns true or false here. Calling it is what kills delayed release streams - // if safe to do so. Returning true or false only matters when called from llappviewer during shutdown - if (delayedRelease()) + // Kill dead internet streams, if possible + std::list::iterator iter; + for (iter = mDeadStreams.begin(); iter != mDeadStreams.end();) { - // Do nothing. + LLAudioStreamManagerFMODEX *streamp = *iter; + if (streamp->stopStream()) + { + LL_INFOS() << "Closed dead stream" << LL_ENDL; + delete streamp; + mDeadStreams.erase(iter++); + } + else + { + iter++; + } } - // // Don't do anything if there are no streams playing if (!mCurrentInternetStreamp) @@ -317,11 +305,8 @@ void LLStreamingAudio_FMODEX::stop() { if (mFMODInternetStreamChannelp) { - // Safe stop and release for FMOD Ex music streams - //mFMODInternetStreamChannelp->setPaused(true); - //mFMODInternetStreamChannelp->setPriority(0); - mFMODInternetStreamChannelp->stop(); - // + mFMODInternetStreamChannelp->setPaused(true); + mFMODInternetStreamChannelp->setPriority(0); mFMODInternetStreamChannelp = NULL; } @@ -330,60 +315,18 @@ void LLStreamingAudio_FMODEX::stop() LL_INFOS() << "Stopping internet stream: " << mCurrentInternetStreamp->getURL() << LL_ENDL; if (mCurrentInternetStreamp->stopStream()) { - // Safe stop and release for FMOD Ex music streams - LL_INFOS() << "Successfully released internet stream: " << mCurrentInternetStreamp->getURL() << LL_ENDL; - // delete mCurrentInternetStreamp; } else { - // Safe stop and release for FMOD Ex music streams - //LL_WARNS() << "Pushing stream to dead list: " << mCurrentInternetStreamp->getURL() << LL_ENDL; - //mDeadStreams.push_back(mCurrentInternetStreamp); - LL_INFOS() << "Delaying release of internet stream: " << mCurrentInternetStreamp->getURL() << LL_ENDL; - mDelayedReleaseStreams.push_back(mCurrentInternetStreamp); - // + LL_WARNS() << "Pushing stream to dead list: " << mCurrentInternetStreamp->getURL() << LL_ENDL; + mDeadStreams.push_back(mCurrentInternetStreamp); } mCurrentInternetStreamp = NULL; //mURL.clear(); } } -// Safe stop and release for FMOD Ex music streams -bool LLStreamingAudio_FMODEX::delayedRelease(bool force) -{ - bool streams = false; - std::list::iterator iter; - for (iter = mDelayedReleaseStreams.begin(); iter != mDelayedReleaseStreams.end();) - { - streams = true; - LLAudioStreamManagerFMODEX *streamp = *iter; - - if (!force) - { - if (streamp->stopStream()) - { - LL_INFOS() << "Successfully released internet stream: " << streamp->getURL() << LL_ENDL; - delete streamp; - mDelayedReleaseStreams.erase(iter++); - } - else - { - iter++; - } - } - else - { - streamp->forceReleaseStream(); - LL_INFOS() << "Force released internet stream: " << streamp->getURL() << LL_ENDL; - delete streamp; - mDelayedReleaseStreams.erase(iter++); - } - } - return streams; -} -// - void LLStreamingAudio_FMODEX::pause(int pauseopt) { if (pauseopt < 0) @@ -514,25 +457,16 @@ bool LLAudioStreamManagerFMODEX::stopStream() { if (mInternetStream) { - // Safe stop and release for FMOD Ex music streams - mSystem->update(); - - //bool close = true; - bool close = false; + + + bool close = true; switch (getOpenState()) { - //case FMOD_OPENSTATE_CONNECTING: - case FMOD_OPENSTATE_READY: - //close = false; - close = true; - break; - case FMOD_OPENSTATE_ERROR: - close = true; + case FMOD_OPENSTATE_CONNECTING: + close = false; break; default: - //close = true; - close = false; - // + close = true; } if (close) @@ -553,18 +487,6 @@ bool LLAudioStreamManagerFMODEX::stopStream() } } -// Safe stop and release for FMOD Ex music streams -void LLAudioStreamManagerFMODEX::forceReleaseStream() -{ - if (mInternetStream) - { - mInternetStream->release(); - mStreamChannel = NULL; - mInternetStream = NULL; - } -} -// - FMOD_OPENSTATE LLAudioStreamManagerFMODEX::getOpenState(unsigned int* percentbuffered, bool* starving, bool* diskbusy) { FMOD_OPENSTATE state; diff --git a/indra/llaudio/llstreamingaudio_fmodex.h b/indra/llaudio/llstreamingaudio_fmodex.h index 69d5f0baee..56a1a2f6f2 100644 --- a/indra/llaudio/llstreamingaudio_fmodex.h +++ b/indra/llaudio/llstreamingaudio_fmodex.h @@ -55,9 +55,6 @@ class LLStreamingAudio_FMODEX : public LLStreamingAudioInterface /*virtual*/ void setGain(F32 vol); /*virtual*/ F32 getGain(); /*virtual*/ std::string getURL(); - // Safe stop and release for FMOD Ex music streams - /*virtual*/ bool delayedRelease(bool force = false); - // /*virtual*/ bool supportsAdjustableBufferSizes(){return true;} /*virtual*/ void setBufferSizes(U32 streambuffertime, U32 decodebuffertime); @@ -71,10 +68,7 @@ private: LLAudioStreamManagerFMODEX *mCurrentInternetStreamp; FMOD::Channel *mFMODInternetStreamChannelp; - // Safe stop and release for FMOD Ex music streams - //std::list mDeadStreams; - std::list mDelayedReleaseStreams; - // + std::list mDeadStreams; std::string mURL; F32 mGain; diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index df4981418d..3e0e46a208 100755 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -2138,40 +2138,11 @@ bool LLAppViewer::cleanup() // shut down the streaming audio sub-subsystem first, in case it relies on not outliving the general audio subsystem. LLStreamingAudioInterface *sai = gAudiop->getStreamingAudioImpl(); - // Safe stop and release for FMOD Ex music streams - if (sai) - { - sai->stop(); - - LLTimer streamReleaseTimer; - streamReleaseTimer.start(); - - // Kill delayed release streams if any. Most streams will release almost instantly - // but there is a timeout in place just in case. - while (sai->delayedRelease() && streamReleaseTimer.getElapsedTimeF32() < 5.0f); - { - // Do nothing while waiting for delayedRelease to kill the streams. - } - streamReleaseTimer.stop(); - - // We should rarely if ever enter this loop, but we will if there are streams that - // were not released before the 5 second timeout above. Show no mercy and call release - // on them right away. - while (sai->delayedRelease(true)); - { - // Do nothing again while delayedRelease force kills the streams. - } - } - - //delete sai; - //gAudiop->setStreamingAudioImpl(NULL); - - // shut down the audio subsystem - gAudiop->shutdown(); - delete sai; gAudiop->setStreamingAudioImpl(NULL); - // + + // shut down the audio subsystem + gAudiop->shutdown(); delete gAudiop; gAudiop = NULL;