Backed out changeset 158bbab1eb2a (FIRE-12077) as it causes other issues
parent
6b655eccb6
commit
80f42dfdd4
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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){};
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Reference in New Issue