diff options
Diffstat (limited to 'indra/llaudio')
| -rw-r--r-- | indra/llaudio/llaudiodecodemgr.cpp | 22 | ||||
| -rw-r--r-- | indra/llaudio/llaudioengine.cpp | 22 | ||||
| -rw-r--r-- | indra/llaudio/llaudioengine.h | 9 | 
3 files changed, 36 insertions, 17 deletions
| diff --git a/indra/llaudio/llaudiodecodemgr.cpp b/indra/llaudio/llaudiodecodemgr.cpp index 7f747c2eca..6c97a64ed7 100644 --- a/indra/llaudio/llaudiodecodemgr.cpp +++ b/indra/llaudio/llaudiodecodemgr.cpp @@ -571,7 +571,8 @@ void LLAudioDecodeMgr::Impl::processQueue(const F32 num_secs)  				llwarns << mCurrentDecodep->getUUID() << " has invalid vorbis data, aborting decode" << llendl;  				mCurrentDecodep->flushBadFile();  				LLAudioData *adp = gAudiop->getAudioData(mCurrentDecodep->getUUID()); -				adp->setHasValidData(FALSE); +				adp->setHasValidData(false); +				adp->setHasCompletedDecode(true);  				mCurrentDecodep = NULL;  				done = TRUE;  			} @@ -586,11 +587,16 @@ void LLAudioDecodeMgr::Impl::processQueue(const F32 num_secs)  				if (mCurrentDecodep->finishDecode())  				{  					// We finished! -					if (mCurrentDecodep->isValid() && mCurrentDecodep->isDone()) +					LLAudioData *adp = gAudiop->getAudioData(mCurrentDecodep->getUUID()); +					if (!adp)  					{ -						LLAudioData *adp = gAudiop->getAudioData(mCurrentDecodep->getUUID()); -						adp->setHasDecodedData(TRUE); -						adp->setHasValidData(TRUE); +						llwarns << "Missing LLAudioData for decode of " << mCurrentDecodep->getUUID() << llendl; +					} +					else if (mCurrentDecodep->isValid() && mCurrentDecodep->isDone()) +					{ +						adp->setHasCompletedDecode(true); +						adp->setHasDecodedData(true); +						adp->setHasValidData(true);  						// At this point, we could see if anyone needs this sound immediately, but  						// I'm not sure that there's a reason to - we need to poll all of the playing @@ -599,7 +605,8 @@ void LLAudioDecodeMgr::Impl::processQueue(const F32 num_secs)  					}  					else  					{ -						llinfos << "Vorbis decode failed!!!" << llendl; +						adp->setHasCompletedDecode(true); +						llinfos << "Vorbis decode failed for " << mCurrentDecodep->getUUID() << llendl;  					}  					mCurrentDecodep = NULL;  				} @@ -667,16 +674,19 @@ BOOL LLAudioDecodeMgr::addDecodeRequest(const LLUUID &uuid)  	if (gAudiop->hasDecodedFile(uuid))  	{  		// Already have a decoded version, don't need to decode it. +		//llinfos << "addDecodeRequest for " << uuid << " has decoded file already" << llendl;  		return TRUE;  	}  	if (gAssetStorage->hasLocalAsset(uuid, LLAssetType::AT_SOUND))  	{  		// Just put it on the decode queue. +		//llinfos << "addDecodeRequest for " << uuid << " has local asset file already" << llendl;  		mImpl->mDecodeQueue.push(uuid);  		return TRUE;  	} +	//llinfos << "addDecodeRequest for " << uuid << " no file available" << llendl;  	return FALSE;  } diff --git a/indra/llaudio/llaudioengine.cpp b/indra/llaudio/llaudioengine.cpp index 5fa28cb902..72c0091d17 100644 --- a/indra/llaudio/llaudioengine.cpp +++ b/indra/llaudio/llaudioengine.cpp @@ -1221,10 +1221,11 @@ void LLAudioEngine::assetCallback(LLVFS *vfs, const LLUUID &uuid, LLAssetType::E  		// Need to mark data as bad to avoid constant rerequests.  		LLAudioData *adp = gAudiop->getAudioData(uuid);  		if (adp) -        { +        {	// Make sure everything is cleared  			adp->setHasValidData(false);  			adp->setHasLocalData(false);  			adp->setHasDecodedData(false); +			adp->setHasCompletedDecode(true);  		}  	}  	else @@ -1237,6 +1238,7 @@ void LLAudioEngine::assetCallback(LLVFS *vfs, const LLUUID &uuid, LLAssetType::E          }  		else  		{ +			// llinfos << "Got asset callback with good audio data for " << uuid << ", making decode request" << llendl;  			adp->setHasValidData(true);  		    adp->setHasLocalData(true);  		    gAudioDecodeMgrp->addDecodeRequest(uuid); @@ -1304,16 +1306,18 @@ void LLAudioSource::update()  	if (!getCurrentBuffer())  	{ -		if (getCurrentData()) +		LLAudioData *adp = getCurrentData(); +		if (adp)  		{  			// Hack - try and load the sound.  Will do this as a callback  			// on decode later. -			if (getCurrentData()->load() && getCurrentData()->getBuffer()) +			if (adp->load() && adp->getBuffer())  			{ -				play(getCurrentData()->getID()); +				play(adp->getID());  			} -			else +			else if (adp->hasCompletedDecode())		// Only mark corrupted after decode is done  			{ +				llwarns << "Marking LLAudioSource corrupted for " << adp->getID() << llendl;  				mCorrupted = true ;  			}  		} @@ -1731,6 +1735,7 @@ LLAudioData::LLAudioData(const LLUUID &uuid) :  	mBufferp(NULL),  	mHasLocalData(false),  	mHasDecodedData(false), +	mHasCompletedDecode(false),  	mHasValidData(true)  {  	if (uuid.isNull()) @@ -1742,12 +1747,13 @@ LLAudioData::LLAudioData(const LLUUID &uuid) :  	if (gAudiop && gAudiop->hasDecodedFile(uuid))  	{  		// Already have a decoded version, don't need to decode it. -		mHasLocalData = true; -		mHasDecodedData = true; +		setHasLocalData(true); +		setHasDecodedData(true); +		setHasCompletedDecode(true);  	}  	else if (gAssetStorage && gAssetStorage->hasLocalAsset(uuid, LLAssetType::AT_SOUND))  	{ -		mHasLocalData = true; +		setHasLocalData(true);  	}  } diff --git a/indra/llaudio/llaudioengine.h b/indra/llaudio/llaudioengine.h index 28b69e1973..df1e4dc305 100644 --- a/indra/llaudio/llaudioengine.h +++ b/indra/llaudio/llaudioengine.h @@ -372,10 +372,12 @@ public:  	bool	hasLocalData() const		{ return mHasLocalData; }  	bool	hasDecodedData() const		{ return mHasDecodedData; } +	bool	hasCompletedDecode() const	{ return mHasCompletedDecode; }  	bool	hasValidData() const		{ return mHasValidData; }  	void	setHasLocalData(const bool hld)		{ mHasLocalData = hld; }  	void	setHasDecodedData(const bool hdd)	{ mHasDecodedData = hdd; } +	void	setHasCompletedDecode(const bool hcd)	{ mHasCompletedDecode = hcd; }  	void	setHasValidData(const bool hvd)		{ mHasValidData = hvd; }  	friend class LLAudioEngine; // Severe laziness, bad. @@ -383,9 +385,10 @@ public:  protected:  	LLUUID mID;  	LLAudioBuffer *mBufferp;	// If this data is being used by the audio system, a pointer to the buffer will be set here. -	bool mHasLocalData; -	bool mHasDecodedData; -	bool mHasValidData; +	bool mHasLocalData;			// Set true if the sound asset file is available locally +	bool mHasDecodedData;		// Set true if the sound file has been decoded +	bool mHasCompletedDecode;	// Set true when the sound is decoded +	bool mHasValidData;			// Set false if decoding failed, meaning the sound asset is bad  }; | 
