From c9ab38d449be8516e8efb2b4b33245f066371fdd Mon Sep 17 00:00:00 2001 From: Siana Gearz Date: Tue, 26 Feb 2013 23:13:39 +0100 Subject: [PATCH] Stream frequency change support and new anti-starvation strategy --- indra/llaudio/llstreamingaudio_fmodex.cpp | 23 +++++++++++++--------- indra/llaudio/llstreamingaudio_fmodex.h | 2 -- indra/newview/app_settings/settings_sh.xml | 4 ++-- 3 files changed, 16 insertions(+), 13 deletions(-) diff --git a/indra/llaudio/llstreamingaudio_fmodex.cpp b/indra/llaudio/llstreamingaudio_fmodex.cpp index 535c77a7b..2f7bdf6bd 100644 --- a/indra/llaudio/llstreamingaudio_fmodex.cpp +++ b/indra/llaudio/llstreamingaudio_fmodex.cpp @@ -161,7 +161,6 @@ void LLStreamingAudio_FMODEX::update() // Reset volume to previously set volume setGain(getGain()); mFMODInternetStreamChannelp->setPaused(false); - mLastStarved.stop(); } } else if(open_state == FMOD_OPENSTATE_ERROR) @@ -200,6 +199,13 @@ void LLStreamingAudio_FMODEX::update() if(name == "Title") name = "TITLE"; else if(name == "WM/AlbumArtist") name = "ARTIST"; break; + case(FMOD_TAGTYPE_FMOD): + if (!strcmp(tag.name, "Sample Rate Change")) + { + llinfos << "Stream forced changing sample rate to " << *((float *)tag.data) << llendl; + mFMODInternetStreamChannelp->setFrequency(*((float *)tag.data)); + } + continue; default: break; } @@ -243,19 +249,19 @@ void LLStreamingAudio_FMODEX::update() } if(starving) { - if(!mLastStarved.getStarted()) + bool paused = false; + mFMODInternetStreamChannelp->getPaused(&paused); + if(!paused) { - llinfos << "Stream starvation detected! Muting stream audio until it clears." << llendl; + llinfos << "Stream starvation detected! Pausing stream until buffer nearly full." << llendl; llinfos << " (diskbusy="<setMute(true); + mFMODInternetStreamChannelp->setPaused(true); } - mLastStarved.start(); } - else if(mLastStarved.getStarted() && mLastStarved.getElapsedTimeF32() > 1.f) + else if(progress > 80) { - mLastStarved.stop(); - mFMODInternetStreamChannelp->setMute(false); + mFMODInternetStreamChannelp->setPaused(false); } } } @@ -263,7 +269,6 @@ void LLStreamingAudio_FMODEX::update() void LLStreamingAudio_FMODEX::stop() { - mLastStarved.stop(); if(mMetaData) { delete mMetaData; diff --git a/indra/llaudio/llstreamingaudio_fmodex.h b/indra/llaudio/llstreamingaudio_fmodex.h index 1b5211485..54d96e9a5 100644 --- a/indra/llaudio/llstreamingaudio_fmodex.h +++ b/indra/llaudio/llstreamingaudio_fmodex.h @@ -79,8 +79,6 @@ private: std::string mURL; F32 mGain; - LLTimer mLastStarved; - LLSD *mMetaData; }; diff --git a/indra/newview/app_settings/settings_sh.xml b/indra/newview/app_settings/settings_sh.xml index 411bc1e36..dedf2e435 100644 --- a/indra/newview/app_settings/settings_sh.xml +++ b/indra/newview/app_settings/settings_sh.xml @@ -50,7 +50,7 @@ Type U32 Value - 7000 + 15000 SHFMODExDecodeBufferSize @@ -61,7 +61,7 @@ Type U32 Value - 1000 + 2000 SHAllowScriptCommands