diff options
| author | Erik Kundiman <erik@megapahit.org> | 2024-08-09 14:20:04 +0800 | 
|---|---|---|
| committer | Erik Kundiman <erik@megapahit.org> | 2024-08-09 14:20:04 +0800 | 
| commit | 2cd3746d2cc4d895ab2662f6f165d674466db093 (patch) | |
| tree | 769eb0ed330712917a45a1b00f64140ba16faf49 | |
| parent | 43d43c79d0254b8b27f2386f67335e5f3dc5d24f (diff) | |
| parent | 735ad360d2fb64246622d53be6ece683fc121a02 (diff) | |
Merge remote-tracking branch 'secondlife/release/webrtc-voice' into webrtc-voice
25 files changed, 164 insertions, 161 deletions
| diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index e3cc2f8527..fc50665ddd 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -399,15 +399,32 @@ jobs:      needs: build      runs-on: ubuntu-latest      steps: +      - name: Download viewer exe +        uses: actions/download-artifact@v4 +        with: +          name: Windows-app +          path: _artifacts +      - name: Download Windows Symbols +        if: env.BUGSPLAT_USER && env.BUGSPLAT_PASS +        uses: actions/download-artifact@v4 +        with: +          name: Windows-symbols +      - name: Extract viewer pdb +        if: env.BUGSPLAT_USER && env.BUGSPLAT_PASS +        shell: bash +        run: | +          tar -xJf "${{ needs.build.outputs.viewer_channel }}.sym.tar.xz" -C _artifacts        - name: Post Windows symbols          if: env.BUGSPLAT_USER && env.BUGSPLAT_PASS -        uses: secondlife/viewer-build-util/post-bugsplat-windows@v2 +        uses: secondlife-3p/symbol-upload@v10          with:            username: ${{ env.BUGSPLAT_USER }}            password: ${{ env.BUGSPLAT_PASS }}            database: "SecondLife_Viewer_2018" -          channel: ${{ needs.build.outputs.viewer_channel }} +          application: ${{ needs.build.outputs.viewer_channel }}            version: ${{ needs.build.outputs.viewer_version }} +          directory: _artifacts +          files: "**/{SecondLifeViewer.exe,llwebrtc.dll,*.pdb}"    post-mac-symbols:      env: @@ -416,15 +433,22 @@ jobs:      needs: build      runs-on: ubuntu-latest      steps: +      - name: Download Mac Symbols +        if: env.BUGSPLAT_USER && env.BUGSPLAT_PASS +        uses: actions/download-artifact@v4 +        with: +          name: macOS-symbols        - name: Post Mac symbols          if: env.BUGSPLAT_USER && env.BUGSPLAT_PASS -        uses: secondlife/viewer-build-util/post-bugsplat-mac@v2 +        uses: secondlife-3p/symbol-upload@v10          with:            username: ${{ env.BUGSPLAT_USER }}            password: ${{ env.BUGSPLAT_PASS }}            database: "SecondLife_Viewer_2018" -          channel: ${{ needs.build.outputs.viewer_channel }} +          application: ${{ needs.build.outputs.viewer_channel }}            version: ${{ needs.build.outputs.viewer_version }} +          directory: . +          files: "**/*.xcarchive.zip"    release:      needs: [setvar, build, sign-and-package-windows, sign-and-package-mac] @@ -186,7 +186,7 @@ pre_build()          # This name is consumed by indra/newview/CMakeLists.txt. Make it          # absolute because we've had troubles with relative pathnames.          abs_build_dir="$(cd "$build_dir"; pwd)" -        VIEWER_SYMBOL_FILE="$(native_path "$abs_build_dir/newview/$variant/secondlife-symbols-$symplat-${AUTOBUILD_ADDRSIZE}.tar.xz")" +        VIEWER_SYMBOL_FILE="$(native_path "$abs_build_dir/symbols/$variant/${viewer_channel}.sym.tar.xz")"      fi      # honor autobuild_configure_parameters same as sling-buildscripts @@ -551,9 +551,8 @@ then      # nat 2016-12-22: without RELEASE_CRASH_REPORTING, we have no symbol file.      if [ "${RELEASE_CRASH_REPORTING:-}" != "OFF" ]      then -        # BugSplat wants to see xcarchive.zip -        # e.g. build-darwin-x86_64/newview/Release/Second Life Test.xcarchive.zip -        symbol_file="${build_dir}/newview/${variant}/${viewer_channel}.xcarchive.zip" +        # e.g. build-darwin-x86_64/symbols/Release/Second Life Test.xarchive.zip +        symbol_file="${build_dir}/symbols/${variant}/${viewer_channel}.xcarchive.zip"          if [[ ! -f "$symbol_file" ]]          then              # symbol tarball we prep for (e.g.) Breakpad diff --git a/indra/cmake/Linking.cmake b/indra/cmake/Linking.cmake index a297e04143..8e91dac109 100644 --- a/indra/cmake/Linking.cmake +++ b/indra/cmake/Linking.cmake @@ -19,6 +19,7 @@ if (WINDOWS OR DARWIN )      endif()    else()      set(SHARED_LIB_STAGING_DIR ${CMAKE_BINARY_DIR}/sharedlibs/$<IF:$<BOOL:${LL_GENERATOR_IS_MULTI_CONFIG}>,$<CONFIG>,>) +    set(SYMBOLS_STAGING_DIR ${CMAKE_BINARY_DIR}/symbols/$<IF:$<BOOL:${LL_GENERATOR_IS_MULTI_CONFIG}>,$<CONFIG>,>/${VIEWER_CHANNEL})    endif()    if( DARWIN ) diff --git a/indra/llcommon/llerrorcontrol.h b/indra/llcommon/llerrorcontrol.h index bf5a6df556..cbb703e9e7 100644 --- a/indra/llcommon/llerrorcontrol.h +++ b/indra/llcommon/llerrorcontrol.h @@ -198,7 +198,7 @@ namespace LLError      };      /** -     * @NOTE: addRecorder() and removeRecorder() uses the boost::shared_ptr to allow for shared ownership +     * @NOTE: addRecorder() and removeRecorder() uses the std::shared_ptr to allow for shared ownership       * while still ensuring that the allocated memory is eventually freed       */      LL_COMMON_API void addRecorder(RecorderPtr); diff --git a/indra/llinventory/llsettingsdaycycle.cpp b/indra/llinventory/llsettingsdaycycle.cpp index ef6a187d06..3050cdf953 100644 --- a/indra/llinventory/llsettingsdaycycle.cpp +++ b/indra/llinventory/llsettingsdaycycle.cpp @@ -28,7 +28,6 @@  #include "llsettingsdaycycle.h"  #include "llerror.h"  #include <algorithm> -#include <boost/make_shared.hpp>  #include "lltrace.h"  #include "llfasttimer.h"  #include "v3colorutil.h" diff --git a/indra/llinventory/llsettingswater.cpp b/indra/llinventory/llsettingswater.cpp index 84542e2cb4..a6a25b0953 100644 --- a/indra/llinventory/llsettingswater.cpp +++ b/indra/llinventory/llsettingswater.cpp @@ -27,7 +27,6 @@  #include "llsettingswater.h"  #include <algorithm> -#include <boost/make_shared.hpp>  #include "lltrace.h"  #include "llfasttimer.h"  #include "v3colorutil.h" diff --git a/indra/llwebrtc/CMakeLists.txt b/indra/llwebrtc/CMakeLists.txt index b7adc91c2a..9c58f5ff08 100644 --- a/indra/llwebrtc/CMakeLists.txt +++ b/indra/llwebrtc/CMakeLists.txt @@ -31,7 +31,11 @@ add_library (llwebrtc SHARED ${llwebrtc_SOURCE_FILES})  set_target_properties(llwebrtc PROPERTIES PUBLIC_HEADER llwebrtc.h)  if (WINDOWS) -    target_link_libraries(llwebrtc PRIVATE ll::webrtc  +    set_target_properties(llwebrtc +        PROPERTIES +        LINK_FLAGS "/debug /LARGEADDRESSAWARE" +        ) +	target_link_libraries(llwebrtc PRIVATE ll::webrtc                                          secur32                                         winmm                                         dmoguids @@ -39,8 +43,15 @@ if (WINDOWS)                                         msdmo                                         strmiids                                         iphlpapi) +    if (USE_BUGSPLAT) +        set_target_properties(llwebrtc PROPERTIES PDB_OUTPUT_DIRECTORY "${SYMBOLS_STAGING_DIR}") +    endif (USE_BUGSPLAT)  elseif (DARWIN)      target_link_libraries(llwebrtc PRIVATE ll::webrtc) +    if (USE_BUGSPLAT) +        set_target_properties(llwebrtc PROPERTIES XCODE_ATTRIBUTE_DEBUG_INFORMATION_FORMAT "dwarf-with-dsym" +                                                  XCODE_ATTRIBUTE_DWARF_DSYM_FOLDER_PATH "${SYMBOLS_STAGING_DIR}/dSYMs") +    endif (USE_BUGSPLAT)  elseif (LINUX)      target_link_libraries(llwebrtc PRIVATE ll::webrtc)  endif (WINDOWS) diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index b8a983fa9d..4c02a217cd 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -2219,8 +2219,6 @@ if (DARWIN)    set(VIEWER_APP_BUNDLE "${CMAKE_CURRENT_BINARY_DIR}/$<IF:$<BOOL:${LL_GENERATOR_IS_MULTI_CONFIG}>,$<CONFIG>,>/${product}.app")    set(VIEWER_APP_EXE "${VIEWER_APP_BUNDLE}/Contents/MacOS/${product}") -  set(VIEWER_APP_DSYM "${VIEWER_APP_EXE}.dSYM") -  set(VIEWER_APP_XCARCHIVE "${VIEWER_APP_BUNDLE}/../${product}.xcarchive.zip")    configure_file(       "${CMAKE_CURRENT_SOURCE_DIR}/Info-SecondLife.plist" @@ -2327,73 +2325,51 @@ if (INSTALL)    include(${CMAKE_CURRENT_SOURCE_DIR}/ViewerInstall.cmake)  endif (INSTALL) -# Note that the conventional VIEWER_SYMBOL_FILE is set by ../../build.sh  if (PACKAGE AND (RELEASE_CRASH_REPORTING OR NON_RELEASE_CRASH_REPORTING) AND VIEWER_SYMBOL_FILE)    if (USE_BUGSPLAT)      # BugSplat symbol-file generation      if (WINDOWS) -      # Just pack up a tarball containing only the .pdb file for the -      # executable. Because we intend to use cygwin tar, we must render -      # VIEWER_SYMBOL_FILE in cygwin path syntax. -      execute_process(COMMAND "cygpath" "-u" "${VIEWER_SYMBOL_FILE}" -        OUTPUT_VARIABLE VIEWER_SYMBOL_FILE_CYGWIN -        OUTPUT_STRIP_TRAILING_WHITESPACE) -      execute_process(COMMAND "cygpath" "-u" "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}" -        OUTPUT_VARIABLE PARENT_DIRECTORY_CYGWIN -        OUTPUT_STRIP_TRAILING_WHITESPACE) -      add_custom_command(OUTPUT "${VIEWER_SYMBOL_FILE}" -        # Use of 'tar ...j' here assumes VIEWER_SYMBOL_FILE endswith .tar.xz; -        # testing a string suffix is painful enough in CMake language that -        # we'll continue assuming it until forced to generalize. +      set(VIEWER_APP_SYMBOLS_ARCHIVE "${SYMBOLS_STAGING_DIR}.sym.tar.xz") +      set_target_properties( ${VIEWER_BINARY_NAME} PROPERTIES PDB_OUTPUT_DIRECTORY "${SYMBOLS_STAGING_DIR}") + +      # Just pack up a tarball containing only the .pdb files for the +      # executables. +      add_custom_command(OUTPUT "${VIEWER_APP_SYMBOLS_ARCHIVE}"          COMMAND "tar"          ARGS            "cJf" -          "${VIEWER_SYMBOL_FILE_CYGWIN}" -          "-C" -          "${PARENT_DIRECTORY_CYGWIN}" -          "secondlife-bin.pdb" -        DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/secondlife-bin.pdb" -        COMMENT "Packing viewer PDB into ${VIEWER_SYMBOL_FILE_CYGWIN}" +          "${VIEWER_CHANNEL}.sym.tar.xz" +          "${VIEWER_CHANNEL}" +        DEPENDS "${VIEWER_BINARY_NAME}" llwebrtc +        WORKING_DIRECTORY "${SYMBOLS_STAGING_DIR}/.." +        COMMENT "Packing viewer PDBs into ${VIEWER_APP_SYMBOLS_ARCHIVE}"          ) -      add_custom_target(generate_symbols DEPENDS "${VIEWER_SYMBOL_FILE}" ${VIEWER_BINARY_NAME}) -      add_dependencies(generate_symbols ${VIEWER_BINARY_NAME}) +      add_custom_target(generate_symbols DEPENDS "${VIEWER_APP_SYMBOLS_ARCHIVE}") +      add_dependencies(generate_symbols ${VIEWER_BINARY_NAME} llwebrtc) +      endif (WINDOWS)      if (DARWIN) -      # Have to run dsymutil first, then pack up the resulting .dSYM directory -      add_custom_command(OUTPUT "${VIEWER_APP_DSYM}" -        COMMAND "dsymutil" -        ARGS -          ${VIEWER_APP_EXE} -        COMMENT "Generating ${VIEWER_APP_DSYM}" -        ) -      add_custom_target(dsym_generate DEPENDS "${VIEWER_APP_DSYM}") -      add_dependencies(dsym_generate ${VIEWER_BINARY_NAME}) +      set(VIEWER_APP_XCARCHIVE "${SYMBOLS_STAGING_DIR}.xcarchive.zip") + +      # we only need an xcarchive with dSYMs (including the application) +      set_target_properties(${VIEWER_BINARY_NAME} +            PROPERTIES +            XCODE_ATTRIBUTE_DEBUG_INFORMATION_FORMAT "dwarf-with-dsym" +            XCODE_ATTRIBUTE_DWARF_DSYM_FOLDER_PATH "${SYMBOLS_STAGING_DIR}/dSYMs") +            add_custom_command(OUTPUT "${VIEWER_APP_XCARCHIVE}" -        COMMAND "zip" -        ARGS -          "-r" -          "${VIEWER_APP_XCARCHIVE}" -          "." -        WORKING_DIRECTORY "${VIEWER_APP_DSYM}/.." -        DEPENDS "${VIEWER_APP_DSYM}" -        COMMENT "Generating xcarchive.zip for upload to BugSplat" -        ) -      add_custom_target(dsym_xcarchive DEPENDS "${VIEWER_APP_XCARCHIVE}") -      add_dependencies(dsym_xcarchive dsym_generate) -      # Have to create a stamp file, and depend on it, to force CMake to run -      # the cleanup step. -      add_custom_command(OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/dsym.stamp" -        COMMAND rm -rf "${VIEWER_APP_DSYM}" -        COMMAND touch "${CMAKE_CURRENT_BINARY_DIR}/dsym.stamp" -        DEPENDS "${VIEWER_APP_XCARCHIVE}" -        COMMENT "Cleaning up dSYM" -        ) +          COMMAND "zip" +          ARGS +            "-r" +            "${VIEWER_APP_XCARCHIVE}" +            "${VIEWER_CHANNEL}" +          WORKING_DIRECTORY "${SYMBOLS_STAGING_DIR}/.." +          DEPENDS "${VIEWER_BINARY_NAME}" llwebrtc +          COMMENT "Generating ${VIEWER_APP_XCARCHIVE} for upload to BugSplat" +          )        add_custom_target(generate_symbols DEPENDS -        "${VIEWER_APP_DSYM}"          "${VIEWER_APP_XCARCHIVE}" -        "${CMAKE_CURRENT_BINARY_DIR}/dsym.stamp"          ) -      add_dependencies(generate_symbols dsym_xcarchive)      endif (DARWIN)      if (LINUX)        # TBD diff --git a/indra/newview/llenvironment.cpp b/indra/newview/llenvironment.cpp index 3c0a523317..5170e9a68b 100644 --- a/indra/newview/llenvironment.cpp +++ b/indra/newview/llenvironment.cpp @@ -54,8 +54,6 @@  #include "llregioninfomodel.h" -#include <boost/make_shared.hpp> -  #include "llatmosphere.h"  #include "llagent.h"  #include "roles_constants.h" diff --git a/indra/newview/lleventpoll.cpp b/indra/newview/lleventpoll.cpp index 471bb6d478..c05a7fef44 100644 --- a/indra/newview/lleventpoll.cpp +++ b/indra/newview/lleventpoll.cpp @@ -40,8 +40,6 @@  #include "llcorehttputil.h"  #include "lleventfilter.h" -#include "boost/make_shared.hpp" -  namespace LLEventPolling  {  namespace Details diff --git a/indra/newview/llfloatereditenvironmentbase.cpp b/indra/newview/llfloatereditenvironmentbase.cpp index 109c7a286c..e63032c0d8 100644 --- a/indra/newview/llfloatereditenvironmentbase.cpp +++ b/indra/newview/llfloatereditenvironmentbase.cpp @@ -28,8 +28,6 @@  #include "llfloatereditenvironmentbase.h" -#include <boost/make_shared.hpp> -  // libs  #include "llnotifications.h"  #include "llnotificationsutil.h" diff --git a/indra/newview/llfloaterfixedenvironment.cpp b/indra/newview/llfloaterfixedenvironment.cpp index ad9f83701c..fb26f1b872 100644 --- a/indra/newview/llfloaterfixedenvironment.cpp +++ b/indra/newview/llfloaterfixedenvironment.cpp @@ -28,8 +28,6 @@  #include "llfloaterfixedenvironment.h" -#include <boost/make_shared.hpp> -  // libs  #include "llbutton.h"  #include "llnotifications.h" diff --git a/indra/newview/lloutputmonitorctrl.cpp b/indra/newview/lloutputmonitorctrl.cpp index db43c57139..28433b36f4 100644 --- a/indra/newview/lloutputmonitorctrl.cpp +++ b/indra/newview/lloutputmonitorctrl.cpp @@ -126,29 +126,31 @@ void LLOutputMonitorCtrl::draw()      const F32 LEVEL_1 = LLVoiceClient::OVERDRIVEN_POWER_LEVEL * 2.f / 3.f;      const F32 LEVEL_2 = LLVoiceClient::OVERDRIVEN_POWER_LEVEL; +    LLVoiceClient* vocie_client = LLVoiceClient::getInstance(); +      if (getVisible() && mAutoUpdate && !getIsMuted() && mSpeakerId.notNull())      { -        setPower(LLVoiceClient::getInstance()->getCurrentPower(mSpeakerId)); +        setPower(vocie_client->getCurrentPower(mSpeakerId));          if(mIsAgentControl)          { -            setIsTalking(LLVoiceClient::getInstance()->getUserPTTState()); +            setIsTalking(vocie_client->getUserPTTState());          }          else          { -            setIsTalking(LLVoiceClient::getInstance()->getIsSpeaking(mSpeakerId)); +            setIsTalking(vocie_client->getIsSpeaking(mSpeakerId));          }      }      if ((mPower == 0.f && !mIsTalking) && mShowParticipantsSpeaking)      {          std::set<LLUUID> participant_uuids; -        LLVoiceClient::instance().getParticipantList(participant_uuids); +        vocie_client->getParticipantList(participant_uuids);          std::set<LLUUID>::const_iterator part_it = participant_uuids.begin();          F32 power = 0;          for (; part_it != participant_uuids.end(); ++part_it)          { -            power = LLVoiceClient::instance().getCurrentPower(*part_it); +            power = vocie_client->getCurrentPower(*part_it);              if (power)              {                  mPower = power; diff --git a/indra/newview/llsculptidsize.cpp b/indra/newview/llsculptidsize.cpp index 3bc5ad7616..6be05fb003 100644 --- a/indra/newview/llsculptidsize.cpp +++ b/indra/newview/llsculptidsize.cpp @@ -29,8 +29,6 @@  #include "llvovolume.h"  #include "lldrawable.h"  #include "llvoavatar.h" -//boost -#include "boost/make_shared.hpp"  //........... diff --git a/indra/newview/llselectmgr.h b/indra/newview/llselectmgr.h index 02c74d0ab0..0f9c76a2a1 100644 --- a/indra/newview/llselectmgr.h +++ b/indra/newview/llselectmgr.h @@ -48,7 +48,6 @@  #include <deque>  #include <boost/iterator/filter_iterator.hpp>  #include <boost/signals2.hpp> -#include <boost/make_shared.hpp>    // boost::make_shared  class LLMessageSystem;  class LLViewerTexture; diff --git a/indra/newview/llsettingsvo.cpp b/indra/newview/llsettingsvo.cpp index 76632a83ae..5008061ec8 100644 --- a/indra/newview/llsettingsvo.cpp +++ b/indra/newview/llsettingsvo.cpp @@ -33,7 +33,6 @@  #include <algorithm>  #include <cstdio> -#include <boost/make_shared.hpp>  #include "lltrace.h"  #include "llfasttimer.h"  #include "v3colorutil.h" diff --git a/indra/newview/llspeakers.cpp b/indra/newview/llspeakers.cpp index b12e8d15fc..cbccc79f4e 100644 --- a/indra/newview/llspeakers.cpp +++ b/indra/newview/llspeakers.cpp @@ -377,16 +377,17 @@ void LLSpeakerMgr::update(BOOL resort_ok)      }      // update status of all current speakers -    BOOL voice_channel_active = (!mVoiceChannel && LLVoiceClient::getInstance()->inProximalChannel()) || (mVoiceChannel && mVoiceChannel->isActive()); +    LLVoiceClient* voice_client = LLVoiceClient::getInstance(); +    bool voice_channel_active = (!mVoiceChannel && voice_client->inProximalChannel()) || (mVoiceChannel && mVoiceChannel->isActive());      for (speaker_map_t::iterator speaker_it = mSpeakers.begin(); speaker_it != mSpeakers.end(); speaker_it++)      {          LLUUID speaker_id = speaker_it->first;          LLSpeaker* speakerp = speaker_it->second; -        if (voice_channel_active && LLVoiceClient::getInstance()->getVoiceEnabled(speaker_id)) +        if (voice_channel_active && voice_client->getVoiceEnabled(speaker_id))          { -            speakerp->mSpeechVolume = LLVoiceClient::getInstance()->getCurrentPower(speaker_id); -            BOOL moderator_muted_voice = LLVoiceClient::getInstance()->getIsModeratorMuted(speaker_id); +            speakerp->mSpeechVolume = voice_client->getCurrentPower(speaker_id); +            BOOL moderator_muted_voice = voice_client->getIsModeratorMuted(speaker_id);              if (moderator_muted_voice != speakerp->mModeratorMutedVoice)              {                  speakerp->mModeratorMutedVoice = moderator_muted_voice; @@ -394,11 +395,11 @@ void LLSpeakerMgr::update(BOOL resort_ok)                  speakerp->fireEvent(new LLSpeakerVoiceModerationEvent(speakerp));              } -            if (LLVoiceClient::getInstance()->getOnMuteList(speaker_id) || speakerp->mModeratorMutedVoice) +            if (voice_client->getOnMuteList(speaker_id) || speakerp->mModeratorMutedVoice)              {                  speakerp->mStatus = LLSpeaker::STATUS_MUTED;              } -            else if (LLVoiceClient::getInstance()->getIsSpeaking(speaker_id)) +            else if (voice_client->getIsSpeaking(speaker_id))              {                  // reset inactivity expiration                  if (speakerp->mStatus != LLSpeaker::STATUS_SPEAKING) @@ -481,17 +482,18 @@ void LLSpeakerMgr::update(BOOL resort_ok)  void LLSpeakerMgr::updateSpeakerList()  {      // Are we bound to the currently active voice channel? -    if ((!mVoiceChannel && LLVoiceClient::getInstance()->inProximalChannel()) || (mVoiceChannel && mVoiceChannel->isActive())) +    LLVoiceClient* vocie_client = LLVoiceClient::getInstance(); +    if ((!mVoiceChannel && vocie_client->inProximalChannel()) || (mVoiceChannel && mVoiceChannel->isActive()))      {          std::set<LLUUID> participants; -        LLVoiceClient::getInstance()->getParticipantList(participants); +        vocie_client->getParticipantList(participants);          // If we are, add all voice client participants to our list of known speakers          for (std::set<LLUUID>::iterator participant_it = participants.begin(); participant_it != participants.end(); ++participant_it)          {                  setSpeaker(*participant_it, -                           LLVoiceClient::getInstance()->getDisplayName(*participant_it), +                    vocie_client->getDisplayName(*participant_it),                             LLSpeaker::STATUS_VOICE_ACTIVE, -                           (LLVoiceClient::getInstance()->isParticipantAvatar(*participant_it)?LLSpeaker::SPEAKER_AGENT:LLSpeaker::SPEAKER_EXTERNAL)); +                           (vocie_client->isParticipantAvatar(*participant_it)?LLSpeaker::SPEAKER_AGENT:LLSpeaker::SPEAKER_EXTERNAL));          }      }      else if (mVoiceChannel) diff --git a/indra/newview/llvoicechannel.cpp b/indra/newview/llvoicechannel.cpp index 5a9c0d103f..9b144048f7 100644 --- a/indra/newview/llvoicechannel.cpp +++ b/indra/newview/llvoicechannel.cpp @@ -187,13 +187,13 @@ void LLVoiceChannel::handleError(EStatusType type)      setState(STATE_ERROR);  } -BOOL LLVoiceChannel::isActive() +bool LLVoiceChannel::isActive() const  {      // only considered active when currently bound channel matches what our channel      return callStarted() && LLVoiceClient::getInstance()->isCurrentChannel(mChannelInfo);  } -BOOL LLVoiceChannel::callStarted() +bool LLVoiceChannel::callStarted() const  {      return mState >= STATE_CALL_STARTED;  } @@ -662,7 +662,7 @@ LLVoiceChannelProximal::LLVoiceChannelProximal() :  {  } -BOOL LLVoiceChannelProximal::isActive() +bool LLVoiceChannelProximal::isActive() const  {      return callStarted() && LLVoiceClient::getInstance()->inProximalChannel();  } diff --git a/indra/newview/llvoicechannel.h b/indra/newview/llvoicechannel.h index eb16cc22ba..46a3f552cb 100644 --- a/indra/newview/llvoicechannel.h +++ b/indra/newview/llvoicechannel.h @@ -74,8 +74,8 @@ public:      virtual void activate();      virtual void setChannelInfo(const LLSD &channelInfo);      virtual void requestChannelInfo(); -    virtual BOOL isActive(); -    virtual BOOL callStarted(); +    virtual bool isActive() const; +    virtual bool callStarted() const;      // Session name is a UI label used for feedback about which person,      // group, or phone number you are talking to @@ -170,7 +170,7 @@ class LLVoiceChannelProximal : public LLVoiceChannel, public LLSingleton<LLVoice      void onChange(EStatusType status, const LLSD &channelInfo, bool proximal) override;      void handleStatusChange(EStatusType status) override;      void handleError(EStatusType status) override; -    BOOL isActive() override; +    bool isActive() const override;      void activate() override;      void deactivate() override;  }; diff --git a/indra/newview/llvoiceclient.cpp b/indra/newview/llvoiceclient.cpp index 44bf445522..e36b086f00 100644 --- a/indra/newview/llvoiceclient.cpp +++ b/indra/newview/llvoiceclient.cpp @@ -462,7 +462,7 @@ const LLVoiceDeviceList& LLVoiceClient::getRenderDevices()  //--------------------------------------------------  // participants -void LLVoiceClient::getParticipantList(std::set<LLUUID> &participants) +void LLVoiceClient::getParticipantList(std::set<LLUUID> &participants) const  {  #if !__FreeBSD__      LLWebRTCVoiceClient::getInstance()->getParticipantList(participants); @@ -470,7 +470,7 @@ void LLVoiceClient::getParticipantList(std::set<LLUUID> &participants)      LLVivoxVoiceClient::getInstance()->getParticipantList(participants);  } -bool LLVoiceClient::isParticipant(const LLUUID &speaker_id) +bool LLVoiceClient::isParticipant(const LLUUID &speaker_id) const  {      return  #if !__FreeBSD__ @@ -791,12 +791,12 @@ void LLVoiceClient::toggleUserPTTState(void)  //-------------------------------------------  // nearby speaker accessors -BOOL LLVoiceClient::getVoiceEnabled(const LLUUID& id) +bool LLVoiceClient::getVoiceEnabled(const LLUUID& id) const  { -    return isParticipant(id) ? TRUE : FALSE; +    return isParticipant(id);  } -std::string LLVoiceClient::getDisplayName(const LLUUID& id) +std::string LLVoiceClient::getDisplayName(const LLUUID& id) const  {  #if __FreeBSD__      return LLVivoxVoiceClient::getInstance()->getDisplayName(id); diff --git a/indra/newview/llvoiceclient.h b/indra/newview/llvoiceclient.h index c8a65378c6..fdc00a98e8 100644 --- a/indra/newview/llvoiceclient.h +++ b/indra/newview/llvoiceclient.h @@ -133,7 +133,7 @@ class LLVoiceP2PIncomingCallInterface      virtual void declineInvite() = 0;  }; -typedef boost::shared_ptr<LLVoiceP2PIncomingCallInterface> LLVoiceP2PIncomingCallInterfacePtr; +typedef std::shared_ptr<LLVoiceP2PIncomingCallInterface> LLVoiceP2PIncomingCallInterfacePtr;  //////////////////////////////////  /// @class LLVoiceModuleInterface @@ -452,8 +452,8 @@ public:      /////////////////////////////      // Accessors for data related to nearby speakers -    BOOL getVoiceEnabled(const LLUUID& id);     // true if we've received data for this avatar -    std::string getDisplayName(const LLUUID& id); +    bool getVoiceEnabled(const LLUUID& id) const;     // true if we've received data for this avatar +    std::string getDisplayName(const LLUUID& id) const;      BOOL isOnlineSIP(const LLUUID &id);      BOOL isParticipantAvatar(const LLUUID &id);      BOOL getIsSpeaking(const LLUUID& id); @@ -463,8 +463,8 @@ public:      F32 getUserVolume(const LLUUID& id);      ///////////////////////////// -    void getParticipantList(std::set<LLUUID> &participants); -    bool isParticipant(const LLUUID& speaker_id); +    void getParticipantList(std::set<LLUUID> &participants) const; +    bool isParticipant(const LLUUID& speaker_id) const;      //////////////////////////      /// @name text chat diff --git a/indra/newview/llvoicevivox.cpp b/indra/newview/llvoicevivox.cpp index 673f26b13b..6860c61c0e 100644 --- a/indra/newview/llvoicevivox.cpp +++ b/indra/newview/llvoicevivox.cpp @@ -2159,7 +2159,6 @@ bool LLVivoxVoiceClient::runSession(const sessionStatePtr_t &session)      mIsInChannel = true;      mMuteMicDirty = true; -    mSessionTerminateRequested = false;      while (!sShuttingDown             && mVoiceEnabled @@ -4984,7 +4983,7 @@ void LLVivoxVoiceClient::hangup() { leaveChannel(); }  LLVoiceP2PIncomingCallInterfacePtr LLVivoxVoiceClient::getIncomingCallInterface(const LLSD &voice_call_info)  { -    return boost::make_shared<LLVivoxVoiceP2PIncomingCall>(voice_call_info); +    return std::make_shared<LLVivoxVoiceP2PIncomingCall>(voice_call_info);  }  bool LLVivoxVoiceClient::answerInvite(const std::string &sessionHandle) @@ -5445,8 +5444,8 @@ void LLVivoxVoiceClient::leaveChannel(void)      {          LL_DEBUGS("Voice") << "leaving channel for teleport/logout" << LL_ENDL;          mChannelName.clear(); -        sessionTerminate();      } +    sessionTerminate();  }  void LLVivoxVoiceClient::setMuteMic(bool muted) diff --git a/indra/newview/llvoicewebrtc.cpp b/indra/newview/llvoicewebrtc.cpp index c963fdc633..452a362674 100644 --- a/indra/newview/llvoicewebrtc.cpp +++ b/indra/newview/llvoicewebrtc.cpp @@ -461,6 +461,7 @@ void LLWebRTCVoiceClient::voiceConnectionCoro()              // Could help with voice updates making for smoother              // voice when we're busy.              llcoro::suspendUntilTimeout(UPDATE_THROTTLE_SECONDS); +            if (sShuttingDown) return; // 'this' migh already be invalid              bool voiceEnabled = mVoiceEnabled;              if (!isAgentAvatarValid()) @@ -1254,7 +1255,7 @@ void LLWebRTCVoiceClient::sessionState::removeParticipant(const LLWebRTCVoiceCli                  LLWebRTCVoiceClient::getInstance()->notifyParticipantObservers();              }          } -        if (mHangupOnLastLeave && (participantID != gAgentID) && (mParticipantsByUUID.size() <= 1)) +        if (mHangupOnLastLeave && (participantID != gAgentID) && (mParticipantsByUUID.size() <= 1) && LLWebRTCVoiceClient::instanceExists())          {              LLWebRTCVoiceClient::getInstance()->notifyStatusObservers(LLVoiceClientStatusObserver::STATUS_LEFT_CHANNEL);          } @@ -1965,8 +1966,8 @@ bool LLWebRTCVoiceClient::estateSessionState::processConnectionStates()          for (auto &connection : mWebRTCConnections)          { -            boost::shared_ptr<LLVoiceWebRTCSpatialConnection> spatialConnection = -                boost::static_pointer_cast<LLVoiceWebRTCSpatialConnection>(connection); +            std::shared_ptr<LLVoiceWebRTCSpatialConnection> spatialConnection = +                std::static_pointer_cast<LLVoiceWebRTCSpatialConnection>(connection);              LLUUID regionID = spatialConnection.get()->getRegionID(); @@ -2188,47 +2189,47 @@ void LLVoiceWebRTCConnection::processIceUpdates()  {      mOutstandingRequests++;      LLCoros::getInstance()->launch("LLVoiceWebRTCConnection::processIceUpdatesCoro", -                                   boost::bind(&LLVoiceWebRTCConnection::processIceUpdatesCoro, this)); +                                   boost::bind(&LLVoiceWebRTCConnection::processIceUpdatesCoro, this->shared_from_this()));  }  // Ice candidates may be streamed in before or after the SDP offer is available (see below)  // This function determines whether candidates are available to send to the Secondlife WebRTC  // server via the simulator.  If so, and there are no more candidates, this code  // will make the cap call to the server sending up the ICE candidates. -void LLVoiceWebRTCConnection::processIceUpdatesCoro() +void LLVoiceWebRTCConnection::processIceUpdatesCoro(connectionPtr_t connection)  {      LL_PROFILE_ZONE_SCOPED_CATEGORY_VOICE -    if (mShutDown || LLWebRTCVoiceClient::isShuttingDown()) +    if (connection->mShutDown || LLWebRTCVoiceClient::isShuttingDown())      { -        mOutstandingRequests--; +        connection->mOutstandingRequests--;          return;      } -    //bool iceCompleted = false; +    bool iceCompleted = false;      LLSD body; -    if (!mIceCandidates.empty() || mIceCompleted) +    if (!connection->mIceCandidates.empty() || connection->mIceCompleted)      { -        LLViewerRegion *regionp = LLWorld::instance().getRegionFromID(mRegionID); +        LLViewerRegion *regionp = LLWorld::instance().getRegionFromID(connection->mRegionID);          if (!regionp || !regionp->capabilitiesReceived())          {              LL_DEBUGS("Voice") << "no capabilities for ice gathering; waiting " << LL_ENDL; -            mOutstandingRequests--; +            connection->mOutstandingRequests--;              return;          }          std::string url = regionp->getCapability("VoiceSignalingRequest");          if (url.empty())          { -            mOutstandingRequests--; +            connection->mOutstandingRequests--;              return;          }          LL_DEBUGS("Voice") << "region ready to complete voice signaling; url=" << url << LL_ENDL; -        if (!mIceCandidates.empty()) +        if (!connection->mIceCandidates.empty())          {              LLSD candidates = LLSD::emptyArray(); -            for (auto &ice_candidate : mIceCandidates) +            for (auto &ice_candidate : connection->mIceCandidates)              {                  LLSD body_candidate;                  body_candidate["sdpMid"]        = ice_candidate.mSdpMid; @@ -2237,18 +2238,18 @@ void LLVoiceWebRTCConnection::processIceUpdatesCoro()                  candidates.append(body_candidate);              }              body["candidates"] = candidates; -            mIceCandidates.clear(); +            connection->mIceCandidates.clear();          } -        else if (mIceCompleted) +        else if (connection->mIceCompleted)          {              LLSD body_candidate;              body_candidate["completed"] = true;              body["candidate"]           = body_candidate; -            //iceCompleted                = mIceCompleted; -            mIceCompleted               = false; +            iceCompleted                = connection->mIceCompleted; +            connection->mIceCompleted   = false;          } -        body["viewer_session"]    = mViewerSession; +        body["viewer_session"]    = connection->mViewerSession;          body["voice_server_type"] = WEBRTC_VOICE_SERVER_TYPE;          LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t httpAdapter( @@ -2263,7 +2264,7 @@ void LLVoiceWebRTCConnection::processIceUpdatesCoro()          if (LLWebRTCVoiceClient::isShuttingDown())          { -            mOutstandingRequests--; +            connection->mOutstandingRequests--;              return;          } @@ -2273,10 +2274,10 @@ void LLVoiceWebRTCConnection::processIceUpdatesCoro()          if (!status)          {              // couldn't trickle the candidates, so restart the session. -            setVoiceConnectionState(VOICE_STATE_SESSION_RETRY); +            connection->setVoiceConnectionState(VOICE_STATE_SESSION_RETRY);          }      } -    mOutstandingRequests--; +    connection->mOutstandingRequests--;  } @@ -2430,31 +2431,31 @@ void LLVoiceWebRTCConnection::sendData(const std::string &data)  // Tell the simulator that we're shutting down a voice connection.  // The simulator will pass this on to the Secondlife WebRTC server. -void LLVoiceWebRTCConnection::breakVoiceConnectionCoro() +void LLVoiceWebRTCConnection::breakVoiceConnectionCoro(connectionPtr_t connection)  {      LL_PROFILE_ZONE_SCOPED_CATEGORY_VOICE      LL_DEBUGS("Voice") << "Disconnecting voice." << LL_ENDL; -    if (mWebRTCDataInterface) +    if (connection->mWebRTCDataInterface)      { -        mWebRTCDataInterface->unsetDataObserver(this); -        mWebRTCDataInterface = nullptr; +        connection->mWebRTCDataInterface->unsetDataObserver(connection.get()); +        connection->mWebRTCDataInterface = nullptr;      } -    mWebRTCAudioInterface   = nullptr; -    LLViewerRegion *regionp = LLWorld::instance().getRegionFromID(mRegionID); +    connection->mWebRTCAudioInterface   = nullptr; +    LLViewerRegion *regionp = LLWorld::instance().getRegionFromID(connection->mRegionID);      if (!regionp || !regionp->capabilitiesReceived())      {          LL_DEBUGS("Voice") << "no capabilities for voice provisioning; waiting " << LL_ENDL; -        setVoiceConnectionState(VOICE_STATE_SESSION_RETRY); -        mOutstandingRequests--; +        connection->setVoiceConnectionState(VOICE_STATE_SESSION_RETRY); +        connection->mOutstandingRequests--;          return;      }      std::string url = regionp->getCapability("ProvisionVoiceAccountRequest");      if (url.empty())      { -        setVoiceConnectionState(VOICE_STATE_SESSION_RETRY); -        mOutstandingRequests--; +        connection->setVoiceConnectionState(VOICE_STATE_SESSION_RETRY); +        connection->mOutstandingRequests--;          return;      } @@ -2463,7 +2464,7 @@ void LLVoiceWebRTCConnection::breakVoiceConnectionCoro()      LLVoiceWebRTCStats::getInstance()->provisionAttemptStart();      LLSD body;      body["logout"]         = TRUE; -    body["viewer_session"] = mViewerSession; +    body["viewer_session"] = connection->mViewerSession;      body["voice_server_type"] = WEBRTC_VOICE_SERVER_TYPE;      LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t httpAdapter( @@ -2474,15 +2475,15 @@ void LLVoiceWebRTCConnection::breakVoiceConnectionCoro()      httpOpts->setWantHeaders(true); -    mOutstandingRequests++; +    connection->mOutstandingRequests++;      // tell the server to shut down the connection as a courtesy.      // shutdownConnection will drop the WebRTC connection which will      // also shut things down.      LLSD result = httpAdapter->postAndSuspend(httpRequest, url, body, httpOpts); -    mOutstandingRequests--; -    setVoiceConnectionState(VOICE_STATE_SESSION_EXIT); +    connection->mOutstandingRequests--; +    connection->setVoiceConnectionState(VOICE_STATE_SESSION_EXIT);  }  // Tell the simulator to tell the Secondlife WebRTC server that we want a voice @@ -2666,7 +2667,7 @@ bool LLVoiceWebRTCConnection::connectionStateMachine()              // VOICE_STATE_SESSION_ESTABLISHED via a callback on a webrtc thread.              setVoiceConnectionState(VOICE_STATE_CONNECTION_WAIT);              LLCoros::getInstance()->launch("LLVoiceWebRTCConnection::requestVoiceConnectionCoro", -                                           boost::bind(&LLVoiceWebRTCConnection::requestVoiceConnectionCoro, this)); +                                           boost::bind(&LLVoiceWebRTCConnection::requestVoiceConnectionCoro, this->shared_from_this()));              break;          case VOICE_STATE_CONNECTION_WAIT: @@ -2746,7 +2747,7 @@ bool LLVoiceWebRTCConnection::connectionStateMachine()          case VOICE_STATE_DISCONNECT:              setVoiceConnectionState(VOICE_STATE_WAIT_FOR_EXIT);              LLCoros::instance().launch("LLVoiceWebRTCConnection::breakVoiceConnectionCoro", -                                       boost::bind(&LLVoiceWebRTCConnection::breakVoiceConnectionCoro, this)); +                                       boost::bind(&LLVoiceWebRTCConnection::breakVoiceConnectionCoro, this->shared_from_this()));              break;          case VOICE_STATE_WAIT_FOR_EXIT: diff --git a/indra/newview/llvoicewebrtc.h b/indra/newview/llvoicewebrtc.h index 8a65ef667c..f4ea329cb6 100644 --- a/indra/newview/llvoicewebrtc.h +++ b/indra/newview/llvoicewebrtc.h @@ -55,7 +55,7 @@ class LLWebRTCProtocolParser;  class LLAvatarName;  class LLVoiceWebRTCConnection; -typedef boost::shared_ptr<LLVoiceWebRTCConnection> connectionPtr_t; +typedef std::shared_ptr<LLVoiceWebRTCConnection> connectionPtr_t;  extern const std::string WEBRTC_VOICE_SERVER_TYPE; @@ -252,7 +252,7 @@ public:          bool mIsModeratorMuted;          LLUUID mRegion;      }; -    typedef boost::shared_ptr<participantState> participantStatePtr_t; +    typedef std::shared_ptr<participantState> participantStatePtr_t;      participantStatePtr_t findParticipantByID(const std::string &channelID, const LLUUID &id);      participantStatePtr_t addParticipantByID(const std::string& channelID, const LLUUID &id, const LLUUID& region); @@ -265,10 +265,10 @@ public:      class sessionState      {      public: -        typedef boost::shared_ptr<sessionState> ptr_t; -        typedef boost::weak_ptr<sessionState> wptr_t; +        typedef std::shared_ptr<sessionState> ptr_t; +        typedef std::weak_ptr<sessionState> wptr_t; -        typedef boost::function<void(const ptr_t &)> sessionFunc_t; +        typedef std::function<void(const ptr_t &)> sessionFunc_t;          static void addSession(const std::string &channelID, ptr_t& session);          virtual ~sessionState(); @@ -336,7 +336,7 @@ public:                                        sessionFunc_t func);      }; -    typedef boost::shared_ptr<sessionState> sessionStatePtr_t; +    typedef std::shared_ptr<sessionState> sessionStatePtr_t;      typedef std::map<std::string, sessionStatePtr_t> sessionMap;      class estateSessionState : public sessionState @@ -576,7 +576,8 @@ class LLVoiceWebRTCStats : public LLSingleton<LLVoiceWebRTCStats>  class LLVoiceWebRTCConnection :      public llwebrtc::LLWebRTCSignalingObserver, -    public llwebrtc::LLWebRTCDataObserver +    public llwebrtc::LLWebRTCDataObserver, +    public std::enable_shared_from_this<LLVoiceWebRTCConnection>  {    public:      LLVoiceWebRTCConnection(const LLUUID ®ionID, const std::string &channelID); @@ -610,7 +611,7 @@ class LLVoiceWebRTCConnection :      void processIceUpdates(); -    void processIceUpdatesCoro(); +    static void processIceUpdatesCoro(connectionPtr_t connection);      virtual void setMuteMic(bool muted);      virtual void setSpeakerVolume(F32 volume); @@ -677,9 +678,9 @@ class LLVoiceWebRTCConnection :      }      virtual void requestVoiceConnection() = 0; -    void requestVoiceConnectionCoro() { requestVoiceConnection(); } +    static void requestVoiceConnectionCoro(connectionPtr_t connection) { connection->requestVoiceConnection(); } -    void breakVoiceConnectionCoro(); +    static void breakVoiceConnectionCoro(connectionPtr_t connection);      LLVoiceClientStatusObserver::EStatusType mCurrentStatus; diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index 2403082938..e9a67fb707 100644 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -8839,6 +8839,7 @@ New Voice Morphs are available!  Voice Morphs are not supported by this viewer.  For more information about other voice morph tools, see [[FAQ_URL] this article].      <usetemplate +        ignoretext="Warn me about voice morph not being supported"          name="okignore"          yestext="OK"/>      <tag>voice</tag> | 
