diff --git a/autobuild.xml b/autobuild.xml
index 3504bb0252..b3280f9e52 100644
--- a/autobuild.xml
+++ b/autobuild.xml
@@ -167,6 +167,34 @@
+ slvoice_os
+
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"