Testing: Be a bit more OCD about avoiding starting new streams before the previous one has been successfully been released.

This commit is contained in:
Shyotl
2013-05-03 14:32:18 -05:00
parent 701fc87c05
commit 808341e184
2 changed files with 33 additions and 9 deletions

View File

@@ -107,10 +107,18 @@ void LLStreamingAudio_FMODEX::start(const std::string& url)
if (!url.empty()) if (!url.empty())
{ {
llinfos << "Starting internet stream: " << url << llendl; if(mDeadStreams.empty())
mCurrentInternetStreamp = new LLAudioStreamManagerFMODEX(mSystem,url); {
mURL = url; llinfos << "Starting internet stream: " << url << llendl;
mMetaData = new LLSD; mCurrentInternetStreamp = new LLAudioStreamManagerFMODEX(mSystem,url);
mURL = url;
mMetaData = new LLSD;
}
else
{
llinfos << "Deferring stream load until buffer release: " << url << llendl;
mPendingURL = url;
}
} }
else else
{ {
@@ -139,6 +147,22 @@ void LLStreamingAudio_FMODEX::update()
} }
} }
if(!mDeadStreams.empty())
{
llassert_always(mCurrentInternetStreamp == NULL);
return;
}
if(!mPendingURL.empty())
{
llassert_always(mCurrentInternetStreamp == NULL);
llinfos << "Starting internet stream: " << mPendingURL << llendl;
mCurrentInternetStreamp = new LLAudioStreamManagerFMODEX(mSystem,mPendingURL);
mURL = mPendingURL;
mMetaData = new LLSD;
mPendingURL.clear();
}
// Don't do anything if there are no streams playing // Don't do anything if there are no streams playing
if (!mCurrentInternetStreamp) if (!mCurrentInternetStreamp)
{ {
@@ -269,6 +293,8 @@ void LLStreamingAudio_FMODEX::update()
void LLStreamingAudio_FMODEX::stop() void LLStreamingAudio_FMODEX::stop()
{ {
mPendingURL.clear();
if(mMetaData) if(mMetaData)
{ {
delete mMetaData; delete mMetaData;
@@ -327,7 +353,7 @@ int LLStreamingAudio_FMODEX::isPlaying()
{ {
return 1; // Active and playing return 1; // Active and playing
} }
else if (!mURL.empty()) else if (!mURL.empty() || !mPendingURL.empty())
{ {
return 2; // "Paused" return 2; // "Paused"
} }
@@ -439,8 +465,6 @@ bool LLAudioStreamManagerFMODEX::stopStream()
{ {
if (mInternetStream) if (mInternetStream)
{ {
bool close = true; bool close = true;
switch (getOpenState()) switch (getOpenState())
{ {
@@ -455,9 +479,8 @@ bool LLAudioStreamManagerFMODEX::stopStream()
close = true; close = true;
} }
if (close) if (close && mInternetStream->release() == FMOD_OK)
{ {
mInternetStream->release();
mStreamChannel = NULL; mStreamChannel = NULL;
mInternetStream = NULL; mInternetStream = NULL;
return true; return true;

View File

@@ -77,6 +77,7 @@ private:
std::list<LLAudioStreamManagerFMODEX *> mDeadStreams; std::list<LLAudioStreamManagerFMODEX *> mDeadStreams;
std::string mURL; std::string mURL;
std::string mPendingURL;
F32 mGain; F32 mGain;
LLSD *mMetaData; LLSD *mMetaData;