Backed out changeset 158bbab1eb2a (FIRE-12077) as it causes other issues

Ansariel 2015-06-16 20:25:27 +02:00
parent 6b655eccb6
commit 80f42dfdd4
5 changed files with 29 additions and 147 deletions

View File

@ -358,9 +358,7 @@ void LLAudioEngine_FMODEX::allocateListener(void)
void LLAudioEngine_FMODEX::shutdown()
{
// <FS:GF> Safe stop and release for FMOD Ex music streams
//stopInternetStream();
// <FS:GF>
stopInternetStream();
LL_INFOS() << "About to LLAudioEngine::shutdown()" << LL_ENDL;
LLAudioEngine::shutdown();

View File

@ -45,9 +45,6 @@ class LLStreamingAudioInterface
virtual void setGain(F32 vol) = 0;
virtual F32 getGain() = 0;
virtual std::string getURL() = 0;
// <FS:GF> Safe stop and release for FMOD Ex music streams
virtual bool delayedRelease(bool force = false){return false;}
// <FS:GF>
virtual bool supportsAdjustableBufferSizes(){return false;}
virtual void setBufferSizes(U32 streambuffertime, U32 decodebuffertime){};

View File

@ -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.
// <FS:GF> Safe stop and release for FMOD Ex music streams
void forceReleaseStream(); // This should rarely if ever be called.
// <FS:GF>
bool ready();
const std::string& getURL() { return mInternetStreamURL; }
@ -129,31 +126,22 @@ void LLStreamingAudio_FMODEX::start(const std::string& url)
void LLStreamingAudio_FMODEX::update()
{
// <FS:GF> Safe stop and release for FMOD Ex music streams
//// Kill dead internet streams, if possible
//std::list<LLAudioStreamManagerFMODEX *>::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<LLAudioStreamManagerFMODEX *>::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++;
}
}
// <FS:GF>
// Don't do anything if there are no streams playing
if (!mCurrentInternetStreamp)
@ -317,11 +305,8 @@ void LLStreamingAudio_FMODEX::stop()
{
if (mFMODInternetStreamChannelp)
{
// <FS:GF> Safe stop and release for FMOD Ex music streams
//mFMODInternetStreamChannelp->setPaused(true);
//mFMODInternetStreamChannelp->setPriority(0);
mFMODInternetStreamChannelp->stop();
// <FS:GF>
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())
{
// <FS:GF> Safe stop and release for FMOD Ex music streams
LL_INFOS() << "Successfully released internet stream: " << mCurrentInternetStreamp->getURL() << LL_ENDL;
// <FS:GF>
delete mCurrentInternetStreamp;
}
else
{
// <FS:GF> 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);
// <FS:GF>
LL_WARNS() << "Pushing stream to dead list: " << mCurrentInternetStreamp->getURL() << LL_ENDL;
mDeadStreams.push_back(mCurrentInternetStreamp);
}
mCurrentInternetStreamp = NULL;
//mURL.clear();
}
}
// <FS:GF> Safe stop and release for FMOD Ex music streams
bool LLStreamingAudio_FMODEX::delayedRelease(bool force)
{
bool streams = false;
std::list<LLAudioStreamManagerFMODEX *>::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;
}
// <FS:GF>
void LLStreamingAudio_FMODEX::pause(int pauseopt)
{
if (pauseopt < 0)
@ -514,25 +457,16 @@ bool LLAudioStreamManagerFMODEX::stopStream()
{
if (mInternetStream)
{
// <FS:GF> 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;
// <FS:GF>
close = true;
}
if (close)
@ -553,18 +487,6 @@ bool LLAudioStreamManagerFMODEX::stopStream()
}
}
// <FS:GF> Safe stop and release for FMOD Ex music streams
void LLAudioStreamManagerFMODEX::forceReleaseStream()
{
if (mInternetStream)
{
mInternetStream->release();
mStreamChannel = NULL;
mInternetStream = NULL;
}
}
// <FS:GF>
FMOD_OPENSTATE LLAudioStreamManagerFMODEX::getOpenState(unsigned int* percentbuffered, bool* starving, bool* diskbusy)
{
FMOD_OPENSTATE state;

View File

@ -55,9 +55,6 @@ class LLStreamingAudio_FMODEX : public LLStreamingAudioInterface
/*virtual*/ void setGain(F32 vol);
/*virtual*/ F32 getGain();
/*virtual*/ std::string getURL();
// <FS:GF> Safe stop and release for FMOD Ex music streams
/*virtual*/ bool delayedRelease(bool force = false);
// <FS:GF>
/*virtual*/ bool supportsAdjustableBufferSizes(){return true;}
/*virtual*/ void setBufferSizes(U32 streambuffertime, U32 decodebuffertime);
@ -71,10 +68,7 @@ private:
LLAudioStreamManagerFMODEX *mCurrentInternetStreamp;
FMOD::Channel *mFMODInternetStreamChannelp;
// <FS:GF> Safe stop and release for FMOD Ex music streams
//std::list<LLAudioStreamManagerFMODEX *> mDeadStreams;
std::list<LLAudioStreamManagerFMODEX *> mDelayedReleaseStreams;
// <FS:GF>
std::list<LLAudioStreamManagerFMODEX *> mDeadStreams;
std::string mURL;
F32 mGain;

View File

@ -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();
// <FS:GF> 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);
// <FS:GF>
// shut down the audio subsystem
gAudiop->shutdown();
delete gAudiop;
gAudiop = NULL;