diff options
| author | Mike Antipov <mantipov@productengine.com> | 2010-02-04 16:43:59 +0200 | 
|---|---|---|
| committer | Mike Antipov <mantipov@productengine.com> | 2010-02-04 16:43:59 +0200 | 
| commit | b1891e2982cc03ccd695eae82989d3e58695616c (patch) | |
| tree | d017d81f187f5dd0743c7ae2f433c6b89cf1e3df /indra/newview | |
| parent | 353be3c934927610c9a4a28fd508ebf91fc290c3 (diff) | |
Fixed normal bug EXT-4925 (Please make user voice settings compatible with 1.23)
- for now volume level is stored in external (vivox) format [0.0 - 1.0]
- this fix should be included into the Beta 2 release
--HG--
branch : product-engine
Diffstat (limited to 'indra/newview')
| -rw-r--r-- | indra/newview/llvoiceclient.cpp | 26 | 
1 files changed, 15 insertions, 11 deletions
| diff --git a/indra/newview/llvoiceclient.cpp b/indra/newview/llvoiceclient.cpp index b6e7e73b9d..f3bfc2e86c 100644 --- a/indra/newview/llvoiceclient.cpp +++ b/indra/newview/llvoiceclient.cpp @@ -1107,16 +1107,17 @@ public:  	 * Sets internal voluem level for specified user.  	 *  	 * @param[in] speaker_id - LLUUID of user to store volume level for -	 * @param[in] volume - internal volume level to be stored for user. +	 * @param[in] volume - external (vivox) volume level to be stored for user.  	 */ -	void storeSpeakerVolume(const LLUUID& speaker_id, S32 volume); +	void storeSpeakerVolume(const LLUUID& speaker_id, F32 volume);  	/** -	 * Gets stored internal volume level for specified speaker. +	 * Gets stored external (vivox) volume level for specified speaker and +	 * transforms it into internal (viewer) level.  	 *  	 * If specified user is not found default level will be returned. It is equivalent of   	 * external level 0.5 from the 0.0..1.0 range. -	 * Default internal level is calculated as: internal = 400 * external^2 +	 * Internal level is calculated as: internal = 400 * external^2  	 * Maps 0.0 to 1.0 to internal values 0-400 with default 0.5 == 100  	 *  	 * @param[in] speaker_id - LLUUID of user to get his volume level @@ -1133,7 +1134,7 @@ private:  	void load();  	void save(); -	typedef std::map<LLUUID, S32> speaker_data_map_t; +	typedef std::map<LLUUID, F32> speaker_data_map_t;  	speaker_data_map_t mSpeakersData;  }; @@ -1149,7 +1150,7 @@ LLSpeakerVolumeStorage::~LLSpeakerVolumeStorage()  	save();  } -void LLSpeakerVolumeStorage::storeSpeakerVolume(const LLUUID& speaker_id, S32 volume) +void LLSpeakerVolumeStorage::storeSpeakerVolume(const LLUUID& speaker_id, F32 volume)  {  	mSpeakersData[speaker_id] = volume;  } @@ -1163,7 +1164,10 @@ S32 LLSpeakerVolumeStorage::getSpeakerVolume(const LLUUID& speaker_id)  	if (it != mSpeakersData.end())  	{ -		ret_val = it->second; +		F32 f_val = it->second; +		// volume can amplify by as much as 4x! +		S32 ivol = (S32)(400.f * f_val * f_val); +		ret_val = llclamp(ivol, 0, 400);  	}  	return ret_val;  } @@ -1184,7 +1188,7 @@ void LLSpeakerVolumeStorage::load()  	for (LLSD::map_const_iterator iter = settings_llsd.beginMap();  		iter != settings_llsd.endMap(); ++iter)  	{ -		mSpeakersData.insert(std::make_pair(LLUUID(iter->first), (S32)iter->second.asInteger())); +		mSpeakersData.insert(std::make_pair(LLUUID(iter->first), (F32)iter->second.asReal()));  	}  } @@ -6288,14 +6292,14 @@ void LLVoiceClient::setUserVolume(const LLUUID& id, F32 volume)  		participantState *participant = findParticipantByID(id);  		if (participant)  		{ +			// store this volume setting for future sessions +			LLSpeakerVolumeStorage::getInstance()->storeSpeakerVolume(id, volume); +  			// volume can amplify by as much as 4x!  			S32 ivol = (S32)(400.f * volume * volume);  			participant->mUserVolume = llclamp(ivol, 0, 400);  			participant->mVolumeDirty = TRUE;  			mAudioSession->mVolumeDirty = TRUE; - -			// store this volume setting for future sessions -			LLSpeakerVolumeStorage::getInstance()->storeSpeakerVolume(id, participant->mUserVolume);  		}  	}  } | 
