Delegate stream shutdown to LLAudioEngine and LLStreamingAudio_*
This commit is contained in:
@@ -174,6 +174,9 @@ void LLAudioEngine::shutdown()
|
|||||||
delete mBuffers[i];
|
delete mBuffers[i];
|
||||||
mBuffers[i] = NULL;
|
mBuffers[i] = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
delete mStreamingAudioImpl;
|
||||||
|
mStreamingAudioImpl = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -513,8 +513,6 @@ void LLAudioEngine_FMODEX::allocateListener(void)
|
|||||||
|
|
||||||
void LLAudioEngine_FMODEX::shutdown()
|
void LLAudioEngine_FMODEX::shutdown()
|
||||||
{
|
{
|
||||||
stopInternetStream();
|
|
||||||
|
|
||||||
LL_INFOS("AudioImpl") << "About to LLAudioEngine::shutdown()" << LL_ENDL;
|
LL_INFOS("AudioImpl") << "About to LLAudioEngine::shutdown()" << LL_ENDL;
|
||||||
LLAudioEngine::shutdown();
|
LLAudioEngine::shutdown();
|
||||||
|
|
||||||
|
|||||||
@@ -509,8 +509,6 @@ void LLAudioEngine_FMODSTUDIO::allocateListener(void)
|
|||||||
|
|
||||||
void LLAudioEngine_FMODSTUDIO::shutdown()
|
void LLAudioEngine_FMODSTUDIO::shutdown()
|
||||||
{
|
{
|
||||||
stopInternetStream();
|
|
||||||
|
|
||||||
LL_INFOS("AudioImpl") << "About to LLAudioEngine::shutdown()" << LL_ENDL;
|
LL_INFOS("AudioImpl") << "About to LLAudioEngine::shutdown()" << LL_ENDL;
|
||||||
LLAudioEngine::shutdown();
|
LLAudioEngine::shutdown();
|
||||||
|
|
||||||
|
|||||||
@@ -90,7 +90,13 @@ LLStreamingAudio_FMODEX::LLStreamingAudio_FMODEX(FMOD::System *system) :
|
|||||||
|
|
||||||
LLStreamingAudio_FMODEX::~LLStreamingAudio_FMODEX()
|
LLStreamingAudio_FMODEX::~LLStreamingAudio_FMODEX()
|
||||||
{
|
{
|
||||||
// nothing interesting/safe to do.
|
stop();
|
||||||
|
for (U32 i = 0; i < 100; ++i)
|
||||||
|
{
|
||||||
|
if (releaseDeadStreams())
|
||||||
|
break;
|
||||||
|
ms_sleep(10);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -169,24 +175,7 @@ std::string utf16input_to_utf8(char* input, U32 len, utf_endian_type_t type)
|
|||||||
|
|
||||||
void LLStreamingAudio_FMODEX::update()
|
void LLStreamingAudio_FMODEX::update()
|
||||||
{
|
{
|
||||||
// Kill dead internet streams, if possible
|
if (!releaseDeadStreams())
|
||||||
std::list<LLAudioStreamManagerFMODEX *>::iterator iter;
|
|
||||||
for (iter = mDeadStreams.begin(); iter != mDeadStreams.end();)
|
|
||||||
{
|
|
||||||
LLAudioStreamManagerFMODEX *streamp = *iter;
|
|
||||||
if (streamp->stopStream())
|
|
||||||
{
|
|
||||||
llinfos << "Closed dead stream" << llendl;
|
|
||||||
delete streamp;
|
|
||||||
mDeadStreams.erase(iter++);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
iter++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!mDeadStreams.empty())
|
|
||||||
{
|
{
|
||||||
llassert_always(mCurrentInternetStreamp == NULL);
|
llassert_always(mCurrentInternetStreamp == NULL);
|
||||||
return;
|
return;
|
||||||
@@ -570,3 +559,25 @@ void LLStreamingAudio_FMODEX::setBufferSizes(U32 streambuffertime, U32 decodebuf
|
|||||||
settings.defaultDecodeBufferSize = decodebuffertime;//ms
|
settings.defaultDecodeBufferSize = decodebuffertime;//ms
|
||||||
mSystem->setAdvancedSettings(&settings);
|
mSystem->setAdvancedSettings(&settings);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool LLStreamingAudio_FMODEX::releaseDeadStreams()
|
||||||
|
{
|
||||||
|
// Kill dead internet streams, if possible
|
||||||
|
std::list<LLAudioStreamManagerFMODSTUDIO *>::iterator iter;
|
||||||
|
for (iter = mDeadStreams.begin(); iter != mDeadStreams.end();)
|
||||||
|
{
|
||||||
|
LLAudioStreamManagerFMODSTUDIO *streamp = *iter;
|
||||||
|
if (streamp->stopStream())
|
||||||
|
{
|
||||||
|
llinfos << "Closed dead stream" << llendl;
|
||||||
|
delete streamp;
|
||||||
|
mDeadStreams.erase(iter++);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
iter++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return mDeadStreams.empty();
|
||||||
|
}
|
||||||
@@ -70,6 +70,8 @@ class LLStreamingAudio_FMODEX : public LLStreamingAudioInterface
|
|||||||
/*virtual*/ bool supportsAdjustableBufferSizes(){return true;}
|
/*virtual*/ bool supportsAdjustableBufferSizes(){return true;}
|
||||||
/*virtual*/ void setBufferSizes(U32 streambuffertime, U32 decodebuffertime);
|
/*virtual*/ void setBufferSizes(U32 streambuffertime, U32 decodebuffertime);
|
||||||
private:
|
private:
|
||||||
|
bool releaseDeadStreams();
|
||||||
|
|
||||||
FMOD::System *mSystem;
|
FMOD::System *mSystem;
|
||||||
|
|
||||||
LLAudioStreamManagerFMODEX *mCurrentInternetStreamp;
|
LLAudioStreamManagerFMODEX *mCurrentInternetStreamp;
|
||||||
|
|||||||
@@ -160,6 +160,13 @@ LLStreamingAudio_FMODSTUDIO::LLStreamingAudio_FMODSTUDIO(FMOD::System *system) :
|
|||||||
|
|
||||||
LLStreamingAudio_FMODSTUDIO::~LLStreamingAudio_FMODSTUDIO()
|
LLStreamingAudio_FMODSTUDIO::~LLStreamingAudio_FMODSTUDIO()
|
||||||
{
|
{
|
||||||
|
stop();
|
||||||
|
for (U32 i = 0; i < 100; ++i)
|
||||||
|
{
|
||||||
|
if (releaseDeadStreams())
|
||||||
|
break;
|
||||||
|
ms_sleep(10);
|
||||||
|
}
|
||||||
|
|
||||||
if (mStreamGroup)
|
if (mStreamGroup)
|
||||||
{
|
{
|
||||||
@@ -169,7 +176,6 @@ LLStreamingAudio_FMODSTUDIO::~LLStreamingAudio_FMODSTUDIO()
|
|||||||
}
|
}
|
||||||
if (mStreamDSP)
|
if (mStreamDSP)
|
||||||
mStreamDSP->release();
|
mStreamDSP->release();
|
||||||
// nothing interesting/safe to do.
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -248,24 +254,7 @@ std::string utf16input_to_utf8(char* input, U32 len, utf_endian_type_t type)
|
|||||||
|
|
||||||
void LLStreamingAudio_FMODSTUDIO::update()
|
void LLStreamingAudio_FMODSTUDIO::update()
|
||||||
{
|
{
|
||||||
// Kill dead internet streams, if possible
|
if (!releaseDeadStreams())
|
||||||
std::list<LLAudioStreamManagerFMODSTUDIO *>::iterator iter;
|
|
||||||
for (iter = mDeadStreams.begin(); iter != mDeadStreams.end();)
|
|
||||||
{
|
|
||||||
LLAudioStreamManagerFMODSTUDIO *streamp = *iter;
|
|
||||||
if (streamp->stopStream())
|
|
||||||
{
|
|
||||||
llinfos << "Closed dead stream" << llendl;
|
|
||||||
delete streamp;
|
|
||||||
mDeadStreams.erase(iter++);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
iter++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!mDeadStreams.empty())
|
|
||||||
{
|
{
|
||||||
llassert_always(mCurrentInternetStreamp == NULL);
|
llassert_always(mCurrentInternetStreamp == NULL);
|
||||||
return;
|
return;
|
||||||
@@ -653,3 +642,25 @@ void LLStreamingAudio_FMODSTUDIO::setBufferSizes(U32 streambuffertime, U32 decod
|
|||||||
settings.defaultDecodeBufferSize = decodebuffertime;//ms
|
settings.defaultDecodeBufferSize = decodebuffertime;//ms
|
||||||
mSystem->setAdvancedSettings(&settings);
|
mSystem->setAdvancedSettings(&settings);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool LLStreamingAudio_FMODSTUDIO::releaseDeadStreams()
|
||||||
|
{
|
||||||
|
// Kill dead internet streams, if possible
|
||||||
|
std::list<LLAudioStreamManagerFMODSTUDIO *>::iterator iter;
|
||||||
|
for (iter = mDeadStreams.begin(); iter != mDeadStreams.end();)
|
||||||
|
{
|
||||||
|
LLAudioStreamManagerFMODSTUDIO *streamp = *iter;
|
||||||
|
if (streamp->stopStream())
|
||||||
|
{
|
||||||
|
llinfos << "Closed dead stream" << llendl;
|
||||||
|
delete streamp;
|
||||||
|
mDeadStreams.erase(iter++);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
iter++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return mDeadStreams.empty();
|
||||||
|
}
|
||||||
@@ -74,6 +74,8 @@ class LLStreamingAudio_FMODSTUDIO : public LLStreamingAudioInterface
|
|||||||
/*virtual*/ void setBufferSizes(U32 streambuffertime, U32 decodebuffertime);
|
/*virtual*/ void setBufferSizes(U32 streambuffertime, U32 decodebuffertime);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
bool releaseDeadStreams();
|
||||||
|
|
||||||
FMOD::System *mSystem;
|
FMOD::System *mSystem;
|
||||||
|
|
||||||
LLAudioStreamManagerFMODSTUDIO *mCurrentInternetStreamp;
|
LLAudioStreamManagerFMODSTUDIO *mCurrentInternetStreamp;
|
||||||
|
|||||||
@@ -4479,12 +4479,6 @@ void LLAppViewer::shutdownAudio()
|
|||||||
{
|
{
|
||||||
if (gAudiop)
|
if (gAudiop)
|
||||||
{
|
{
|
||||||
// shut down the streaming audio sub-subsystem first, in case it relies on not outliving the general audio subsystem.
|
|
||||||
|
|
||||||
LLStreamingAudioInterface *sai = gAudiop->getStreamingAudioImpl();
|
|
||||||
delete sai;
|
|
||||||
gAudiop->setStreamingAudioImpl(NULL);
|
|
||||||
|
|
||||||
// shut down the audio subsystem
|
// shut down the audio subsystem
|
||||||
|
|
||||||
bool want_longname = false;
|
bool want_longname = false;
|
||||||
|
|||||||
Reference in New Issue
Block a user