diff options
| author | Andrey Kleshchev <andreykproductengine@lindenlab.com> | 2022-03-20 19:29:41 +0200 | 
|---|---|---|
| committer | Andrey Kleshchev <andreykproductengine@lindenlab.com> | 2022-03-21 09:44:55 +0200 | 
| commit | 625cc84ec0e281e5e68df0486c226ecf521dccde (patch) | |
| tree | 597f8a06f861c5053f9eadfeb9b33f48bb98cbdc /indra | |
| parent | 6ab212c96b30c272acdc1d772d2c597fb58c8910 (diff) | |
SL-16865 llStopSound() does not stop sound if it is out of cutoff radius
Diffstat (limited to 'indra')
| -rw-r--r-- | indra/llaudio/llaudioengine.cpp | 9 | ||||
| -rw-r--r-- | indra/llaudio/llaudioengine.h | 8 | ||||
| -rw-r--r-- | indra/newview/llviewerobject.cpp | 5 | 
3 files changed, 19 insertions, 3 deletions
| diff --git a/indra/llaudio/llaudioengine.cpp b/indra/llaudio/llaudioengine.cpp index d35f249973..e0ebbb76bd 100644 --- a/indra/llaudio/llaudioengine.cpp +++ b/indra/llaudio/llaudioengine.cpp @@ -1402,6 +1402,15 @@ bool LLAudioSource::setupChannel()  	return true;  } +void LLAudioSource::stop() +{ +    play(LLUUID::null); +    if (mCurrentDatap) +    { +        // always reset data if something wants us to stop +        mCurrentDatap = nullptr; +    } +}  bool LLAudioSource::play(const LLUUID &audio_uuid)  { diff --git a/indra/llaudio/llaudioengine.h b/indra/llaudio/llaudioengine.h index 577b36d667..b5fd4c27a1 100644 --- a/indra/llaudio/llaudioengine.h +++ b/indra/llaudio/llaudioengine.h @@ -304,7 +304,13 @@ public:  	LLAudioBuffer *getCurrentBuffer();  	bool setupChannel(); -	bool play(const LLUUID &audio_id);	// Start the audio source playing + +    // Stop the audio source, reset audio id even if muted +    void stop(); + +    // Start the audio source playing, +    // takes mute into account to preserve previous id if nessesary +    bool play(const LLUUID &audio_id);  	bool hasPendingPreloads() const;	// Has preloads that haven't been done yet diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp index 31e80eb865..4c476e89ce 100644 --- a/indra/newview/llviewerobject.cpp +++ b/indra/newview/llviewerobject.cpp @@ -1264,6 +1264,7 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,  				mesgsys->getBinaryDataFast(_PREHASH_ObjectData, _PREHASH_ObjectData, data, length, block_num, MAX_OBJECT_BINARY_DATA_SIZE);  				mTotalCRC = crc; +                // Might need to update mSourceMuted here to properly pick up new radius  				mSoundCutOffRadius = cutoff;  				// Owner ID used for sound muting or particle system muting @@ -5873,7 +5874,7 @@ void LLViewerObject::setAttachedSound(const LLUUID &audio_uuid, const LLUUID& ow  		else if (flags & LL_SOUND_FLAG_STOP)          {  			// Just shut off the sound -			mAudioSourcep->play(LLUUID::null); +			mAudioSourcep->stop();  		}  		return;  	} @@ -5912,7 +5913,7 @@ void LLViewerObject::setAttachedSound(const LLUUID &audio_uuid, const LLUUID& ow  		mAudioSourcep->setQueueSounds(queue);  		if(!queue) // stop any current sound first to avoid "farts of doom" (SL-1541) -MG  		{ -			mAudioSourcep->play(LLUUID::null); +			mAudioSourcep->stop();  		}  		// Play this sound if region maturity permits | 
