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
meow-7.2.2
Mike Antipov 2010-02-04 16:43:59 +02:00
parent 353be3c934
commit b1891e2982
1 changed files with 15 additions and 11 deletions

View File

@ -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);
}
}
}