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:
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user