From 5586c0e1600aa39be7d765e2124d5edf0c0f4dfe Mon Sep 17 00:00:00 2001 From: Ansariel Date: Sat, 30 Jun 2018 15:41:05 +0200 Subject: [PATCH] FIRE-22709: Fix for local voice not working in OpenSim on Windows Use re-bundled Vivox voice SDK version 4.6.0017.21209 from previous release when logging into OpenSim since the updated version 4.9.0002.27586 is apparently incompatible with OpenSim. Use new version only for Second Life. --- autobuild.xml | 28 +++++++++++++++++ indra/cmake/ViewerMiscLibs.cmake | 7 +++++ indra/newview/llvoicevivox.cpp | 53 ++++++++++++++++++-------------- indra/newview/viewer_manifest.py | 14 +++++++++ 4 files changed, 79 insertions(+), 23 deletions(-) diff --git a/autobuild.xml b/autobuild.xml index 3504bb0252..b3280f9e52 100644 --- a/autobuild.xml +++ b/autobuild.xml @@ -167,6 +167,34 @@ + slvoice_os + + copyright + 2010 Vivox, including audio coding using Polycom¨ Siren14TM (ITU-T Rec. G.722.1 Annex C) + description + Vivox SDK components compatible with OpenSim + license + Mixed + license_file + LICENSES/slvoice_os.txt + name + slvoice_os + platforms + + windows + + archive + + hash + 9676f61f3e32dfce50550004be559519 + url + http://downloads.phoenixviewer.com/slvoice_os-4.6.0017.21209.500605-windows-500605.tar.bz2 + + name + windows + + + SDL copyright diff --git a/indra/cmake/ViewerMiscLibs.cmake b/indra/cmake/ViewerMiscLibs.cmake index 980b2a0fdc..5b55c557dc 100644 --- a/indra/cmake/ViewerMiscLibs.cmake +++ b/indra/cmake/ViewerMiscLibs.cmake @@ -8,6 +8,13 @@ if (NOT USESYSTEMLIBS) endif (LINUX) use_prebuilt_binary(libhunspell) use_prebuilt_binary(slvoice) + # FIRE-22709: Local voice not working in OpenSim + if (OPENSIM) + if (WINDOWS) + use_prebuilt_binary(slvoice_os) + endif (WINDOWS) + endif (OPENSIM) + # # use_prebuilt_binary(libidn) endif(NOT USESYSTEMLIBS) diff --git a/indra/newview/llvoicevivox.cpp b/indra/newview/llvoicevivox.cpp index 8bebcb058d..26df5713f8 100644 --- a/indra/newview/llvoicevivox.cpp +++ b/indra/newview/llvoicevivox.cpp @@ -812,6 +812,14 @@ bool LLVivoxVoiceClient::startAndLaunchDaemon() std::string exe_path = gDirUtilp->getExecutableDir(); exe_path += gDirUtilp->getDirDelimiter(); #if LL_WINDOWS + // FIRE-22709: Local voice not working in OpenSim +#ifdef OPENSIM + if (!LLGridManager::instance().isInSecondLife()) + { + exe_path += "voice_os" + gDirUtilp->getDirDelimiter(); + } +#endif + // exe_path += "SLVoice.exe"; #elif LL_DARWIN exe_path += "../Resources/SLVoice"; @@ -831,7 +839,7 @@ bool LLVivoxVoiceClient::startAndLaunchDaemon() // vivox executable exists. Build the command line and launch the daemon. LLProcess::Params params; - // On Linux the viewer can run SLVoice.exe through wine (https://www.winehq.org/) + // On Linux the viewer can run SLVoice.exe through wine (https://www.winehq.org/) params.executable = exe_path; if( !viewerUsesWineForVoice() ) @@ -842,7 +850,7 @@ bool LLVivoxVoiceClient::startAndLaunchDaemon() params.args.add( exe_path ); } // - + std::string loglevel = gSavedSettings.getString("VivoxDebugLevel"); if (loglevel.empty()) { @@ -858,12 +866,12 @@ bool LLVivoxVoiceClient::startAndLaunchDaemon() log_folder = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, ""); } - // Strip trailing directory delimiter - if (LLStringUtil::endsWith(log_folder, gDirUtilp->getDirDelimiter())) - { - log_folder = log_folder.substr(0, log_folder.size() - gDirUtilp->getDirDelimiter().size()); - } - // + // Strip trailing directory delimiter + if (LLStringUtil::endsWith(log_folder, gDirUtilp->getDirDelimiter())) + { + log_folder = log_folder.substr(0, log_folder.size() - gDirUtilp->getDirDelimiter().size()); + } + // params.args.add("-lf"); params.args.add(log_folder); @@ -874,20 +882,19 @@ bool LLVivoxVoiceClient::startAndLaunchDaemon() params.args.add(shutdown_timeout); } - // Voice in multiple instances; by Latif Khalifa - if (gSavedSettings.getBOOL("VoiceMultiInstance")) - { - S32 port_nr = 30000 + ll_rand(20000); - LLControlVariable* voice_port = gSavedSettings.getControl("VivoxVoicePort"); - if (voice_port) - { - voice_port->setValue(LLSD(port_nr), false); - params.args.add("-i"); - params.args.add(llformat("127.0.0.1:%u", gSavedSettings.getU32("VivoxVoicePort"))); - } - } - // - + // Voice in multiple instances; by Latif Khalifa + if (gSavedSettings.getBOOL("VoiceMultiInstance")) + { + S32 port_nr = 30000 + ll_rand(20000); + LLControlVariable* voice_port = gSavedSettings.getControl("VivoxVoicePort"); + if (voice_port) + { + voice_port->setValue(LLSD(port_nr), false); + params.args.add("-i"); + params.args.add(llformat("127.0.0.1:%u", gSavedSettings.getU32("VivoxVoicePort"))); + } + } + // params.cwd = gDirUtilp->getAppRODataDir(); @@ -900,7 +907,7 @@ bool LLVivoxVoiceClient::startAndLaunchDaemon() params.args.add("-ch"); params.args.add(LLVivoxSecurity::getInstance()->connectorHandle()); # endif // VIVOX_HANDLE_ARGS - } // + } // params.postend = sGatewayPump.getName(); sGatewayPump.listen("VivoxDaemonPump", boost::bind(&LLVivoxVoiceClient::callbackEndDaemon, this, _1)); diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index cdcc89e557..6bc3903438 100755 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -804,6 +804,20 @@ class WindowsManifest(ViewerManifest): self.path("msvcp120.dll") self.path("msvcr120.dll") + # FIRE-22709: Local voice not working in OpenSim + if self.fs_flavor() == 'oss': + with self.prefix(src=os.path.join(relpkgdir, 'voice_os'), dst="voice_os"): + self.path("libsndfile-1.dll") + self.path("ortp.dll") + self.path("SLVoice.exe") + self.path("vivoxoal.dll") + self.path("vivoxplatform.dll") + self.path("vivoxsdk.dll") + self.path("zlib1.dll") + with self.prefix(src=pkgdir, dst="voice_os"): + self.path("ca-bundle.crt") + # + if not self.is_packaging_viewer(): self.package_file = "copied_deps"