void LLAudioSource::update() { if(mCorrupted) { return ; //no need to update } if (!getCurrentBuffer()) { LLAudioData *adp = getCurrentData(); if (adp) { // Hack - try and load the sound. Will do this as a callback // on decode later. if (adp->load() && adp->getBuffer()) { play(adp->getID()); } else if (adp->hasCompletedDecode()) // Only mark corrupted after decode is done { llwarns << "Marking LLAudioSource corrupted for " << adp->getID() << llendl; mCorrupted = true ; } } } }
void LLAudioSource::update() { if(mCorrupted) { return ; //no need to update } // If data is queued up and we aren't playing it, shuffle it to current and try to load it. if(isQueueSounds() && mPlayedOnce && mQueuedDatap && !mChannelp) { mCurrentDatap = mQueuedDatap; mQueuedDatap = NULL; //Make sure this source looks like its brand new again to prevent removal. mPlayedOnce = false; mAgeTimer.reset(); } LLAudioData *adp = getCurrentData(); if (adp && !adp->getBuffer()) { if(adp->getLoadState() == LLAudioData::STATE_LOAD_ERROR) { LL_WARNS("AudioEngine") << "Marking LLAudioSource corrupted for " << adp->getID() << LL_ENDL; mCorrupted = true ; } else if(adp->getLoadState() == LLAudioData::STATE_LOAD_READY) { // Update the audio buffer first - load a sound if we have it. // Note that this could potentially cause us to waste time updating buffers // for sounds that actually aren't playing, although this should be mitigated // by the fact that we limit the number of buffers, and we flush buffers based // on priority. adp->load(); //If it fails, just try again next update. } else { //The sound wasn't preloaded yet... so we must kick off the process. adp->updateLoadState(); } } }