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.
master
Ansariel 2018-06-30 15:41:05 +02:00
parent 5e4fa5e117
commit 5586c0e160
4 changed files with 79 additions and 23 deletions

View File

@ -167,6 +167,34 @@
</map>
</map>
</map>
<key>slvoice_os</key>
<map>
<key>copyright</key>
<string>2010 Vivox, including audio coding using Polycom¨ Siren14TM (ITU-T Rec. G.722.1 Annex C)</string>
<key>description</key>
<string>Vivox SDK components compatible with OpenSim</string>
<key>license</key>
<string>Mixed</string>
<key>license_file</key>
<string>LICENSES/slvoice_os.txt</string>
<key>name</key>
<string>slvoice_os</string>
<key>platforms</key>
<map>
<key>windows</key>
<map>
<key>archive</key>
<map>
<key>hash</key>
<string>9676f61f3e32dfce50550004be559519</string>
<key>url</key>
<uri>http://downloads.phoenixviewer.com/slvoice_os-4.6.0017.21209.500605-windows-500605.tar.bz2</uri>
</map>
<key>name</key>
<string>windows</string>
</map>
</map>
</map>
<key>SDL</key>
<map>
<key>copyright</key>

View File

@ -8,6 +8,13 @@ if (NOT USESYSTEMLIBS)
endif (LINUX)
use_prebuilt_binary(libhunspell)
use_prebuilt_binary(slvoice)
# <FS:Ansariel> FIRE-22709: Local voice not working in OpenSim
if (OPENSIM)
if (WINDOWS)
use_prebuilt_binary(slvoice_os)
endif (WINDOWS)
endif (OPENSIM)
# </FS:Ansariel>
# use_prebuilt_binary(libidn)
endif(NOT USESYSTEMLIBS)

View File

@ -812,6 +812,14 @@ bool LLVivoxVoiceClient::startAndLaunchDaemon()
std::string exe_path = gDirUtilp->getExecutableDir();
exe_path += gDirUtilp->getDirDelimiter();
#if LL_WINDOWS
// <FS:Ansariel> FIRE-22709: Local voice not working in OpenSim
#ifdef OPENSIM
if (!LLGridManager::instance().isInSecondLife())
{
exe_path += "voice_os" + gDirUtilp->getDirDelimiter();
}
#endif
// </FS:Ansariel>
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;
// <FS:ND> On Linux the viewer can run SLVoice.exe through wine (https://www.winehq.org/)
// <FS:ND> 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 );
}
//</FS:ND>
std::string loglevel = gSavedSettings.getString("VivoxDebugLevel");
if (loglevel.empty())
{
@ -858,12 +866,12 @@ bool LLVivoxVoiceClient::startAndLaunchDaemon()
log_folder = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, "");
}
// <FS:Ansariel> Strip trailing directory delimiter
if (LLStringUtil::endsWith(log_folder, gDirUtilp->getDirDelimiter()))
{
log_folder = log_folder.substr(0, log_folder.size() - gDirUtilp->getDirDelimiter().size());
}
// </FS:Ansariel>
// <FS:Ansariel> Strip trailing directory delimiter
if (LLStringUtil::endsWith(log_folder, gDirUtilp->getDirDelimiter()))
{
log_folder = log_folder.substr(0, log_folder.size() - gDirUtilp->getDirDelimiter().size());
}
// </FS:Ansariel>
params.args.add("-lf");
params.args.add(log_folder);
@ -874,20 +882,19 @@ bool LLVivoxVoiceClient::startAndLaunchDaemon()
params.args.add(shutdown_timeout);
}
// <FS:Ansariel> 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")));
}
}
// </FS:Ansariel>
// <FS:Ansariel> 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")));
}
}
// </FS:Ansariel>
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
} // <FS:ND/>
} // <FS:ND/>
params.postend = sGatewayPump.getName();
sGatewayPump.listen("VivoxDaemonPump", boost::bind(&LLVivoxVoiceClient::callbackEndDaemon, this, _1));

View File

@ -804,6 +804,20 @@ class WindowsManifest(ViewerManifest):
self.path("msvcp120.dll")
self.path("msvcr120.dll")
# <FS:Ansariel> 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")
# </FS:Ansariel>
if not self.is_packaging_viewer():
self.package_file = "copied_deps"