diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 5b0beb4e7..53d5230a8 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -14096,6 +14096,17 @@ This should be as low as possible, but too low may break functionality Value 0 + ShowVoiceVisualizersInCalls + + Comment + Enables in-world voice visualizers, voice gestures and lip-sync while in group or P2P calls. + Persist + 1 + Type + Boolean + Value + 0 + ShowVolumeSettingsPopup Comment diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp index aa4717388..e924965f1 100644 --- a/indra/newview/llagent.cpp +++ b/indra/newview/llagent.cpp @@ -3909,7 +3909,7 @@ bool LLAgent::teleportCore(bool is_local) // MBW -- Let the voice client know a teleport has begun so it can leave the existing channel. // This was breaking the case of teleporting within a single sim. Backing it out for now. -// gVoiceClient->leaveChannel(); +// LLVoiceClient::getInstance()->leaveChannel(); return true; } diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 3fc47e067..32867dfa4 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -4270,8 +4270,10 @@ void LLAppViewer::sendLogoutRequest() gLogoutMaxTime = LOGOUT_REQUEST_TIME; mLogoutRequestSent = TRUE; - if(gVoiceClient) - gVoiceClient->leaveChannel(); + if(LLVoiceClient::instanceExists()) + { + LLVoiceClient::getInstance()->leaveChannel(); + } //Set internal status variables and marker files gLogoutInProgress = TRUE; diff --git a/indra/newview/llfloateractivespeakers.cpp b/indra/newview/llfloateractivespeakers.cpp index d39861562..2f0cd7a62 100644 --- a/indra/newview/llfloateractivespeakers.cpp +++ b/indra/newview/llfloateractivespeakers.cpp @@ -94,7 +94,7 @@ LLSpeaker::LLSpeaker(const LLUUID& id, const std::string& name, const ESpeakerTy mDisplayName = name; mLegacyName = name; } - gVoiceClient->setUserVolume(id, LLMuteList::getInstance()->getSavedResidentVolume(id)); + LLVoiceClient::getInstance()->setUserVolume(id, LLMuteList::getInstance()->getSavedResidentVolume(id)); mActivityTimer.reset(SPEAKER_TIMEOUT); } @@ -189,7 +189,7 @@ LLFloaterActiveSpeakers::LLFloaterActiveSpeakers(const LLSD& seed) : mPanel(NULL BOOL no_open = FALSE; LLUICtrlFactory::getInstance()->buildFloater(this, "floater_active_speakers.xml", &getFactoryMap(), no_open); //RN: for now, we poll voice client every frame to get voice amplitude feedback - //gVoiceClient->addObserver(this); + //LLVoiceClient::getInstance()->addObserver(this); mPanel->refreshSpeakers(); } @@ -599,7 +599,7 @@ void LLPanelActiveSpeakers::refreshSpeakers() { mMuteVoiceCtrl->setValue(LLMuteList::getInstance()->isMuted(selected_id, LLMute::flagVoiceChat)); mMuteVoiceCtrl->setEnabled(LLVoiceClient::voiceEnabled() - && gVoiceClient->getVoiceEnabled(selected_id) + && LLVoiceClient::getInstance()->getVoiceEnabled(selected_id) && selected_id.notNull() && selected_id != gAgent.getID() && (selected_speakerp.notNull() && (selected_speakerp->mType == LLSpeaker::SPEAKER_AGENT || selected_speakerp->mType == LLSpeaker::SPEAKER_EXTERNAL))); @@ -617,9 +617,9 @@ void LLPanelActiveSpeakers::refreshSpeakers() && !selected_speakerp->mLegacyName.empty() && !LLMuteList::getInstance()->isLinden(selected_speakerp->mLegacyName)); } - mVolumeSlider->setValue(gVoiceClient->getUserVolume(selected_id)); + mVolumeSlider->setValue(LLVoiceClient::getInstance()->getUserVolume(selected_id)); mVolumeSlider->setEnabled(LLVoiceClient::voiceEnabled() - && gVoiceClient->getVoiceEnabled(selected_id) + && LLVoiceClient::getInstance()->getVoiceEnabled(selected_id) && selected_id.notNull() && selected_id != gAgent.getID() && (selected_speakerp.notNull() && (selected_speakerp->mType == LLSpeaker::SPEAKER_AGENT || selected_speakerp->mType == LLSpeaker::SPEAKER_EXTERNAL))); @@ -628,7 +628,7 @@ void LLPanelActiveSpeakers::refreshSpeakers() view->setEnabled(selected_id.notNull()); if (LLView* view = findChild("moderator_allow_voice")) - view->setEnabled(selected_id.notNull() && mSpeakerMgr->isVoiceActive() && gVoiceClient->getVoiceEnabled(selected_id)); + view->setEnabled(selected_id.notNull() && mSpeakerMgr->isVoiceActive() && LLVoiceClient::getInstance()->getVoiceEnabled(selected_id)); if (LLView* view = findChild("moderator_allow_text")) view->setEnabled(selected_id.notNull()); @@ -751,7 +751,7 @@ void LLPanelActiveSpeakers::onVolumeChange(LLUICtrl* source, void* user_data) LLUUID speaker_id = panelp->mSpeakerList->getValue().asUUID(); F32 new_volume = (F32)panelp->childGetValue("speaker_volume").asReal(); - gVoiceClient->setUserVolume(speaker_id, new_volume); + LLVoiceClient::getInstance()->setUserVolume(speaker_id, new_volume); // store this volume setting for future sessions LLMuteList::getInstance()->setSavedResidentVolume(speaker_id, new_volume); @@ -1012,7 +1012,7 @@ LLPointer LLSpeakerMgr::setSpeaker(const LLUUID& id, const std::strin void LLSpeakerMgr::update(BOOL resort_ok) { - if (!gVoiceClient) + if (!LLVoiceClient::instanceExists()) { return; } @@ -1026,7 +1026,7 @@ void LLSpeakerMgr::update(BOOL resort_ok) } // update status of all current speakers - BOOL voice_channel_active = (!mVoiceChannel && gVoiceClient->inProximalChannel()) || (mVoiceChannel && mVoiceChannel->isActive()); + BOOL voice_channel_active = (!mVoiceChannel && LLVoiceClient::getInstance()->inProximalChannel()) || (mVoiceChannel && mVoiceChannel->isActive()); for (speaker_map_t::iterator speaker_it = mSpeakers.begin(); speaker_it != mSpeakers.end();) { LLUUID speaker_id = speaker_it->first; @@ -1034,21 +1034,21 @@ void LLSpeakerMgr::update(BOOL resort_ok) speaker_it++; - if (voice_channel_active && gVoiceClient->getVoiceEnabled(speaker_id)) + if (voice_channel_active && LLVoiceClient::getInstance()->getVoiceEnabled(speaker_id)) { - speakerp->mSpeechVolume = gVoiceClient->getCurrentPower(speaker_id); - BOOL moderator_muted_voice = gVoiceClient->getIsModeratorMuted(speaker_id); + speakerp->mSpeechVolume = LLVoiceClient::getInstance()->getCurrentPower(speaker_id); + BOOL moderator_muted_voice = LLVoiceClient::getInstance()->getIsModeratorMuted(speaker_id); if (moderator_muted_voice != speakerp->mModeratorMutedVoice) { speakerp->mModeratorMutedVoice = moderator_muted_voice; speakerp->fireEvent(new LLSpeakerVoiceModerationEvent(speakerp)); } - if (gVoiceClient->getOnMuteList(speaker_id) || speakerp->mModeratorMutedVoice) + if (LLVoiceClient::getInstance()->getOnMuteList(speaker_id) || speakerp->mModeratorMutedVoice) { speakerp->mStatus = LLSpeaker::STATUS_MUTED; } - else if (gVoiceClient->getIsSpeaking(speaker_id)) + else if (LLVoiceClient::getInstance()->getIsSpeaking(speaker_id)) { // reset inactivity expiration if (speakerp->mStatus != LLSpeaker::STATUS_SPEAKING) @@ -1143,9 +1143,9 @@ void LLSpeakerMgr::update(BOOL resort_ok) void LLSpeakerMgr::updateSpeakerList() { // are we bound to the currently active voice channel? - if ((!mVoiceChannel && gVoiceClient->inProximalChannel()) || (mVoiceChannel && mVoiceChannel->isActive())) + if ((!mVoiceChannel && LLVoiceClient::getInstance()->inProximalChannel()) || (mVoiceChannel && mVoiceChannel->isActive())) { - LLVoiceClient::participantMap* participants = gVoiceClient->getParticipantList(); + LLVoiceClient::participantMap* participants = LLVoiceClient::getInstance()->getParticipantList(); if(participants) { LLVoiceClient::participantMap::iterator participant_it; diff --git a/indra/newview/llfloatervoicedevicesettings.cpp b/indra/newview/llfloatervoicedevicesettings.cpp index acd4f5b03..7e2f2ff4e 100644 --- a/indra/newview/llfloatervoicedevicesettings.cpp +++ b/indra/newview/llfloatervoicedevicesettings.cpp @@ -64,7 +64,7 @@ LLPanelVoiceDeviceSettings::LLPanelVoiceDeviceSettings() // ask for new device enumeration // now do this in onOpen() instead... - //gVoiceClient->refreshDeviceLists(); + //LLVoiceClient::getInstance()->refreshDeviceLists(); } LLPanelVoiceDeviceSettings::~LLPanelVoiceDeviceSettings() @@ -86,12 +86,12 @@ BOOL LLPanelVoiceDeviceSettings::postBuild() void LLPanelVoiceDeviceSettings::draw() { // let user know that volume indicator is not yet available - bool is_in_tuning_mode = gVoiceClient->inTuningMode(); + bool is_in_tuning_mode = LLVoiceClient::getInstance()->inTuningMode(); childSetVisible("wait_text", !is_in_tuning_mode); LLPanel::draw(); - F32 voice_power = gVoiceClient->tuningGetEnergy(); + F32 voice_power = LLVoiceClient::getInstance()->tuningGetEnergy(); S32 discrete_power = 0; if (!is_in_tuning_mode) @@ -174,13 +174,13 @@ void LLPanelVoiceDeviceSettings::refresh() LLSlider* volume_slider = getChild("mic_volume_slider"); // set mic volume tuning slider based on last mic volume setting F32 current_volume = (F32)volume_slider->getValue().asReal(); - gVoiceClient->tuningSetMicVolume(current_volume); + LLVoiceClient::getInstance()->tuningSetMicVolume(current_volume); // Fill in popup menus mCtrlInputDevices = getChild("voice_input_device"); mCtrlOutputDevices = getChild("voice_output_device"); - if(!gVoiceClient->deviceSettingsAvailable()) + if(!LLVoiceClient::getInstance()->deviceSettingsAvailable()) { // The combo boxes are disabled, since we can't get the device settings from the daemon just now. // Put the currently set default (ONLY) in the box, and select it. @@ -208,7 +208,7 @@ void LLPanelVoiceDeviceSettings::refresh() mCtrlInputDevices->removeall(); mCtrlInputDevices->add( getString("default_text"), ADD_BOTTOM ); - devices = gVoiceClient->getCaptureDevices(); + devices = LLVoiceClient::getInstance()->getCaptureDevices(); for(iter=devices->begin(); iter != devices->end(); iter++) { mCtrlInputDevices->add( *iter, ADD_BOTTOM ); @@ -225,7 +225,7 @@ void LLPanelVoiceDeviceSettings::refresh() mCtrlOutputDevices->removeall(); mCtrlOutputDevices->add( getString("default_text"), ADD_BOTTOM ); - devices = gVoiceClient->getRenderDevices(); + devices = LLVoiceClient::getInstance()->getRenderDevices(); for(iter=devices->begin(); iter != devices->end(); iter++) { mCtrlOutputDevices->add( *iter, ADD_BOTTOM ); @@ -248,34 +248,34 @@ void LLPanelVoiceDeviceSettings::onOpen() mDevicesUpdated = FALSE; // ask for new device enumeration - gVoiceClient->refreshDeviceLists(); + LLVoiceClient::getInstance()->refreshDeviceLists(); // put voice client in "tuning" mode - gVoiceClient->tuningStart(); + LLVoiceClient::getInstance()->tuningStart(); LLVoiceChannel::suspend(); } void LLPanelVoiceDeviceSettings::onClose(bool app_quitting) { - gVoiceClient->tuningStop(); + LLVoiceClient::getInstance()->tuningStop(); LLVoiceChannel::resume(); } // static void LLPanelVoiceDeviceSettings::onCommitInputDevice(LLUICtrl* ctrl, void* user_data) { - if(gVoiceClient) + if(LLVoiceClient::instanceExists()) { - gVoiceClient->setCaptureDevice(ctrl->getValue().asString()); + LLVoiceClient::getInstance()->setCaptureDevice(ctrl->getValue().asString()); } } // static void LLPanelVoiceDeviceSettings::onCommitOutputDevice(LLUICtrl* ctrl, void* user_data) { - if(gVoiceClient) + if(LLVoiceClient::instanceExists()) { - gVoiceClient->setRenderDevice(ctrl->getValue().asString()); + LLVoiceClient::getInstance()->setRenderDevice(ctrl->getValue().asString()); } } diff --git a/indra/newview/llimpanel.cpp b/indra/newview/llimpanel.cpp index ac7b66f22..5a91e7370 100644 --- a/indra/newview/llimpanel.cpp +++ b/indra/newview/llimpanel.cpp @@ -515,13 +515,13 @@ LLFloaterIMPanel::~LLFloaterIMPanel() mSpeakers = NULL; // End the text IM session if necessary - if(gVoiceClient && mOtherParticipantUUID.notNull()) + if(LLVoiceClient::instanceExists() && mOtherParticipantUUID.notNull()) { switch(mDialog) { case IM_NOTHING_SPECIAL: case IM_SESSION_P2P_INVITE: - gVoiceClient->endUserIMSession(mOtherParticipantUUID); + LLVoiceClient::getInstance()->endUserIMSession(mOtherParticipantUUID); break; default: @@ -651,7 +651,7 @@ void LLFloaterIMPanel::onVolumeChange(LLUICtrl* source, void* user_data) LLFloaterIMPanel* floaterp = (LLFloaterIMPanel*)user_data; if (floaterp) { - gVoiceClient->setUserVolume(floaterp->mOtherParticipantUUID, (F32)source->getValue().asReal()); + LLVoiceClient::getInstance()->setUserVolume(floaterp->mOtherParticipantUUID, (F32)source->getValue().asReal()); } } @@ -734,7 +734,7 @@ void LLFloaterIMPanel::draw() { // refresh volume and mute checkbox mVolumeSlider->setVisible(LLVoiceClient::voiceEnabled() && mVoiceChannel->isActive()); - mVolumeSlider->setValue(gVoiceClient->getUserVolume(mOtherParticipantUUID)); + mVolumeSlider->setValue(LLVoiceClient::getInstance()->getUserVolume(mOtherParticipantUUID)); mMuteBtn->setValue(LLMuteList::getInstance()->isMuted(mOtherParticipantUUID, LLMute::flagVoiceChat)); mMuteBtn->setVisible(LLVoiceClient::voiceEnabled() && mVoiceChannel->isActive()); @@ -752,7 +752,8 @@ public: /*virtual*/ void error(U32 statusNum, const std::string& reason) { - llinfos << "Error inviting all agents to session" << llendl; + llwarns << "Error inviting all agents to session [status:" + << statusNum << "]: " << reason << llendl; //throw something back to the viewer here? } @@ -1197,7 +1198,7 @@ void deliver_message(const std::string& utf8_text, if((offline == IM_OFFLINE) && (LLVoiceClient::getInstance()->isOnlineSIP(other_participant_id))) { // User is online through the OOW connector, but not with a regular viewer. Try to send the message via SLVoice. - sent = gVoiceClient->sendTextMessage(other_participant_id, utf8_text); + sent = LLVoiceClient::getInstance()->sendTextMessage(other_participant_id, utf8_text); } if(!sent) diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp index 0c158ed6f..ad866c634 100644 --- a/indra/newview/llimview.cpp +++ b/indra/newview/llimview.cpp @@ -355,10 +355,10 @@ bool inviteUserResponse(const LLSD& notification, const LLSD& response) { if (type == IM_SESSION_P2P_INVITE) { - if(gVoiceClient) + if(LLVoiceClient::instanceExists()) { std::string s = payload["session_handle"].asString(); - gVoiceClient->declineInvite(s); + LLVoiceClient::getInstance()->declineInvite(s); } } else diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index 9f44db11b..5df4c618f 100644 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -1592,7 +1592,7 @@ bool idle_startup() } gViewerWindow->getWindow()->setTitle(LLAppViewer::instance()->getWindowTitle() + "- " + name); // Pass the user information to the voice chat server interface. - gVoiceClient->userAuthorized(firstname, lastname, gAgentID); + LLVoiceClient::getInstance()->userAuthorized(firstname, lastname, gAgentID); LLStartUp::setStartupState( STATE_WORLD_INIT ); } else diff --git a/indra/newview/llstatusbar.cpp b/indra/newview/llstatusbar.cpp index a9da2c1a9..b14941a84 100644 --- a/indra/newview/llstatusbar.cpp +++ b/indra/newview/llstatusbar.cpp @@ -73,7 +73,6 @@ #include "llviewerparcelmgr.h" #include "llviewerthrottle.h" #include "lluictrlfactory.h" -#include "llvoiceclient.h" // for gVoiceClient #include "llagentui.h" #include "lltoolmgr.h" diff --git a/indra/newview/llvieweraudio.cpp b/indra/newview/llvieweraudio.cpp index 7df652c41..fd8915e84 100644 --- a/indra/newview/llvieweraudio.cpp +++ b/indra/newview/llvieweraudio.cpp @@ -182,19 +182,19 @@ void audio_update_volume(bool force_update) LLViewerMedia::setVolume( mute_media ? 0.0f : media_volume ); // Voice - if (gVoiceClient) + if (LLVoiceClient::instanceExists()) { F32 voice_volume = mute_volume * master_volume * audio_level_voice; - gVoiceClient->setVoiceVolume(mute_voice ? 0.f : voice_volume); - gVoiceClient->setMicGain(mute_voice ? 0.f : audio_level_mic); + LLVoiceClient::getInstance()->setVoiceVolume(mute_voice ? 0.f : voice_volume); + LLVoiceClient::getInstance()->setMicGain(mute_voice ? 0.f : audio_level_mic); if (!gViewerWindow->getActive() && mute_when_minimized) { - gVoiceClient->setMuteMic(true); + LLVoiceClient::getInstance()->setMuteMic(true); } else { - gVoiceClient->setMuteMic(false); + LLVoiceClient::getInstance()->setMuteMic(false); } } } diff --git a/indra/newview/llviewercontrol.cpp b/indra/newview/llviewercontrol.cpp index 59958523b..f501d7701 100644 --- a/indra/newview/llviewercontrol.cpp +++ b/indra/newview/llviewercontrol.cpp @@ -547,6 +547,12 @@ bool handleEffectColorChanged(const LLSD& newvalue) return true; } +bool handleVoiceClientPrefsChanged(const LLSD& newvalue) +{ + LLVoiceClient::getInstance()->updateSettings(); + return true; +} + bool handleVelocityInterpolate(const LLSD& newvalue) { LLMessageSystem* msg = gMessageSystem; @@ -571,15 +577,6 @@ bool handleVelocityInterpolate(const LLSD& newvalue) return true; } -bool handleVoiceClientPrefsChanged(const LLSD& newvalue) -{ - if(gVoiceClient) - { - gVoiceClient->updateSettings(); - } - return true; -} - bool handleTranslateChatPrefsChanged(const LLSD& newvalue) { LLFloaterChat* floaterp = LLFloaterChat::getInstance(); diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index 1c7007eea..6f409b782 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -1085,7 +1085,7 @@ BOOL LLViewerWindow::handleRightMouseUp(LLWindow *window, LLCoordGL pos, MASK m BOOL LLViewerWindow::handleMiddleMouseDown(LLWindow *window, LLCoordGL pos, MASK mask) { BOOL down = TRUE; - gVoiceClient->middleMouseState(true); + LLVoiceClient::getInstance()->middleMouseState(true); handleAnyMouseClick(window,pos,mask,LLMouseHandler::CLICK_MIDDLE,down); // Always handled as far as the OS is concerned. @@ -1095,7 +1095,7 @@ BOOL LLViewerWindow::handleMiddleMouseDown(LLWindow *window, LLCoordGL pos, MAS BOOL LLViewerWindow::handleMiddleMouseUp(LLWindow *window, LLCoordGL pos, MASK mask) { BOOL down = FALSE; - gVoiceClient->middleMouseState(false); + LLVoiceClient::getInstance()->middleMouseState(false); handleAnyMouseClick(window,pos,mask,LLMouseHandler::CLICK_MIDDLE,down); // Always handled as far as the OS is concerned. @@ -1237,8 +1237,7 @@ void LLViewerWindow::handleFocusLost(LLWindow *window) BOOL LLViewerWindow::handleTranslatedKeyDown(KEY key, MASK mask, BOOL repeated) { // Let the voice chat code check for its PTT key. Note that this never affects event processing. - if(gVoiceClient) - gVoiceClient->keyDown(key, mask); + LLVoiceClient::getInstance()->keyDown(key, mask); if (gAwayTimer.getElapsedTimeF32() > MIN_AFK_TIME) { @@ -1260,7 +1259,7 @@ BOOL LLViewerWindow::handleTranslatedKeyDown(KEY key, MASK mask, BOOL repeated) BOOL LLViewerWindow::handleTranslatedKeyUp(KEY key, MASK mask) { // Let the voice chat code check for its PTT key. Note that this never affects event processing. - gVoiceClient->keyUp(key, mask); + LLVoiceClient::getInstance()->keyUp(key, mask); return FALSE; } diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index 433f2f0bb..fe29f88c9 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -1526,7 +1526,7 @@ void LLVOAvatar::initInstance(void) //VTPause(); // VTune - mVoiceVisualizer->setVoiceEnabled( gVoiceClient->getVoiceEnabled( mID ) ); + mVoiceVisualizer->setVoiceEnabled( LLVoiceClient::getInstance()->getVoiceEnabled( mID ) ); } // virtual @@ -2344,13 +2344,16 @@ void LLVOAvatar::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time) // store off last frame's root position to be consistent with camera position LLVector3 root_pos_last = mRoot->getWorldPosition(); bool detailed_update = updateCharacter(agent); - bool voice_enabled = gVoiceClient->getVoiceEnabled( mID ) && gVoiceClient->inProximalChannel(); if (gNoRender) { return; } + static LLUICachedControl visualizers_in_calls("ShowVoiceVisualizersInCalls", false); + bool voice_enabled = (visualizers_in_calls || LLVoiceClient::getInstance()->inProximalChannel()) && + LLVoiceClient::getInstance()->getVoiceEnabled(mID); + idleUpdateVoiceVisualizer( voice_enabled ); idleUpdateMisc( detailed_update ); idleUpdateAppearanceAnimation(); @@ -2421,7 +2424,7 @@ void LLVOAvatar::idleUpdateVoiceVisualizer(bool voice_enabled) // Notice the calls to "gAwayTimer.reset()". This resets the timer that determines how long the avatar has been // "away", so that the avatar doesn't lapse into away-mode (and slump over) while the user is still talking. //----------------------------------------------------------------------------------------------------------------- - if ( gVoiceClient->getIsSpeaking( mID ) ) + if (LLVoiceClient::getInstance()->getIsSpeaking( mID )) { if ( ! mVoiceVisualizer->getCurrentlySpeaking() ) { @@ -2430,7 +2433,7 @@ void LLVOAvatar::idleUpdateVoiceVisualizer(bool voice_enabled) //printf( "gAwayTimer.reset();\n" ); } - mVoiceVisualizer->setSpeakingAmplitude( gVoiceClient->getCurrentPower( mID ) ); + mVoiceVisualizer->setSpeakingAmplitude( LLVoiceClient::getInstance()->getCurrentPower( mID ) ); if( isSelf() ) { @@ -2682,7 +2685,7 @@ F32 LLVOAvatar::calcMorphAmount() void LLVOAvatar::idleUpdateLipSync(bool voice_enabled) { // Use the Lipsync_Ooh and Lipsync_Aah morphs for lip sync - if ( voice_enabled && (gVoiceClient->lipSyncEnabled()) && gVoiceClient->getIsSpeaking( mID ) ) + if ( voice_enabled && (LLVoiceClient::getInstance()->lipSyncEnabled()) && LLVoiceClient::getInstance()->getIsSpeaking( mID ) ) { F32 ooh_morph_amount = 0.0f; F32 aah_morph_amount = 0.0f; diff --git a/indra/newview/llvoiceclient.cpp b/indra/newview/llvoiceclient.cpp index bc4616382..9dc40f45f 100644 --- a/indra/newview/llvoiceclient.cpp +++ b/indra/newview/llvoiceclient.cpp @@ -28,6 +28,7 @@ * COMPLETENESS OR PERFORMANCE. * $/LicenseInfo$ */ + #include "llviewerprecompiledheaders.h" #if LL_LINUX && defined(LL_STANDALONE) @@ -86,15 +87,13 @@ extern AIHTTPTimeoutPolicy viewerVoiceAccountProvisionResponder_timeout; extern AIHTTPTimeoutPolicy voiceClientCapResponder_timeout; static bool sConnectingToAgni = false; -F32 LLVoiceClient::OVERDRIVEN_POWER_LEVEL = 0.7f; +const F32 LLVoiceClient::OVERDRIVEN_POWER_LEVEL = 0.7f; const F32 SPEAKING_TIMEOUT = 1.f; const int VOICE_MAJOR_VERSION = 1; const int VOICE_MINOR_VERSION = 0; -LLVoiceClient *gVoiceClient = NULL; - // Don't retry connecting to the daemon more frequently than this: const F32 CONNECT_THROTTLE_SECONDS = 1.0f; @@ -155,19 +154,19 @@ public: if ( mRetries > 0 ) { LL_WARNS("Voice") << "ProvisionVoiceAccountRequest returned an error, retrying. status = " << status << ", reason = \"" << reason << "\"" << LL_ENDL; - if ( gVoiceClient ) gVoiceClient->requestVoiceAccountProvision( + if (LLVoiceClient::instanceExists()) LLVoiceClient::getInstance()->requestVoiceAccountProvision( mRetries - 1); } else { LL_WARNS("Voice") << "ProvisionVoiceAccountRequest returned an error, too many retries (giving up). status = " << status << ", reason = \"" << reason << "\"" << LL_ENDL; - if ( gVoiceClient ) gVoiceClient->giveUp(); + if (LLVoiceClient::instanceExists()) LLVoiceClient::getInstance()->giveUp(); } } /*virtual*/ void result(const LLSD& content) { - if ( gVoiceClient ) + if (LLVoiceClient::instanceExists()) { std::string voice_sip_uri_hostname; std::string voice_account_server_uri; @@ -181,7 +180,7 @@ public: if(content.has("voice_account_server_name")) voice_account_server_uri = content["voice_account_server_name"].asString(); - gVoiceClient->login( + LLVoiceClient::getInstance()->login( content["username"].asString(), content["password"].asString(), voice_sip_uri_hostname, @@ -384,7 +383,7 @@ LLIOPipe::EStatus LLVivoxProtocolParser::process_impl( LL_DEBUGS("VivoxProtocolParser") << "at end, mInput is: " << mInput << LL_ENDL; - if(!gVoiceClient->mConnected) + if(!LLVoiceClient::getInstance()->mConnected) { // If voice has been disabled, we just want to close the socket. This does so. LL_INFOS("Voice") << "returning STATUS_STOP" << LL_ENDL; @@ -484,23 +483,23 @@ void LLVivoxProtocolParser::StartTag(const char *tag, const char **attr) } else if (!stricmp("CaptureDevices", tag)) { - gVoiceClient->clearCaptureDevices(); + LLVoiceClient::getInstance()->clearCaptureDevices(); } else if (!stricmp("RenderDevices", tag)) { - gVoiceClient->clearRenderDevices(); + LLVoiceClient::getInstance()->clearRenderDevices(); } else if (!stricmp("Buddies", tag)) { - gVoiceClient->deleteAllBuddies(); + LLVoiceClient::getInstance()->deleteAllBuddies(); } else if (!stricmp("BlockRules", tag)) { - gVoiceClient->deleteAllBlockRules(); + LLVoiceClient::getInstance()->deleteAllBlockRules(); } else if (!stricmp("AutoAcceptRules", tag)) { - gVoiceClient->deleteAllAutoAcceptRules(); + LLVoiceClient::getInstance()->deleteAllAutoAcceptRules(); } } @@ -608,19 +607,19 @@ void LLVivoxProtocolParser::EndTag(const char *tag) } else if (!stricmp("CaptureDevice", tag)) { - gVoiceClient->addCaptureDevice(textBuffer); + LLVoiceClient::getInstance()->addCaptureDevice(textBuffer); } else if (!stricmp("RenderDevice", tag)) { - gVoiceClient->addRenderDevice(textBuffer); + LLVoiceClient::getInstance()->addRenderDevice(textBuffer); } else if (!stricmp("Buddy", tag)) { - gVoiceClient->processBuddyListEntry(uriString, displayNameString); + LLVoiceClient::getInstance()->processBuddyListEntry(uriString, displayNameString); } else if (!stricmp("BlockRule", tag)) { - gVoiceClient->addBlockRule(blockMask, presenceOnly); + LLVoiceClient::getInstance()->addBlockRule(blockMask, presenceOnly); } else if (!stricmp("BlockMask", tag)) blockMask = string; @@ -628,7 +627,7 @@ void LLVivoxProtocolParser::EndTag(const char *tag) presenceOnly = string; else if (!stricmp("AutoAcceptRule", tag)) { - gVoiceClient->addAutoAcceptRule(autoAcceptMask, autoAddAsBuddy); + LLVoiceClient::getInstance()->addAutoAcceptRule(autoAcceptMask, autoAddAsBuddy); } else if (!stricmp("AutoAcceptMask", tag)) autoAcceptMask = string; @@ -701,7 +700,7 @@ void LLVivoxProtocolParser::processResponse(std::string tag) const char *eventTypeCstr = eventTypeString.c_str(); if (!stricmp(eventTypeCstr, "AccountLoginStateChangeEvent")) { - gVoiceClient->accountLoginStateChangeEvent(accountHandle, statusCode, statusString, state); + LLVoiceClient::getInstance()->accountLoginStateChangeEvent(accountHandle, statusCode, statusString, state); } else if (!stricmp(eventTypeCstr, "SessionAddedEvent")) { @@ -715,15 +714,15 @@ void LLVivoxProtocolParser::processResponse(std::string tag) */ - gVoiceClient->sessionAddedEvent(uriString, alias, sessionHandle, sessionGroupHandle, isChannel, incoming, nameString, applicationString); + LLVoiceClient::getInstance()->sessionAddedEvent(uriString, alias, sessionHandle, sessionGroupHandle, isChannel, incoming, nameString, applicationString); } else if (!stricmp(eventTypeCstr, "SessionRemovedEvent")) { - gVoiceClient->sessionRemovedEvent(sessionHandle, sessionGroupHandle); + LLVoiceClient::getInstance()->sessionRemovedEvent(sessionHandle, sessionGroupHandle); } else if (!stricmp(eventTypeCstr, "SessionGroupAddedEvent")) { - gVoiceClient->sessionGroupAddedEvent(sessionGroupHandle); + LLVoiceClient::getInstance()->sessionGroupAddedEvent(sessionGroupHandle); } else if (!stricmp(eventTypeCstr, "MediaStreamUpdatedEvent")) { @@ -737,7 +736,7 @@ void LLVivoxProtocolParser::processResponse(std::string tag) false */ - gVoiceClient->mediaStreamUpdatedEvent(sessionHandle, sessionGroupHandle, statusCode, statusString, state, incoming); + LLVoiceClient::getInstance()->mediaStreamUpdatedEvent(sessionHandle, sessionGroupHandle, statusCode, statusString, state, incoming); } else if (!stricmp(eventTypeCstr, "TextStreamUpdatedEvent")) { @@ -750,7 +749,7 @@ void LLVivoxProtocolParser::processResponse(std::string tag) true */ - gVoiceClient->textStreamUpdatedEvent(sessionHandle, sessionGroupHandle, enabled, state, incoming); + LLVoiceClient::getInstance()->textStreamUpdatedEvent(sessionHandle, sessionGroupHandle, enabled, state, incoming); } else if (!stricmp(eventTypeCstr, "ParticipantAddedEvent")) { @@ -764,7 +763,7 @@ void LLVivoxProtocolParser::processResponse(std::string tag) 0 */ - gVoiceClient->participantAddedEvent(sessionHandle, sessionGroupHandle, uriString, alias, nameString, displayNameString, participantType); + LLVoiceClient::getInstance()->participantAddedEvent(sessionHandle, sessionGroupHandle, uriString, alias, nameString, displayNameString, participantType); } else if (!stricmp(eventTypeCstr, "ParticipantRemovedEvent")) { @@ -776,7 +775,7 @@ void LLVivoxProtocolParser::processResponse(std::string tag) xtx7YNV-3SGiG7rA1fo5Ndw== */ - gVoiceClient->participantRemovedEvent(sessionHandle, sessionGroupHandle, uriString, alias, nameString); + LLVoiceClient::getInstance()->participantRemovedEvent(sessionHandle, sessionGroupHandle, uriString, alias, nameString); } else if (!stricmp(eventTypeCstr, "ParticipantUpdatedEvent")) { @@ -795,21 +794,21 @@ void LLVivoxProtocolParser::processResponse(std::string tag) // These happen so often that logging them is pretty useless. squelchDebugOutput = true; - gVoiceClient->participantUpdatedEvent(sessionHandle, sessionGroupHandle, uriString, alias, isModeratorMuted, isSpeaking, volume, energy); + LLVoiceClient::getInstance()->participantUpdatedEvent(sessionHandle, sessionGroupHandle, uriString, alias, isModeratorMuted, isSpeaking, volume, energy); } else if (!stricmp(eventTypeCstr, "AuxAudioPropertiesEvent")) { - gVoiceClient->auxAudioPropertiesEvent(energy); + LLVoiceClient::getInstance()->auxAudioPropertiesEvent(energy); } else if (!stricmp(eventTypeCstr, "BuddyPresenceEvent")) { - gVoiceClient->buddyPresenceEvent(uriString, alias, statusString, applicationString); + LLVoiceClient::getInstance()->buddyPresenceEvent(uriString, alias, statusString, applicationString); } else if (!stricmp(eventTypeCstr, "BuddyAndGroupListChangedEvent")) { // The buddy list was updated during parsing. // Need to recheck against the friends list. - gVoiceClient->buddyListChanged(); + LLVoiceClient::getInstance()->buddyListChanged(); } else if (!stricmp(eventTypeCstr, "BuddyChangedEvent")) { @@ -827,15 +826,15 @@ void LLVivoxProtocolParser::processResponse(std::string tag) } else if (!stricmp(eventTypeCstr, "MessageEvent")) { - gVoiceClient->messageEvent(sessionHandle, uriString, alias, messageHeader, messageBody, applicationString); + LLVoiceClient::getInstance()->messageEvent(sessionHandle, uriString, alias, messageHeader, messageBody, applicationString); } else if (!stricmp(eventTypeCstr, "SessionNotificationEvent")) { - gVoiceClient->sessionNotificationEvent(sessionHandle, uriString, notificationType); + LLVoiceClient::getInstance()->sessionNotificationEvent(sessionHandle, uriString, notificationType); } else if (!stricmp(eventTypeCstr, "SubscriptionEvent")) { - gVoiceClient->subscriptionEvent(uriString, subscriptionHandle, alias, displayNameString, applicationString, subscriptionType); + LLVoiceClient::getInstance()->subscriptionEvent(uriString, subscriptionHandle, alias, displayNameString, applicationString, subscriptionType); } else if (!stricmp(eventTypeCstr, "SessionUpdatedEvent")) { @@ -874,39 +873,39 @@ void LLVivoxProtocolParser::processResponse(std::string tag) const char *actionCstr = actionString.c_str(); if (!stricmp(actionCstr, "Connector.Create.1")) { - gVoiceClient->connectorCreateResponse(statusCode, statusString, connectorHandle, versionID); + LLVoiceClient::getInstance()->connectorCreateResponse(statusCode, statusString, connectorHandle, versionID); } else if (!stricmp(actionCstr, "Account.Login.1")) { - gVoiceClient->loginResponse(statusCode, statusString, accountHandle, numberOfAliases); + LLVoiceClient::getInstance()->loginResponse(statusCode, statusString, accountHandle, numberOfAliases); } else if (!stricmp(actionCstr, "Session.Create.1")) { - gVoiceClient->sessionCreateResponse(requestId, statusCode, statusString, sessionHandle); + LLVoiceClient::getInstance()->sessionCreateResponse(requestId, statusCode, statusString, sessionHandle); } else if (!stricmp(actionCstr, "SessionGroup.AddSession.1")) { - gVoiceClient->sessionGroupAddSessionResponse(requestId, statusCode, statusString, sessionHandle); + LLVoiceClient::getInstance()->sessionGroupAddSessionResponse(requestId, statusCode, statusString, sessionHandle); } else if (!stricmp(actionCstr, "Session.Connect.1")) { - gVoiceClient->sessionConnectResponse(requestId, statusCode, statusString); + LLVoiceClient::getInstance()->sessionConnectResponse(requestId, statusCode, statusString); } else if (!stricmp(actionCstr, "Account.Logout.1")) { - gVoiceClient->logoutResponse(statusCode, statusString); + LLVoiceClient::getInstance()->logoutResponse(statusCode, statusString); } else if (!stricmp(actionCstr, "Connector.InitiateShutdown.1")) { - gVoiceClient->connectorShutdownResponse(statusCode, statusString); + LLVoiceClient::getInstance()->connectorShutdownResponse(statusCode, statusString); } else if (!stricmp(actionCstr, "Account.ListBlockRules.1")) { - gVoiceClient->accountListBlockRulesResponse(statusCode, statusString); + LLVoiceClient::getInstance()->accountListBlockRulesResponse(statusCode, statusString); } else if (!stricmp(actionCstr, "Account.ListAutoAcceptRules.1")) { - gVoiceClient->accountListAutoAcceptRulesResponse(statusCode, statusString); + LLVoiceClient::getInstance()->accountListAutoAcceptRulesResponse(statusCode, statusString); } else if (!stricmp(actionCstr, "Session.Set3DPosition.1")) { @@ -916,7 +915,7 @@ void LLVivoxProtocolParser::processResponse(std::string tag) /* else if (!stricmp(actionCstr, "Account.ChannelGetList.1")) { - gVoiceClient->channelGetListResponse(statusCode, statusString); + LLVoiceClient::getInstance()->channelGetListResponse(statusCode, statusString); } else if (!stricmp(actionCstr, "Connector.AccountCreate.1")) { @@ -998,13 +997,13 @@ void LLVivoxProtocolParser::processResponse(std::string tag) class LLVoiceClientMuteListObserver : public LLMuteListObserver { - /* virtual */ void onChange() { gVoiceClient->muteListChanged();} + /* virtual */ void onChange() { LLVoiceClient::getInstance()->muteListChanged();} }; class LLVoiceClientFriendsObserver : public LLFriendObserver { public: - /* virtual */ void changed(U32 mask) { gVoiceClient->updateFriends(mask);} + /* virtual */ void changed(U32 mask) { LLVoiceClient::getInstance()->updateFriends(mask);} }; static LLVoiceClientMuteListObserver mutelist_listener; @@ -1055,7 +1054,7 @@ void LLVoiceClientCapResponder::result(const LLSD& content) voice_credentials["channel_credentials"].asString(); } - gVoiceClient->setSpatialChannel(uri, credentials); + LLVoiceClient::getInstance()->setSpatialChannel(uri, credentials); } } @@ -1115,8 +1114,7 @@ static void killGateway() /////////////////////////////////////////////////////////////////////////////////////////////// LLVoiceClient::LLVoiceClient() -{ - gVoiceClient = this; +{ mWriteInProgress = false; mAreaVoiceDisabled = false; mPTT = false; @@ -1197,30 +1195,23 @@ LLVoiceClient::~LLVoiceClient() void LLVoiceClient::init(LLPumpIO *pump) { - // constructor will set up gVoiceClient LLVoiceClient::getInstance()->mPump = pump; LLVoiceClient::getInstance()->updateSettings(); } void LLVoiceClient::terminate() { - if(gVoiceClient) + if(LLVoiceClient::instanceExists()) { -// gVoiceClient->leaveAudioSession(); - gVoiceClient->logout(); +// LLVoiceClient::getInstance()->leaveAudioSession(); + LLVoiceClient::getInstance()->logout(); // As of SDK version 4885, this should no longer be necessary. It will linger after the socket close if it needs to. // ms_sleep(2000); - gVoiceClient->connectorShutdown(); - gVoiceClient->closeSocket(); // Need to do this now -- bad things happen if the destructor does it later. + LLVoiceClient::getInstance()->connectorShutdown(); + LLVoiceClient::getInstance()->closeSocket(); // Need to do this now -- bad things happen if the destructor does it later. // This will do unpleasant things on windows. // killGateway(); - - // Don't do this anymore -- LLSingleton will take care of deleting the object. -// delete gVoiceClient; - - // Hint to other code not to access the voice client anymore. - gVoiceClient = NULL; } } @@ -5725,7 +5716,7 @@ void LLVoiceClient::enforceTether(void) void LLVoiceClient::updatePosition(void) { - if(gVoiceClient) + if(LLVoiceClient::instanceExists()) { LLVOAvatar *agent = gAgentAvatarp; LLViewerRegion *region = gAgent.getRegion(); @@ -5741,7 +5732,7 @@ void LLVoiceClient::updatePosition(void) rot.setRows(LLViewerCamera::getInstance()->getAtAxis(), LLViewerCamera::getInstance()->getLeftAxis (), LLViewerCamera::getInstance()->getUpAxis()); pos = gAgent.getRegion()->getPosGlobalFromRegion(LLViewerCamera::getInstance()->getOrigin()); - gVoiceClient->setCameraPosition( + LLVoiceClient::getInstance()->setCameraPosition( pos, // position LLVector3::zero, // velocity rot); // rotation matrix @@ -5754,7 +5745,7 @@ void LLVoiceClient::updatePosition(void) // pos += LLVector3d(mHeadOffset); pos += LLVector3d(0.f, 0.f, 1.f); - gVoiceClient->setAvatarPosition( + LLVoiceClient::getInstance()->setAvatarPosition( pos, // position LLVector3::zero, // velocity rot); // rotation matrix @@ -6958,16 +6949,7 @@ void LLVoiceClient::notifyFriendObservers() void LLVoiceClient::lookupName(const LLUUID &id) { - gCacheName->get(id, false, boost::bind(&LLVoiceClient::onAvatarNameLookup,_1,_2)); -} - -//static -void LLVoiceClient::onAvatarNameLookup(const LLUUID& id, const std::string& full_name) -{ - if(gVoiceClient) - { - gVoiceClient->avatarNameResolved(id, full_name); - } + gCacheName->get(id, false, boost::bind(&LLVoiceClient::avatarNameResolved,this,_1,_2)); } void LLVoiceClient::avatarNameResolved(const LLUUID &id, const std::string &name) @@ -7066,7 +7048,7 @@ class LLViewerParcelVoiceInfo : public LLHTTPNode voice_credentials["channel_credentials"].asString(); } - gVoiceClient->setSpatialChannel(uri, credentials); + LLVoiceClient::getInstance()->setSpatialChannel(uri, credentials); } } } @@ -7089,7 +7071,7 @@ class LLViewerRequiredVoiceVersion : public LLHTTPNode // int minor_voice_version = // input["body"]["minor_version"].asInteger(); - if (gVoiceClient && + if (LLVoiceClient::instanceExists() && (major_voice_version > VOICE_MAJOR_VERSION) ) { if (!sAlertedUser) diff --git a/indra/newview/llvoiceclient.h b/indra/newview/llvoiceclient.h index e5c4af6a3..99face562 100644 --- a/indra/newview/llvoiceclient.h +++ b/indra/newview/llvoiceclient.h @@ -93,7 +93,7 @@ class LLVoiceClient: public LLSingleton public: - static F32 OVERDRIVEN_POWER_LEVEL; + static const F32 OVERDRIVEN_POWER_LEVEL; void updateSettings(); // call after loading settings and whenever they change @@ -461,9 +461,8 @@ static void updatePosition(void); void removeObserver(LLFriendObserver* observer); void lookupName(const LLUUID &id); - static void onAvatarNameLookup(const LLUUID& id, const std::string& full_name); void avatarNameResolved(const LLUUID &id, const std::string &name); - + typedef std::vector deviceList; deviceList *getCaptureDevices(); @@ -748,8 +747,6 @@ static std::string nameFromsipURI(const std::string &uri); void notifyFriendObservers(); }; -extern LLVoiceClient *gVoiceClient; - #endif //LL_VOICE_CLIENT_H diff --git a/indra/newview/llvoiceremotectrl.cpp b/indra/newview/llvoiceremotectrl.cpp index ed9ce5fe5..5bb6e00dc 100644 --- a/indra/newview/llvoiceremotectrl.cpp +++ b/indra/newview/llvoiceremotectrl.cpp @@ -113,15 +113,15 @@ void LLVoiceRemoteCtrl::draw() if (!mTalkBtn->hasMouseCapture()) { // not in push to talk mode, or push to talk is active means I'm talking - mTalkBtn->setToggleState(!ptt_currently_enabled || gVoiceClient->getUserPTTState()); + mTalkBtn->setToggleState(!ptt_currently_enabled || LLVoiceClient::getInstance()->getUserPTTState()); } mSpeakersBtn->setToggleState(LLFloaterActiveSpeakers::instanceVisible(LLSD())); mTalkLockBtn->setToggleState(!ptt_currently_enabled); std::string talk_blip_image; - if (gVoiceClient->getIsSpeaking(gAgent.getID())) + if (LLVoiceClient::getInstance()->getIsSpeaking(gAgent.getID())) { - F32 voice_power = gVoiceClient->getCurrentPower(gAgent.getID()); + F32 voice_power = LLVoiceClient::getInstance()->getCurrentPower(gAgent.getID()); if (voice_power > LLVoiceClient::OVERDRIVEN_POWER_LEVEL) { @@ -129,7 +129,7 @@ void LLVoiceRemoteCtrl::draw() } else { - F32 power = gVoiceClient->getCurrentPower(gAgent.getID()); + F32 power = LLVoiceClient::getInstance()->getCurrentPower(gAgent.getID()); S32 icon_image_idx = llmin(2, llfloor((power / LLVoiceClient::OVERDRIVEN_POWER_LEVEL) * 3.f)); switch(icon_image_idx) @@ -224,7 +224,7 @@ void LLVoiceRemoteCtrl::onBtnTalkClicked() // when in toggle mode, clicking talk button turns mic on/off if (gSavedSettings.getBOOL("PushToTalkToggle")) { - gVoiceClient->toggleUserPTTState(); + LLVoiceClient::getInstance()->toggleUserPTTState(); } } @@ -233,7 +233,7 @@ void LLVoiceRemoteCtrl::onBtnTalkHeld() // when not in toggle mode, holding down talk button turns on mic if (!gSavedSettings.getBOOL("PushToTalkToggle")) { - gVoiceClient->setUserPTTState(true); + LLVoiceClient::getInstance()->setUserPTTState(true); } } @@ -242,7 +242,7 @@ void LLVoiceRemoteCtrl::onBtnTalkReleased() // when not in toggle mode, releasing talk button turns off mic if (!gSavedSettings.getBOOL("PushToTalkToggle")) { - gVoiceClient->setUserPTTState(false); + LLVoiceClient::getInstance()->setUserPTTState(false); } }