From 3eab42ebd832545d4ba51a39168110859b869370 Mon Sep 17 00:00:00 2001 From: Roxie Linden Date: Fri, 21 Jun 2024 13:22:12 -0700 Subject: Disable voice morphing and throw up a warning if it's previously enabled. --- indra/newview/app_settings/settings.xml | 2 +- indra/newview/llviewermenu.cpp | 19 ------------ indra/newview/llvoiceclient.cpp | 33 ++++++++++++++++++-- indra/newview/llvoiceclient.h | 3 ++ indra/newview/skins/default/xui/de/menu_viewer.xml | 6 ---- indra/newview/skins/default/xui/en/menu_viewer.xml | 36 ---------------------- .../newview/skins/default/xui/en/notifications.xml | 14 +++++++++ indra/newview/skins/default/xui/es/menu_viewer.xml | 6 ---- indra/newview/skins/default/xui/it/menu_viewer.xml | 6 ---- indra/newview/skins/default/xui/ja/menu_viewer.xml | 1 - indra/newview/skins/default/xui/pl/menu_viewer.xml | 5 --- indra/newview/skins/default/xui/pt/menu_viewer.xml | 6 ---- indra/newview/skins/default/xui/ru/menu_viewer.xml | 6 ---- indra/newview/skins/default/xui/tr/menu_viewer.xml | 6 ---- indra/newview/skins/default/xui/zh/menu_viewer.xml | 6 ---- 15 files changed, 48 insertions(+), 107 deletions(-) diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 0a84bf8390..38d7555053 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -13043,7 +13043,7 @@ Type Boolean Value - 1 + 0 AutoDisengageMic diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index 4dcfb18b30..be93c58faf 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -9342,15 +9342,6 @@ class LLUpdateMembershipLabel : public view_listener_t } }; -void handle_voice_morphing_subscribe() -{ - LLWeb::loadURL(LLTrans::getString("voice_morphing_url")); -} - -void handle_premium_voice_morphing_subscribe() -{ - LLWeb::loadURL(LLTrans::getString("premium_voice_morphing_url")); -} class LLToggleUIHints : public view_listener_t { @@ -9551,16 +9542,6 @@ void initialize_menus() //Communicate Nearby chat view_listener_t::addMenu(new LLCommunicateNearbyChat(), "Communicate.NearbyChat"); - // Communicate > Voice morphing > Subscribe... - commit.add("Communicate.VoiceMorphing.Subscribe", boost::bind(&handle_voice_morphing_subscribe)); - // Communicate > Voice morphing > Premium perk... - commit.add("Communicate.VoiceMorphing.PremiumPerk", boost::bind(&handle_premium_voice_morphing_subscribe)); - LLVivoxVoiceClient * voice_clientp = LLVivoxVoiceClient::getInstance(); - enable.add("Communicate.VoiceMorphing.NoVoiceMorphing.Check" - , boost::bind(&LLVivoxVoiceClient::onCheckVoiceEffect, voice_clientp, "NoVoiceMorphing")); - commit.add("Communicate.VoiceMorphing.NoVoiceMorphing.Click" - , boost::bind(&LLVivoxVoiceClient::onClickVoiceEffect, voice_clientp, "NoVoiceMorphing")); - // World menu view_listener_t::addMenu(new LLWorldAlwaysRun(), "World.AlwaysRun"); view_listener_t::addMenu(new LLWorldCreateLandmark(), "World.CreateLandmark"); diff --git a/indra/newview/llvoiceclient.cpp b/indra/newview/llvoiceclient.cpp index fb3377e9c0..779f4e3176 100644 --- a/indra/newview/llvoiceclient.cpp +++ b/indra/newview/llvoiceclient.cpp @@ -137,8 +137,9 @@ LLVoiceClient::LLVoiceClient(LLPumpIO *pump) mSpatialVoiceModule(NULL), mNonSpatialVoiceModule(NULL), m_servicePump(NULL), - mVoiceEffectEnabled(LLCachedControl(gSavedSettings, "VoiceMorphingEnabled", true)), + mVoiceEffectEnabled(LLCachedControl(gSavedSettings, "VoiceMorphingEnabled", false)), mVoiceEffectDefault(LLCachedControl(gSavedPerAccountSettings, "VoiceEffectDefault", "00000000-0000-0000-0000-000000000000")), + mVoiceEffectSupportNotified(false), mPTTDirty(true), mPTT(true), mUsePTT(true), @@ -569,11 +570,37 @@ void LLVoiceClient::setMicGain(F32 gain) //------------------------------------------ // enable/disable voice features +// static +bool LLVoiceClient::onVoiceEffectsNotSupported(const LLSD ¬ification, const LLSD &response) +{ + S32 option = LLNotificationsUtil::getSelectedOption(notification, response); + switch (option) + { + case 0: // "Okay" + gSavedSettings.setBOOL("VoiceMorphingEnabled", FALSE); + break; + + case 1: // "Cancel" + break; + + default: + llassert(0); + break; + } + return false; +} + bool LLVoiceClient::voiceEnabled() { static LLCachedControl enable_voice_chat(gSavedSettings, "EnableVoiceChat"); static LLCachedControl cmd_line_disable_voice(gSavedSettings, "CmdLineDisableVoice"); - return enable_voice_chat && !cmd_line_disable_voice && !gNonInteractive; + bool enabled = enable_voice_chat && !cmd_line_disable_voice && !gNonInteractive; + if (enabled && !mVoiceEffectSupportNotified && getVoiceEffectEnabled() && !getVoiceEffectDefault().isNull()) + { + LLNotificationsUtil::add("VoiceEffectsNotSupported", LLSD(), LLSD(), &LLVoiceClient::onVoiceEffectsNotSupported); + mVoiceEffectSupportNotified = true; + } + return enabled; } void LLVoiceClient::setVoiceEnabled(bool enabled) @@ -812,7 +839,7 @@ std::string LLVoiceClient::sipURIFromID(const LLUUID &id) LLVoiceEffectInterface* LLVoiceClient::getVoiceEffectInterface() const { - return getVoiceEffectEnabled() ? dynamic_cast(mSpatialVoiceModule) : NULL; + return NULL; } /////////////////// diff --git a/indra/newview/llvoiceclient.h b/indra/newview/llvoiceclient.h index 8eadc82437..d603125759 100644 --- a/indra/newview/llvoiceclient.h +++ b/indra/newview/llvoiceclient.h @@ -508,6 +508,8 @@ public: protected: + static bool onVoiceEffectsNotSupported(const LLSD ¬ification, const LLSD &response); + LLVoiceModuleInterface* mSpatialVoiceModule; LLVoiceModuleInterface* mNonSpatialVoiceModule; LLSD mSpatialCredentials; // used to store spatial credentials for vivox @@ -519,6 +521,7 @@ protected: LLCachedControl mVoiceEffectEnabled; LLCachedControl mVoiceEffectDefault; + bool mVoiceEffectSupportNotified; bool mPTTDirty; bool mPTT; diff --git a/indra/newview/skins/default/xui/de/menu_viewer.xml b/indra/newview/skins/default/xui/de/menu_viewer.xml index f6724d4993..8c446c1975 100644 --- a/indra/newview/skins/default/xui/de/menu_viewer.xml +++ b/indra/newview/skins/default/xui/de/menu_viewer.xml @@ -42,12 +42,6 @@ - - - - - - diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml index f3d44cf647..d17aec0f6a 100644 --- a/indra/newview/skins/default/xui/en/menu_viewer.xml +++ b/indra/newview/skins/default/xui/en/menu_viewer.xml @@ -561,42 +561,6 @@ parameter="conversation" /> - - - - - - - - - - - - - - - - - voice + +Voice Morphs are not supported by this viewer. + + voice + + - - - - - - diff --git a/indra/newview/skins/default/xui/it/menu_viewer.xml b/indra/newview/skins/default/xui/it/menu_viewer.xml index 043fd28ddb..85999ccbe0 100644 --- a/indra/newview/skins/default/xui/it/menu_viewer.xml +++ b/indra/newview/skins/default/xui/it/menu_viewer.xml @@ -42,12 +42,6 @@ - - - - - - diff --git a/indra/newview/skins/default/xui/ja/menu_viewer.xml b/indra/newview/skins/default/xui/ja/menu_viewer.xml index a1f3980df4..f6b10bb121 100644 --- a/indra/newview/skins/default/xui/ja/menu_viewer.xml +++ b/indra/newview/skins/default/xui/ja/menu_viewer.xml @@ -74,7 +74,6 @@ - diff --git a/indra/newview/skins/default/xui/pl/menu_viewer.xml b/indra/newview/skins/default/xui/pl/menu_viewer.xml index 4d03e7c780..ee162addd2 100644 --- a/indra/newview/skins/default/xui/pl/menu_viewer.xml +++ b/indra/newview/skins/default/xui/pl/menu_viewer.xml @@ -35,11 +35,6 @@ - - - - - diff --git a/indra/newview/skins/default/xui/pt/menu_viewer.xml b/indra/newview/skins/default/xui/pt/menu_viewer.xml index b70adc3ad2..0f4873d11c 100644 --- a/indra/newview/skins/default/xui/pt/menu_viewer.xml +++ b/indra/newview/skins/default/xui/pt/menu_viewer.xml @@ -42,12 +42,6 @@ - - - - - - diff --git a/indra/newview/skins/default/xui/ru/menu_viewer.xml b/indra/newview/skins/default/xui/ru/menu_viewer.xml index 8361464f4c..4a6390329d 100644 --- a/indra/newview/skins/default/xui/ru/menu_viewer.xml +++ b/indra/newview/skins/default/xui/ru/menu_viewer.xml @@ -40,12 +40,6 @@ - - - - - - diff --git a/indra/newview/skins/default/xui/tr/menu_viewer.xml b/indra/newview/skins/default/xui/tr/menu_viewer.xml index 1c977ba5ce..fb6111248c 100644 --- a/indra/newview/skins/default/xui/tr/menu_viewer.xml +++ b/indra/newview/skins/default/xui/tr/menu_viewer.xml @@ -40,12 +40,6 @@ - - - - - - diff --git a/indra/newview/skins/default/xui/zh/menu_viewer.xml b/indra/newview/skins/default/xui/zh/menu_viewer.xml index 972434dfc5..a048af7b68 100644 --- a/indra/newview/skins/default/xui/zh/menu_viewer.xml +++ b/indra/newview/skins/default/xui/zh/menu_viewer.xml @@ -40,12 +40,6 @@ - - - - - - -- cgit v1.2.3 From 34a2fd525f5dde075bfc5615e6deb241ae61b94c Mon Sep 17 00:00:00 2001 From: Roxie Linden Date: Mon, 24 Jun 2024 14:42:30 -0700 Subject: [WebRTC] control microphone gain via custom audio processor. Previously, there were two places audio gain could be controlled: - the device manager - the audio track The device manager audio gain control sets the system gain for all applications, not just the webrtc application. The audio track gain happens well after the audio processing where we want it to happen. So, gain control was added to the existing custom audio processor, which previously only handled calculating and retrieving the audio levels. After these changes, the microphone gain slider does impact the audio volume heard by peers. --- indra/llwebrtc/llwebrtc.cpp | 20 ++++++++++++++------ indra/llwebrtc/llwebrtc.h | 1 + indra/llwebrtc/llwebrtc_impl.h | 5 +++++ indra/newview/llvoicewebrtc.cpp | 31 ++----------------------------- indra/newview/llvoicewebrtc.h | 5 ----- 5 files changed, 22 insertions(+), 40 deletions(-) diff --git a/indra/llwebrtc/llwebrtc.cpp b/indra/llwebrtc/llwebrtc.cpp index 14fb63ec2a..d5bd913315 100644 --- a/indra/llwebrtc/llwebrtc.cpp +++ b/indra/llwebrtc/llwebrtc.cpp @@ -35,6 +35,7 @@ #include "api/media_stream_interface.h" #include "api/media_stream_track.h" #include "modules/audio_processing/audio_buffer.h" +#include "modules/audio_mixer/audio_mixer_impl.h" namespace llwebrtc { @@ -88,7 +89,7 @@ void LLAudioDeviceObserver::OnRenderData(const void *audio_samples, { } -LLCustomProcessor::LLCustomProcessor() : mSampleRateHz(0), mNumChannels(0), mMicrophoneEnergy(0.0) +LLCustomProcessor::LLCustomProcessor() : mSampleRateHz(0), mNumChannels(0), mMicrophoneEnergy(0.0), mGain(1.0) { memset(mSumVector, 0, sizeof(mSumVector)); } @@ -128,9 +129,13 @@ void LLCustomProcessor::Process(webrtc::AudioBuffer *audio_in) for (size_t index = 0; index < stream_config.num_samples(); index++) { float sample = frame_samples[index]; + sample = sample * mGain; // apply gain + frame_samples[index] = sample; // write processed sample back to buffer. energy += sample * sample; } + audio_in->CopyFrom(&frame[0], stream_config); + // smooth it. size_t buffer_size = sizeof(mSumVector) / sizeof(mSumVector[0]); float totalSum = 0; @@ -236,9 +241,9 @@ void LLWebRTCImpl::init() webrtc::AudioProcessing::Config apm_config; apm_config.echo_canceller.enabled = false; apm_config.echo_canceller.mobile_mode = false; - apm_config.gain_controller1.enabled = true; + apm_config.gain_controller1.enabled = false; apm_config.gain_controller1.mode = webrtc::AudioProcessing::Config::GainController1::kAdaptiveAnalog; - apm_config.gain_controller2.enabled = true; + apm_config.gain_controller2.enabled = false; apm_config.high_pass_filter.enabled = true; apm_config.noise_suppression.enabled = true; apm_config.noise_suppression.level = webrtc::AudioProcessing::Config::NoiseSuppression::kVeryHigh; @@ -260,6 +265,7 @@ void LLWebRTCImpl::init() mAudioProcessingModule->ApplyConfig(apm_config); mAudioProcessingModule->Initialize(processing_config); + mPeerConnectionFactory = webrtc::CreatePeerConnectionFactory(mNetworkThread.get(), mWorkerThread.get(), mSignalingThread.get(), @@ -336,9 +342,9 @@ void LLWebRTCImpl::setAudioConfig(LLWebRTCDeviceInterface::AudioConfig config) webrtc::AudioProcessing::Config apm_config; apm_config.echo_canceller.enabled = config.mEchoCancellation; apm_config.echo_canceller.mobile_mode = false; - apm_config.gain_controller1.enabled = true; + apm_config.gain_controller1.enabled = config.mAGC; apm_config.gain_controller1.mode = webrtc::AudioProcessing::Config::GainController1::kAdaptiveAnalog; - apm_config.gain_controller2.enabled = true; + apm_config.gain_controller2.enabled = false; apm_config.high_pass_filter.enabled = true; apm_config.transient_suppression.enabled = true; apm_config.pipeline.multi_channel_render = true; @@ -612,6 +618,8 @@ float LLWebRTCImpl::getTuningAudioLevel() { return -20 * log10f(mTuningAudioDevi float LLWebRTCImpl::getPeerConnectionAudioLevel() { return -20 * log10f(mPeerCustomProcessor->getMicrophoneEnergy()); } +void LLWebRTCImpl::setPeerConnectionGain(float gain) { mPeerCustomProcessor->setGain(gain); } + // // Peer Connection Helpers @@ -937,7 +945,7 @@ void LLWebRTCPeerConnectionImpl::setSendVolume(float volume) { for (auto &track : mLocalStream->GetAudioTracks()) { - track->GetSource()->SetVolume(volume); + track->GetSource()->SetVolume(volume*5.0); } } }); diff --git a/indra/llwebrtc/llwebrtc.h b/indra/llwebrtc/llwebrtc.h index ecbab81538..f447ea990a 100644 --- a/indra/llwebrtc/llwebrtc.h +++ b/indra/llwebrtc/llwebrtc.h @@ -145,6 +145,7 @@ class LLWebRTCDeviceInterface virtual void setTuningMode(bool enable) = 0; virtual float getTuningAudioLevel() = 0; // for use during tuning virtual float getPeerConnectionAudioLevel() = 0; // for use when not tuning + virtual void setPeerConnectionGain(float gain) = 0; }; // LLWebRTCAudioInterface provides the viewer with a way diff --git a/indra/llwebrtc/llwebrtc_impl.h b/indra/llwebrtc/llwebrtc_impl.h index 448d36e3ea..6672f8ce90 100644 --- a/indra/llwebrtc/llwebrtc_impl.h +++ b/indra/llwebrtc/llwebrtc_impl.h @@ -121,6 +121,8 @@ class LLCustomProcessor : public webrtc::CustomProcessing float getMicrophoneEnergy() { return mMicrophoneEnergy; } + void setGain(float gain) { mGain = gain; } + protected: static const int NUM_PACKETS_TO_FILTER = 30; // 300 ms of smoothing int mSampleRateHz; @@ -128,6 +130,7 @@ class LLCustomProcessor : public webrtc::CustomProcessing float mSumVector[NUM_PACKETS_TO_FILTER]; float mMicrophoneEnergy; + float mGain; }; @@ -160,6 +163,8 @@ class LLWebRTCImpl : public LLWebRTCDeviceInterface, public webrtc::AudioDeviceS float getTuningAudioLevel() override; float getPeerConnectionAudioLevel() override; + void setPeerConnectionGain(float gain) override; + // // AudioDeviceSink // diff --git a/indra/newview/llvoicewebrtc.cpp b/indra/newview/llvoicewebrtc.cpp index ddad470149..36e998af89 100644 --- a/indra/newview/llvoicewebrtc.cpp +++ b/indra/newview/llvoicewebrtc.cpp @@ -87,7 +87,7 @@ namespace { const F32 VOLUME_SCALE_WEBRTC = 0.01f; const F32 LEVEL_SCALE_WEBRTC = 0.008f; - const F32 SPEAKING_AUDIO_LEVEL = 0.35; + const F32 SPEAKING_AUDIO_LEVEL = 0.30; static const std::string REPORTED_VOICE_SERVER_TYPE = "Secondlife WebRTC Gateway"; @@ -1484,14 +1484,10 @@ void LLWebRTCVoiceClient::setMicGain(F32 gain) if (gain != mMicGain) { mMicGain = gain; - sessionState::for_each(boost::bind(predSetMicGain, _1, gain)); + mWebRTCDeviceInterface->setPeerConnectionGain(gain); } } -void LLWebRTCVoiceClient::predSetMicGain(const LLWebRTCVoiceClient::sessionStatePtr_t &session, F32 gain) -{ - session->setMicGain(gain); -} void LLWebRTCVoiceClient::setVoiceEnabled(bool enabled) { @@ -1690,7 +1686,6 @@ std::map LLWebRTCVoiceCli LLWebRTCVoiceClient::sessionState::sessionState() : mHangupOnLastLeave(false), mNotifyOnFirstJoin(false), - mMicGain(1.0), mMuted(false), mSpeakerVolume(1.0), mShuttingDown(false) @@ -1735,15 +1730,6 @@ void LLWebRTCVoiceClient::sessionState::setMuteMic(bool muted) } } -void LLWebRTCVoiceClient::sessionState::setMicGain(F32 gain) -{ - mMicGain = gain; - for (auto &connection : mWebRTCConnections) - { - connection->setMicGain(gain); - } -} - void LLWebRTCVoiceClient::sessionState::setSpeakerVolume(F32 volume) { mSpeakerVolume = volume; @@ -1848,7 +1834,6 @@ LLWebRTCVoiceClient::sessionStatePtr_t LLWebRTCVoiceClient::addSession(const std LL_DEBUGS("Voice") << "adding new session with channel: " << channel_id << LL_ENDL; session->setMuteMic(mMuteMic); - session->setMicGain(mMicGain); session->setSpeakerVolume(mSpeakerVolume); sessionState::addSession(channel_id, session); @@ -1974,7 +1959,6 @@ bool LLWebRTCVoiceClient::estateSessionState::processConnectionStates() connectionPtr_t connection(new LLVoiceWebRTCSpatialConnection(neighbor, INVALID_PARCEL_ID, mChannelID)); mWebRTCConnections.push_back(connection); - connection->setMicGain(mMicGain); connection->setMuteMic(mMuted); connection->setSpeakerVolume(mSpeakerVolume); } @@ -2104,7 +2088,6 @@ LLVoiceWebRTCConnection::LLVoiceWebRTCConnection(const LLUUID ®ionID, const s mShutDown(false), mIceCompleted(false), mSpeakerVolume(0.0), - mMicGain(0.0), mOutstandingRequests(0), mChannelID(channelID), mRegionID(regionID), @@ -2367,15 +2350,6 @@ void LLVoiceWebRTCConnection::setMuteMic(bool muted) } } -void LLVoiceWebRTCConnection::setMicGain(F32 gain) -{ - mMicGain = gain; - if (mWebRTCAudioInterface) - { - mWebRTCAudioInterface->setSendVolume(gain); - } -} - void LLVoiceWebRTCConnection::setSpeakerVolume(F32 volume) { mSpeakerVolume = volume; @@ -2683,7 +2657,6 @@ bool LLVoiceWebRTCConnection::connectionStateMachine() // this connection. mWebRTCAudioInterface->setMute(mMuted); mWebRTCAudioInterface->setReceiveVolume(mSpeakerVolume); - mWebRTCAudioInterface->setSendVolume(mMicGain); LLWebRTCVoiceClient::getInstance()->OnConnectionEstablished(mChannelID, mRegionID); setVoiceConnectionState(VOICE_STATE_WAIT_FOR_DATA_CHANNEL); break; diff --git a/indra/newview/llvoicewebrtc.h b/indra/newview/llvoicewebrtc.h index 60724a4a2a..7042bbae00 100644 --- a/indra/newview/llvoicewebrtc.h +++ b/indra/newview/llvoicewebrtc.h @@ -282,7 +282,6 @@ public: virtual void sendData(const std::string &data); void setMuteMic(bool muted); - void setMicGain(F32 volume); void setSpeakerVolume(F32 volume); void setUserVolume(const LLUUID& id, F32 volume); @@ -303,7 +302,6 @@ public: std::string mName; bool mMuted; // this session is muted. - F32 mMicGain; // gain for this session. F32 mSpeakerVolume; // volume for this session. bool mShuttingDown; @@ -382,7 +380,6 @@ public: static void predSendData(const LLWebRTCVoiceClient::sessionStatePtr_t &session, const std::string& spatial_data); static void predUpdateOwnVolume(const LLWebRTCVoiceClient::sessionStatePtr_t &session, F32 audio_level); static void predSetMuteMic(const LLWebRTCVoiceClient::sessionStatePtr_t &session, bool mute); - static void predSetMicGain(const LLWebRTCVoiceClient::sessionStatePtr_t &session, F32 volume); static void predSetSpeakerVolume(const LLWebRTCVoiceClient::sessionStatePtr_t &session, F32 volume); static void predShutdownSession(const LLWebRTCVoiceClient::sessionStatePtr_t &session); static void predSetUserMute(const LLWebRTCVoiceClient::sessionStatePtr_t &session, const LLUUID& id, bool mute); @@ -607,7 +604,6 @@ class LLVoiceWebRTCConnection : void processIceUpdatesCoro(); virtual void setMuteMic(bool muted); - virtual void setMicGain(F32 volume); virtual void setSpeakerVolume(F32 volume); void setUserVolume(const LLUUID& id, F32 volume); @@ -686,7 +682,6 @@ class LLVoiceWebRTCConnection : std::string mRemoteChannelSDP; bool mMuted; - F32 mMicGain; F32 mSpeakerVolume; bool mShutDown; -- cgit v1.2.3 From 0f47b68e92a3951392ff2fc6bba7147860c1ce4d Mon Sep 17 00:00:00 2001 From: Andrey Kleshchev Date: Fri, 21 Jun 2024 11:46:09 +0300 Subject: viewer#1821 Crash at getSessionID() --- indra/newview/llspeakers.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/indra/newview/llspeakers.cpp b/indra/newview/llspeakers.cpp index 407e058132..b12e8d15fc 100644 --- a/indra/newview/llspeakers.cpp +++ b/indra/newview/llspeakers.cpp @@ -288,6 +288,10 @@ LLSpeakerMgr::~LLSpeakerMgr() LLPointer LLSpeakerMgr::setSpeaker(const LLUUID& id, const std::string& name, LLSpeaker::ESpeakerStatus status, LLSpeaker::ESpeakerType type) { + if (!mVoiceChannel) + { + return NULL; + } LLUUID session_id = getSessionID(); if (id.isNull() || (id == session_id)) { @@ -490,7 +494,7 @@ void LLSpeakerMgr::updateSpeakerList() (LLVoiceClient::getInstance()->isParticipantAvatar(*participant_it)?LLSpeaker::SPEAKER_AGENT:LLSpeaker::SPEAKER_EXTERNAL)); } } - else + else if (mVoiceChannel) { // If not, check if the list is empty, except if it's Nearby Chat (session_id NULL). LLUUID session_id = getSessionID(); @@ -816,7 +820,7 @@ void LLIMSpeakerMgr::updateSpeakers(const LLSD& update) void LLIMSpeakerMgr::toggleAllowTextChat(const LLUUID& speaker_id) { LLPointer speakerp = findSpeaker(speaker_id); - if (!speakerp) return; + if (!speakerp || !mVoiceChannel) return; std::string url = gAgent.getRegionCapability("ChatSessionRequest"); LLSD data; @@ -835,7 +839,7 @@ void LLIMSpeakerMgr::toggleAllowTextChat(const LLUUID& speaker_id) void LLIMSpeakerMgr::moderateVoiceParticipant(const LLUUID& avatar_id, bool unmute) { LLPointer speakerp = findSpeaker(avatar_id); - if (!speakerp) return; + if (!speakerp || !mVoiceChannel) return; // *NOTE: mantipov: probably this condition will be incorrect when avatar will be blocked for // text chat via moderation (LLSpeaker::mModeratorMutedText == TRUE) -- cgit v1.2.3 From 454821bb5968ce59e0738b38f135de659b8e349f Mon Sep 17 00:00:00 2001 From: Roxie Linden Date: Tue, 25 Jun 2024 18:30:18 -0700 Subject: #1806 - crash in initVoiceChannel --- indra/newview/llimview.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp index 014dd90406..2978de6a22 100644 --- a/indra/newview/llimview.cpp +++ b/indra/newview/llimview.cpp @@ -3413,11 +3413,11 @@ LLUUID LLIMMgr::addSession( ((IM_NOTHING_SPECIAL == dialog) || (IM_SESSION_P2P_INVITE == dialog) || (IM_SESSION_CONFERENCE_START == dialog)) && ids.size()) { - LLIMModel::LLIMSession* ad_hoc_found = LLIMModel::getInstance()->findAdHocIMSession(ids); - if (ad_hoc_found) + session = LLIMModel::getInstance()->findAdHocIMSession(ids); + if (session) { new_session = false; - session_id = ad_hoc_found->mSessionID; + session_id = session->mSessionID; } } -- cgit v1.2.3 From 39f0da7ab623ee99106058deb1d0c6a3295b567f Mon Sep 17 00:00:00 2001 From: Andrey Kleshchev Date: Fri, 23 Feb 2024 04:18:03 +0200 Subject: Issue#880 Crash on a dead pointer in a chat session --- indra/newview/llconversationmodel.cpp | 26 +++++++++---------- indra/newview/llfloaterimsessiontab.cpp | 45 +++++++++++++++++++++++++++++++-- 2 files changed, 55 insertions(+), 16 deletions(-) diff --git a/indra/newview/llconversationmodel.cpp b/indra/newview/llconversationmodel.cpp index 4335168417..4cd85ac756 100644 --- a/indra/newview/llconversationmodel.cpp +++ b/indra/newview/llconversationmodel.cpp @@ -357,22 +357,20 @@ void LLConversationItemSession::clearParticipants() void LLConversationItemSession::clearAndDeparentModels() { - std::for_each(mChildren.begin(), mChildren.end(), - [](LLFolderViewModelItem* c) + for (LLFolderViewModelItem* child : mChildren) + { + if (child->getNumRefs() == 0) { - if (c->getNumRefs() == 0) - { - // LLConversationItemParticipant can be created but not assigned to any view, - // it was waiting for an "add_participant" event to be processed - delete c; - } - else - { - // Model is still assigned to some view/widget - c->setParent(NULL); - } + // LLConversationItemParticipant can be created but not assigned to any view, + // it was waiting for an "add_participant" event to be processed + delete child; } - ); + else + { + // Model is still assigned to some view/widget + child->setParent(NULL); + } + } mChildren.clear(); } diff --git a/indra/newview/llfloaterimsessiontab.cpp b/indra/newview/llfloaterimsessiontab.cpp index dc64d09f9f..aaf839c50c 100644 --- a/indra/newview/llfloaterimsessiontab.cpp +++ b/indra/newview/llfloaterimsessiontab.cpp @@ -102,6 +102,26 @@ LLFloaterIMSessionTab::LLFloaterIMSessionTab(const LLSD& session_id) LLFloaterIMSessionTab::~LLFloaterIMSessionTab() { delete mRefreshTimer; + + LLFloaterIMContainer* im_container = LLFloaterIMContainer::findInstance(); + if (im_container) + { + LLParticipantList* session = dynamic_cast(im_container->getSessionModel(mSessionID)); + if (session) + { + for (const conversations_widgets_map::value_type& widget_pair : mConversationsWidgets) + { + LLFolderViewItem* widget = widget_pair.second; + LLFolderViewModelItem* item_vmi = widget->getViewModelItem(); + if (item_vmi && item_vmi->getNumRefs() == 1) + { + // This is the last pointer, remove participant from session + // before participant gets deleted on destroyView. + session->removeChild(item_vmi); + } + } + } + } } // static @@ -663,9 +683,30 @@ void LLFloaterIMSessionTab::removeConversationViewParticipant(const LLUUID& part LLFolderViewItem* widget = get_ptr_in_map(mConversationsWidgets,participant_id); if (widget) { + LLFolderViewModelItem* item_vmi = widget->getViewModelItem(); + if (item_vmi && item_vmi->getNumRefs() == 1) + { + // This is the last pointer, remove participant from session + // before participant gets deleted on destroyView. + // + // Floater (widget) and participant's view can simultaneously + // co-own the model, in which case view is responsible for + // the deletion and floater is free to clear and recreate + // the list, yet there are cases where only widget owns + // the pointer so it should do the cleanup. + // See "add_participant". + // + // Todo: If it keeps causing issues turn participants + // into LLPointers in the session + LLParticipantList* session = getParticipantList(); + if (session) + { + session->removeChild(item_vmi); + } + } widget->destroyView(); - } - mConversationsWidgets.erase(participant_id); + } + mConversationsWidgets.erase(participant_id); } void LLFloaterIMSessionTab::updateConversationViewParticipant(const LLUUID& participant_id) -- cgit v1.2.3 From 0f2bb1bd8307a0802a6e24c7eb50f6a0082edea4 Mon Sep 17 00:00:00 2001 From: Roxie Linden Date: Wed, 26 Jun 2024 12:53:49 -0700 Subject: Make the webrtc viewer work for vivox adhoc/group calls. There was an issue on the release grid where old-style credentials were being sent over and the webrtc viewer wasn't dealing with them properly. --- indra/newview/llimview.cpp | 2 +- indra/newview/llvoicechannel.cpp | 12 ++++++------ indra/newview/llvoicevivox.cpp | 18 ++++++++++++------ 3 files changed, 19 insertions(+), 13 deletions(-) diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp index 2978de6a22..d3f013c67c 100644 --- a/indra/newview/llimview.cpp +++ b/indra/newview/llimview.cpp @@ -3853,7 +3853,7 @@ bool LLIMMgr::startCall(const LLUUID& session_id, LLVoiceChannel::EDirection dir { LLVoiceChannel* voice_channel = LLIMModel::getInstance()->getVoiceChannel(session_id); if (!voice_channel) return false; - if (!voice_channel_info.isUndefined()) + if (voice_channel_info.isDefined() && voice_channel_info.isMap() && voice_channel_info.size() > 0) { voice_channel->setChannelInfo(voice_channel_info); } diff --git a/indra/newview/llvoicechannel.cpp b/indra/newview/llvoicechannel.cpp index f6556b7128..8681411a98 100644 --- a/indra/newview/llvoicechannel.cpp +++ b/indra/newview/llvoicechannel.cpp @@ -96,7 +96,7 @@ void LLVoiceChannel::setChannelInfo(const LLSD &channelInfo) if (mState == STATE_NO_CHANNEL_INFO) { - if (mChannelInfo.isUndefined()) + if (mChannelInfo.isUndefined() || !mChannelInfo.isMap() || mChannelInfo.size() == 0) { LLNotificationsUtil::add("VoiceChannelJoinFailed", mNotifyArgs); LL_WARNS("Voice") << "Received empty channel info for channel " << mSessionName << LL_ENDL; @@ -122,7 +122,7 @@ void LLVoiceChannel::onChange(EStatusType type, const LLSD& channelInfo, bool pr { LL_DEBUGS("Voice") << "Incoming channel info: " << channelInfo << LL_ENDL; LL_DEBUGS("Voice") << "Current channel info: " << mChannelInfo << LL_ENDL; - if (mChannelInfo.isUndefined()) + if (mChannelInfo.isUndefined() || (mChannelInfo.isMap() && mChannelInfo.size() == 0)) { mChannelInfo = channelInfo; } @@ -477,7 +477,7 @@ void LLVoiceChannelGroup::setChannelInfo(const LLSD& channelInfo) if (mState == STATE_NO_CHANNEL_INFO) { - if(!mChannelInfo.isUndefined()) + if(mChannelInfo.isDefined() && mChannelInfo.isMap()) { setState(STATE_READY); @@ -676,9 +676,9 @@ void LLVoiceChannelProximal::activate() // we're connected to a non-spatial channel, so disconnect. LLVoiceClient::getInstance()->leaveNonSpatialChannel(); } + LLVoiceClient::getInstance()->activateSpatialChannel(true); LLVoiceChannel::activate(); - } void LLVoiceChannelProximal::onChange(EStatusType type, const LLSD& channelInfo, bool proximal) @@ -751,7 +751,7 @@ void LLVoiceChannelProximal::deactivate() { setState(STATE_HUNG_UP); } - + LLVoiceClient::getInstance()->removeObserver(this); LLVoiceClient::getInstance()->activateSpatialChannel(false); } @@ -907,7 +907,7 @@ void LLVoiceChannelP2P::setChannelInfo(const LLSD& channel_info) } mReceivedCall = TRUE; - if (!channel_info.isUndefined()) + if (channel_info.isDefined() && channel_info.isMap()) { mIncomingCallInterface = LLVoiceClient::getInstance()->getIncomingCallInterface(channel_info); } diff --git a/indra/newview/llvoicevivox.cpp b/indra/newview/llvoicevivox.cpp index 3554933a52..1833aeb54f 100644 --- a/indra/newview/llvoicevivox.cpp +++ b/indra/newview/llvoicevivox.cpp @@ -5105,25 +5105,31 @@ void LLVivoxVoiceClient::processChannels(bool process) bool LLVivoxVoiceClient::isCurrentChannel(const LLSD &channelInfo) { - if (!mProcessChannels || (channelInfo["voice_server_type"].asString() != VIVOX_VOICE_SERVER_TYPE)) + if (!mProcessChannels || (channelInfo.has("voice_server_type") && channelInfo["voice_server_type"].asString() != VIVOX_VOICE_SERVER_TYPE)) { return false; } - if (mAudioSession) + // favor the next audio session, as that's the one we're bringing up. + sessionStatePtr_t session = mNextAudioSession; + if (!session) + { + session = mAudioSession; + } + if (session) { if (!channelInfo["session_handle"].asString().empty()) { - return mAudioSession->mHandle == channelInfo["session_handle"].asString(); + return session->mHandle == channelInfo["session_handle"].asString(); } - return channelInfo["channel_uri"].asString() == mAudioSession->mSIPURI; + return channelInfo["channel_uri"].asString() == session->mSIPURI; } return false; } bool LLVivoxVoiceClient::compareChannels(const LLSD& channelInfo1, const LLSD& channelInfo2) { - return (channelInfo1["voice_server_type"] == VIVOX_VOICE_SERVER_TYPE) && - (channelInfo1["voice_server_type"] == channelInfo2["voice_server_type"]) && + return (!channelInfo1.has("voice_server_type") || (channelInfo1["voice_server_type"] == VIVOX_VOICE_SERVER_TYPE)) && + (!channelInfo2.has("voice_server_type") || (channelInfo2["voice_server_type"] == VIVOX_VOICE_SERVER_TYPE)) && (channelInfo1["channel_uri"] == channelInfo2["channel_uri"]); } -- cgit v1.2.3 From 33418a77b716e122da9778869cdbabe97c83ff37 Mon Sep 17 00:00:00 2001 From: Roxie Linden Date: Wed, 26 Jun 2024 14:43:22 -0700 Subject: Convert tabs to spaces --- indra/newview/llfloaterimsessiontab.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/indra/newview/llfloaterimsessiontab.cpp b/indra/newview/llfloaterimsessiontab.cpp index aaf839c50c..0ed84c381f 100644 --- a/indra/newview/llfloaterimsessiontab.cpp +++ b/indra/newview/llfloaterimsessiontab.cpp @@ -705,8 +705,8 @@ void LLFloaterIMSessionTab::removeConversationViewParticipant(const LLUUID& part } } widget->destroyView(); - } - mConversationsWidgets.erase(participant_id); + } + mConversationsWidgets.erase(participant_id); } void LLFloaterIMSessionTab::updateConversationViewParticipant(const LLUUID& participant_id) -- cgit v1.2.3 From af21783ffa06c6fd97c34856ad620fc14e89bb98 Mon Sep 17 00:00:00 2001 From: Roxie Linden Date: Tue, 2 Jul 2024 13:52:51 -0700 Subject: EnableVoiceMorphing should default to true --- indra/newview/app_settings/settings.xml | 2 +- indra/newview/llvoiceclient.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 38d7555053..0a84bf8390 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -13043,7 +13043,7 @@ Type Boolean Value - 0 + 1 AutoDisengageMic diff --git a/indra/newview/llvoiceclient.cpp b/indra/newview/llvoiceclient.cpp index 779f4e3176..f128c03023 100644 --- a/indra/newview/llvoiceclient.cpp +++ b/indra/newview/llvoiceclient.cpp @@ -137,7 +137,7 @@ LLVoiceClient::LLVoiceClient(LLPumpIO *pump) mSpatialVoiceModule(NULL), mNonSpatialVoiceModule(NULL), m_servicePump(NULL), - mVoiceEffectEnabled(LLCachedControl(gSavedSettings, "VoiceMorphingEnabled", false)), + mVoiceEffectEnabled(LLCachedControl(gSavedSettings, "VoiceMorphingEnabled", true)), mVoiceEffectDefault(LLCachedControl(gSavedPerAccountSettings, "VoiceEffectDefault", "00000000-0000-0000-0000-000000000000")), mVoiceEffectSupportNotified(false), mPTTDirty(true), -- cgit v1.2.3 From 3c71230aa4569f1c238a5f645b5a5b7447ec389e Mon Sep 17 00:00:00 2001 From: Roxie Linden Date: Tue, 2 Jul 2024 21:03:30 -0700 Subject: don't set voice font for vivox --- indra/newview/llvoiceclient.cpp | 2 +- indra/newview/llvoicevivox.cpp | 3 --- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/indra/newview/llvoiceclient.cpp b/indra/newview/llvoiceclient.cpp index f128c03023..490c7174c5 100644 --- a/indra/newview/llvoiceclient.cpp +++ b/indra/newview/llvoiceclient.cpp @@ -577,7 +577,7 @@ bool LLVoiceClient::onVoiceEffectsNotSupported(const LLSD ¬ification, const L switch (option) { case 0: // "Okay" - gSavedSettings.setBOOL("VoiceMorphingEnabled", FALSE); + gSavedPerAccountSettings.setString("VoiceEffectDefault", LLUUID::null.asString()); break; case 1: // "Cancel" diff --git a/indra/newview/llvoicevivox.cpp b/indra/newview/llvoicevivox.cpp index 1833aeb54f..4694ea92bb 100644 --- a/indra/newview/llvoicevivox.cpp +++ b/indra/newview/llvoicevivox.cpp @@ -2538,7 +2538,6 @@ void LLVivoxVoiceClient::sessionCreateSendMessage(const sessionStatePtr_t &sessi stream << "" << (startAudio?"true":"false") << "" << "" << (startText?"true":"false") << "" - << "" << font_index << "" << "" << mChannelName << "" << "\n\n\n"; LL_WARNS("Voice") << "Session.Create: " << stream.str() << LL_ENDL; @@ -2577,7 +2576,6 @@ void LLVivoxVoiceClient::sessionGroupAddSessionSendMessage(const sessionStatePtr << "" << mChannelName << "" << "" << (startAudio?"true":"false") << "" << "" << (startText?"true":"false") << "" - << "" << font_index << "" << "" << password << "" << "SHA1UserName" << "\n\n\n" @@ -2601,7 +2599,6 @@ void LLVivoxVoiceClient::sessionMediaConnectSendMessage(const sessionStatePtr_t << "mHandle << "\" action=\"Session.MediaConnect.1\">" << "" << session->mGroupHandle << "" << "" << session->mHandle << "" - << "" << font_index << "" << "Audio" << "\n\n\n"; -- cgit v1.2.3 From d1b1bb12cb76d97d03c3d83695a034a033b89699 Mon Sep 17 00:00:00 2001 From: Roxie Linden Date: Wed, 3 Jul 2024 11:26:39 -0700 Subject: Sync autobuild.xml up with release autobuild. --- autobuild.xml | 216 +++++++++++++++++++++++----------------------------------- 1 file changed, 87 insertions(+), 129 deletions(-) diff --git a/autobuild.xml b/autobuild.xml index bed9ce997f..92bacba33d 100644 --- a/autobuild.xml +++ b/autobuild.xml @@ -384,11 +384,11 @@ archive hash - f6835c4d7745cd1cadfbce47b40331d08affb532 + e03eb77224290c875ff84f75b7fe3d0e7c162c94 hash_algorithm sha1 url - https://github.com/secondlife/3p-dictionaries/releases/download/v1.0.1-dev2.gf887629-f887629/dictionaries-common-None.tar.zst + https://github.com/secondlife/3p-dictionaries/releases/download/v1-a01bb6c/dictionaries-1.a01bb6c-common-a01bb6c.tar.zst name common @@ -401,7 +401,7 @@ copyright Copyright 2014 Apache OpenOffice software version - None + 1.a01bb6c name dictionaries description @@ -572,11 +572,11 @@ creds github hash - fb6797ff93b6e881b060d2a8b396d8d7477834ee + a2074b67de7ad4c04b5ca8f8f161506add9697b2 hash_algorithm sha1 url - https://api.github.com/repos/secondlife/3p-fmodstudio/releases/assets/108908444 + https://api.github.com/repos/secondlife/3p-fmodstudio/releases/assets/149207589 name darwin64 @@ -588,11 +588,11 @@ creds github hash - a378bd1604aa97ca763140911f9f4e463ced85c0 + 8c1b701648c077220dbc576c3d9aefbef47f8324 hash_algorithm sha1 url - https://api.github.com/repos/secondlife/3p-fmodstudio/releases/assets/108908446 + https://api.github.com/repos/secondlife/3p-fmodstudio/releases/assets/149207592 name linux64 @@ -604,11 +604,11 @@ creds github hash - 72304491d86bd797b840999b255358f195b06609 + 7e0c3d50e8b99d8735c6c9596a72ded9ee2bc1c8 hash_algorithm sha1 url - https://api.github.com/repos/secondlife/3p-fmodstudio/releases/assets/108908456 + https://api.github.com/repos/secondlife/3p-fmodstudio/releases/assets/149207594 name windows64 @@ -621,7 +621,7 @@ copyright FMOD Studio by Firelight Technologies Pty Ltd. version - 2.02.13.578928 + 2.02.20.c78ef55 name fmodstudio description @@ -772,11 +772,11 @@ archive hash - 6604c1cca515d287e697997a8d5593d1cae172a9 + 066625e7aa7f697a4b6cd461aad960c57181011f hash_algorithm sha1 url - https://github.com/secondlife/3p-glh_linear/releases/download/v1.0.1-dev2.g3253ed7-3253ed7/glh_linear-common-None.tar.zst + https://github.com/secondlife/3p-glh_linear/releases/download/v1.0.1-dev4-984c397/glh_linear-1.0.1-dev4-common-984c397.tar.zst name common @@ -789,7 +789,7 @@ copyright Copyright (c) 2000 Cass Everitt version - None + 1.0.1-dev4 name glh_linear description @@ -908,11 +908,11 @@ creds github hash - a193ff65d6db48626d65d96c6124c6efca85e8ec + ae2c2a215b1bc2e3f37a67e301926dc405902d1a hash_algorithm sha1 url - https://api.github.com/repos/secondlife/3p-havok-source/releases/assets/108912596 + https://api.github.com/repos/secondlife/3p-havok-source/releases/assets/136778143 name darwin64 @@ -936,11 +936,11 @@ creds github hash - ebfb82b6143874e7938b9d1e8a70d0a2e28aa818 + 0393dd75c58f7046bed47e62a8884a78cb02a5c3 hash_algorithm sha1 url - https://api.github.com/repos/secondlife/3p-havok-source/releases/assets/108912599 + https://api.github.com/repos/secondlife/3p-havok-source/releases/assets/136778145 name windows64 @@ -1146,11 +1146,11 @@ creds github hash - bcc7e2c34896fc9cbc41828dee8a4ddf54f10453 + ad72fa1d103df777906f0d98f3e882b9916aeada hash_algorithm sha1 url - https://api.github.com/repos/secondlife/3p-kdu/releases/assets/108298968 + https://api.github.com/repos/secondlife/3p-kdu/releases/assets/136774118 name darwin64 @@ -1162,11 +1162,11 @@ creds github hash - 9de772df2ed12e9c742df6c90670c7cbbb9c93a6 + e46e4ac93a237b5c4a14183766f76ba5d58935a2 hash_algorithm sha1 url - https://api.github.com/repos/secondlife/3p-kdu/releases/assets/108298969 + https://api.github.com/repos/secondlife/3p-kdu/releases/assets/136774125 name linux64 @@ -1178,15 +1178,31 @@ creds github hash - 92533ff0f8c1881ad85e75800f9072c413ccf7b7 + bb37557f78c72b26580a521f8b8dabfa1b34e6e6 hash_algorithm sha1 url - https://api.github.com/repos/secondlife/3p-kdu/releases/assets/108298970 + https://api.github.com/repos/secondlife/3p-kdu/releases/assets/136774126 name windows64 + linux + + archive + + creds + github + hash + 711b82f9f588d3a125af7dcd8c81f93d9c343a7d + hash_algorithm + sha1 + url + https://api.github.com/repos/secondlife/3p-kdu/releases/assets/136774121 + + name + linux + license Kakadu @@ -1195,7 +1211,7 @@ copyright Kakadu software version - 7.10.4.539108 + 7.10.4.4b9ec5f name kdu description @@ -1494,11 +1510,11 @@ archive hash - e50ea94bbaa4ff41bf53b84b7192df1a694c5337 + a9503e1b4e1d9790cf29d18a3d9ab39e6a515679 hash_algorithm sha1 url - https://github.com/secondlife/llca/releases/download/v202310121525.0-d22bd98/llca-202310121530.0-common-d22bd98.tar.zst + https://github.com/secondlife/llca/releases/download/v202402012004.0-0f5d9c3/llca-202402012004.0-common-0f5d9c3.tar.zst name common @@ -1527,11 +1543,11 @@ creds github hash - 48bca5d0233d1e724a59f649a2c6c7ac5f40ec3c + b037cc0b29ea70ee834cfae6dda5b7a25cd57174 hash_algorithm sha1 url - https://api.github.com/repos/secondlife/llphysicsextensions_source/releases/assets/117009335 + https://api.github.com/repos/secondlife/llphysicsextensions_source/releases/assets/144851460 name darwin64 @@ -1543,11 +1559,11 @@ creds github hash - 39f52d0350e130f41c5c758f7cb94e87b962c223 + bdea1fd5c4da9da5afde088d16188b45d0853e04 hash_algorithm sha1 url - https://api.github.com/repos/secondlife/llphysicsextensions_source/releases/assets/117009336 + https://api.github.com/repos/secondlife/llphysicsextensions_source/releases/assets/144851461 name linux64 @@ -1559,11 +1575,11 @@ creds github hash - 7b5e645fb7eb399abbea63bd21e8063bbb32a911 + f652ce0d6aef864689f0ed44255da4d9cd65a43f hash_algorithm sha1 url - https://api.github.com/repos/secondlife/llphysicsextensions_source/releases/assets/117009339 + https://api.github.com/repos/secondlife/llphysicsextensions_source/releases/assets/144851463 name windows64 @@ -1576,7 +1592,7 @@ copyright Copyright (c) 2010, Linden Research, Inc. version - 1.0.565768 + 1.0.479d20a name llphysicsextensions_source @@ -1760,6 +1776,18 @@ mikktspace + canonical_repo + https://bitbucket.org/lindenlab/3p-mikktspace + copyright + Copyright (C) 2011 by Morten S. Mikkelsen, Copyright (C) 2022 Blender Authors + description + Mikktspace Tangent Generator + license + Apache 2.0 + license_file + mikktspace.txt + name + mikktspace platforms darwin64 @@ -1805,20 +1833,8 @@ windows64 - license - Apache 2.0 - license_file - mikktspace.txt - copyright - Copyright (C) 2011 by Morten S. Mikkelsen, Copyright (C) 2022 Blender Authors version 1 - name - mikktspace - canonical_repo - https://bitbucket.org/lindenlab/3p-mikktspace - description - Mikktspace Tangent Generator minizip-ng @@ -2467,9 +2483,11 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors archive hash - 4dad1c0948141e1667c01a3ee755e4dc + 2c47ae2d0c38c86b8c2db8d9317f0ab15edfc74f + hash_algorithm + sha1 url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/105849/926137/tinygltf-v2.5.0-common-575729.tar.bz2 + https://github.com/secondlife/3p-tinygltf/releases/download/v2.5.0-1ae57fd/tinygltf-v2.5.0-common-1ae57fd.tar.zst name common @@ -2503,9 +2521,11 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors archive hash - 9b6e1a1f4b0969d38a1ca8ee00aeb548 + 49650353442698c3e05102676fe427d0ebe02f0b + hash_algorithm + sha1 url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/110584/960613/tracy-v0.8.1.578241-darwin64-578241.tar.bz2 + https://github.com/secondlife/3p-tracy/releases/download/v0.8.1-eecbf72/tracy-v0.8.1-eecbf72-darwin64-eecbf72.tar.zst name darwin64 @@ -2515,11 +2535,11 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors archive hash - 05b72ae5d733aed7d3bf142287601cc6 + 2b80e7407e4f3e82eff3879add0e9ad63e7fcace hash_algorithm - md5 + sha1 url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/110586/960637/tracy-v0.8.1.578241-windows64-578241.tar.bz2 + https://github.com/secondlife/3p-tracy/releases/download/v0.8.1-eecbf72/tracy-v0.8.1-eecbf72-windows64-eecbf72.tar.zst name windows64 @@ -2532,7 +2552,7 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors copyright Copyright (c) 2017-2022, Bartosz Taudul (wolf@nereid.pl) version - v0.8.1.578241 + v0.8.1-eecbf72 name tracy canonical_repo @@ -2731,8 +2751,6 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors LICENSE copyright Copyright (c) 2000-2012, Linden Research, Inc. - version - 3.0-f14b5ec name viewer-manager description @@ -2741,6 +2759,8 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors https://bitbucket.org/lindenlab/vmp-standalone source_type hg + version + 3.0-f14b5ec vlc-bin @@ -2850,51 +2870,29 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors platforms - darwin64 - - archive - - hash - 8cff2060843db3db788511ee34a8e8cc - url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/101316/891509/vulkan_gltf-1-darwin64-572743.tar.bz2 - - name - darwin64 - - windows - - archive - - hash - 58eea384be49ba756ce9c5e66669540b - url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/101318/891520/vulkan_gltf-1-windows-572743.tar.bz2 - - name - windows - - windows64 + common archive hash - 79b6a11622c2f83cfc2b7cd1fafb867b + 8e365eff8dcace48d91e2530f8b13e420849aefc + hash_algorithm + sha1 url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/101319/891521/vulkan_gltf-1-windows64-572743.tar.bz2 + https://github.com/secondlife/3p-vulkan-gltf-pbr/releases/download/v1.0.0-d7c372f/vulkan_gltf-1.0.0-common-d7c372f.tar.zst name - windows64 + common license Copyright (c) 2018 Sascha Willems license_file - LICENSES/vulkan_gltf.txt + vulkan_gltf.txt copyright Copyright (c) 2018 Sascha Willems version - 1 + 1.0.0 name vulkan_gltf canonical_repo @@ -2977,54 +2975,14 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors archive hash - e4f77ba0a9b8ec3cc3fabc51c4da81d2 - url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/110070/956941/xxhash-0.8.1.578006-windows-578006.tar.bz2 - - name - common - - darwin64 - - archive - - hash - fdcc803a76a3359bb426db7dac161406676d51e7 - hash_algorithm - sha1 - url - https://github.com/secondlife/3p-xxhash/releases/download/v0.8.1.7501c90/xxhash-0.8.1.7501c90-darwin64-7501c90.tar.zst - - name - darwin64 - - linux64 - - archive - - hash - 7acb3f94a549fbb9bd7bc16604e34f33c5365a9b + 1a73c476b371b62066d1c3eced249660e9467e53 hash_algorithm sha1 url - https://github.com/secondlife/3p-xxhash/releases/download/v0.8.1.7501c90/xxhash-0.8.1.7501c90-linux64-7501c90.tar.zst + https://github.com/secondlife/3p-xxhash/releases/download/v0.8.1-69ff69a/xxhash-0.8.1-69ff69a-common-69ff69a.tar.zst name - linux64 - - windows64 - - archive - - hash - 4522d075ea4703ef4b527c3039864ef735ea7953 - hash_algorithm - sha1 - url - https://github.com/secondlife/3p-xxhash/releases/download/v0.8.1.7501c90/xxhash-0.8.1.7501c90-windows64-7501c90.tar.zst - - name - windows64 + common license @@ -3034,7 +2992,7 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors copyright Copyright (c) 2012-2021 Yann Collet version - 0.8.1.7501c90 + 0.8.1-69ff69a name xxhash description -- cgit v1.2.3