diff options
| -rwxr-xr-x | .hgtags | 1 | ||||
| -rw-r--r-- | autobuild.xml | 10 | ||||
| -rw-r--r-- | indra/llcommon/llfile.cpp | 9 | ||||
| -rw-r--r-- | indra/llcommon/llfile.h | 1 | ||||
| -rw-r--r-- | indra/llui/llspellcheck.cpp | 5 | ||||
| -rw-r--r-- | indra/llvfs/lldir.cpp | 11 | ||||
| -rw-r--r-- | indra/llvfs/lldir.h | 25 | ||||
| -rw-r--r-- | indra/llvfs/lldir_linux.cpp | 28 | ||||
| -rw-r--r-- | indra/llvfs/lldir_solaris.cpp | 28 | ||||
| -rw-r--r-- | indra/llvfs/lldir_win32.cpp | 128 | ||||
| -rw-r--r-- | indra/media_plugins/libvlc/media_plugin_libvlc.cpp | 55 | ||||
| -rw-r--r-- | indra/newview/VIEWER_VERSION.txt | 2 | ||||
| -rw-r--r-- | indra/newview/llappviewer.cpp | 10 | ||||
| -rw-r--r-- | indra/newview/llpresetsmanager.cpp | 10 | ||||
| -rw-r--r-- | indra/newview/lltexturecache.cpp | 8 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/mime_types.xml | 2 | ||||
| -rwxr-xr-x | indra/newview/viewer_manifest.py | 8 | ||||
| -rw-r--r-- | indra/test/CMakeLists.txt | 4 | 
18 files changed, 170 insertions, 175 deletions
| @@ -531,3 +531,4 @@ b4d76b5590fdf8bab72c64442353753a527cbc44 5.0.5-release  abcab37e1b29414ab8c03af9ca2ab489d809788a 5.0.7-release  505a492f30bd925bb48e2e093ae77c3c2b4c740f 5.0.8-release  40ca7118765be85a043b31b011e4ee6bd9e33c95 5.0.9-release +ad0e15543836d64d6399d28b32852510435e344a 5.1.0-release diff --git a/autobuild.xml b/autobuild.xml index 5ea349e55d..c90ffe493c 100644 --- a/autobuild.xml +++ b/autobuild.xml @@ -3231,9 +3231,9 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>              <key>archive</key>              <map>                <key>hash</key> -              <string>a1cc313f9238316a514b8d3056f86b31</string> +              <string>c4d56d3e942169661a598035a9fbd533</string>                <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/11774/68078/viewer_manager-1.0.511462-darwin64-511462.tar.bz2</string> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/12112/71187/viewer_manager-1.0.511688-darwin64-511688.tar.bz2</string>              </map>              <key>name</key>              <string>darwin64</string> @@ -3255,9 +3255,9 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>              <key>archive</key>              <map>                <key>hash</key> -              <string>73894a49bd63e06adc0e365efae6e03e</string> +              <string>61f324d880eaa303669b99e28e6cf64c</string>                <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/11775/68084/viewer_manager-1.0.511462-windows-511462.tar.bz2</string> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/12113/71193/viewer_manager-1.0.511688-windows-511688.tar.bz2</string>              </map>              <key>name</key>              <string>windows</string> @@ -3268,7 +3268,7 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>          <key>source_type</key>          <string>hg</string>          <key>version</key> -        <string>1.0.511462</string> +        <string>1.0.511688</string>        </map>        <key>vlc-bin</key>        <map> diff --git a/indra/llcommon/llfile.cpp b/indra/llcommon/llfile.cpp index 7b559861bb..8aa41035b9 100644 --- a/indra/llcommon/llfile.cpp +++ b/indra/llcommon/llfile.cpp @@ -182,7 +182,14 @@ int	LLFile::mkdir(const std::string& dirname, int perms)  	int rc = ::mkdir(dirname.c_str(), (mode_t)perms);  #endif  	// We often use mkdir() to ensure the existence of a directory that might -	// already exist. Don't spam the log if it does. +	// already exist. There is no known case in which we want to call out as +	// an error the requested directory already existing. +	if (rc < 0 && errno == EEXIST) +	{ +		// this is not the error you want, move along +		return 0; +	} +	// anything else might be a problem  	return warnif("mkdir", dirname, rc, EEXIST);  } diff --git a/indra/llcommon/llfile.h b/indra/llcommon/llfile.h index 37eb75881c..ba935b8714 100644 --- a/indra/llcommon/llfile.h +++ b/indra/llcommon/llfile.h @@ -69,6 +69,7 @@ public:  	// perms is a permissions mask like 0777 or 0700.  In most cases it will  	// be overridden by the user's umask.  It is ignored on Windows. +	// mkdir() considers "directory already exists" to be SUCCESS.  	static	int		mkdir(const std::string& filename, int perms = 0700);  	static	int		rmdir(const std::string& filename); diff --git a/indra/llui/llspellcheck.cpp b/indra/llui/llspellcheck.cpp index 5a52600337..7f64743e99 100644 --- a/indra/llui/llspellcheck.cpp +++ b/indra/llui/llspellcheck.cpp @@ -406,10 +406,7 @@ const std::string LLSpellChecker::getDictionaryAppPath()  const std::string LLSpellChecker::getDictionaryUserPath()  {  	std::string dict_path = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, DICT_DIR, ""); -	if (!gDirUtilp->fileExists(dict_path)) -	{ -		LLFile::mkdir(dict_path); -	} +	LLFile::mkdir(dict_path);  	return dict_path;  } diff --git a/indra/llvfs/lldir.cpp b/indra/llvfs/lldir.cpp index b845de71fa..2069888774 100644 --- a/indra/llvfs/lldir.cpp +++ b/indra/llvfs/lldir.cpp @@ -597,7 +597,7 @@ std::string LLDir::getExpandedFilename(ELLPath location, const std::string& subd  				<< "': prefix is empty, possible bad filename" << LL_ENDL;  	} -	std::string expanded_filename = add(add(prefix, subdir1), subdir2); +	std::string expanded_filename = add(prefix, subdir1, subdir2);  	if (expanded_filename.empty() && in_filename.empty())  	{  		return ""; @@ -693,7 +693,7 @@ void LLDir::walkSearchSkinDirs(const std::string& subdir,  		std::string subdir_path(add(skindir, subdir));  		BOOST_FOREACH(std::string subsubdir, subsubdirs)  		{ -			std::string full_path(add(add(subdir_path, subsubdir), filename)); +			std::string full_path(add(subdir_path, subsubdir, filename));  			if (fileExists(full_path))  			{  				function(subsubdir, full_path); @@ -1052,13 +1052,6 @@ void LLDir::dumpCurrentDirectories()  	LL_DEBUGS("AppInit","Directories") << "  SkinDir:               " << getSkinDir() << LL_ENDL;  } -std::string LLDir::add(const std::string& path, const std::string& name) const -{ -	std::string destpath(path); -	append(destpath, name); -	return destpath; -} -  void LLDir::append(std::string& destpath, const std::string& name) const  {  	// Delegate question of whether we need a separator to helper method. diff --git a/indra/llvfs/lldir.h b/indra/llvfs/lldir.h index b219c6e29f..e233413a7f 100644 --- a/indra/llvfs/lldir.h +++ b/indra/llvfs/lldir.h @@ -202,9 +202,28 @@ class LLDir  	/// Append specified @a name to @a destpath, separated by getDirDelimiter()  	/// if both are non-empty.  	void append(std::string& destpath, const std::string& name) const; -	/// Append specified @a name to @a path, separated by getDirDelimiter() -	/// if both are non-empty. Return result, leaving @a path unmodified. -	std::string add(const std::string& path, const std::string& name) const; +	/// Variadic form: append @a name0 and @a name1 and arbitrary other @a +	/// names to @a destpath, separated by getDirDelimiter() as needed. +	template <typename... NAMES> +	void append(std::string& destpath, const std::string& name0, const std::string& name1, +				const NAMES& ... names) const +	{ +		// In a typical recursion case, we'd accept (destpath, name0, names). +		// We accept (destpath, name0, name1, names) because it's important to +		// delegate the two-argument case to the non-template implementation. +		append(destpath, name0); +		append(destpath, name1, names...); +	} + +	/// Append specified @a names to @a path, separated by getDirDelimiter() +	/// as needed. Return result, leaving @a path unmodified. +	template <typename... NAMES> +	std::string add(const std::string& path, const NAMES& ... names) const +	{ +		std::string destpath(path); +		append(destpath, names...); +		return destpath; +	}  protected:  	// Does an add() or append() call need a directory delimiter? diff --git a/indra/llvfs/lldir_linux.cpp b/indra/llvfs/lldir_linux.cpp index 7a4034c228..a9f3166d41 100644 --- a/indra/llvfs/lldir_linux.cpp +++ b/indra/llvfs/lldir_linux.cpp @@ -185,41 +185,29 @@ void LLDir_Linux::initAppDirs(const std::string &app_name,  	int res = LLFile::mkdir(mOSUserAppDir);  	if (res == -1)  	{ -		if (errno != EEXIST) -		{ -			LL_WARNS() << "Couldn't create app user dir " << mOSUserAppDir << LL_ENDL; -			LL_WARNS() << "Default to base dir" << mOSUserDir << LL_ENDL; -			mOSUserAppDir = mOSUserDir; -		} +		LL_WARNS() << "Couldn't create app user dir " << mOSUserAppDir << LL_ENDL; +		LL_WARNS() << "Default to base dir" << mOSUserDir << LL_ENDL; +		mOSUserAppDir = mOSUserDir;  	}  	res = LLFile::mkdir(getExpandedFilename(LL_PATH_LOGS,""));  	if (res == -1)  	{ -		if (errno != EEXIST) -		{ -			LL_WARNS() << "Couldn't create LL_PATH_LOGS dir " << getExpandedFilename(LL_PATH_LOGS,"") << LL_ENDL; -		} +		LL_WARNS() << "Couldn't create LL_PATH_LOGS dir " << getExpandedFilename(LL_PATH_LOGS,"") << LL_ENDL;  	}  	res = LLFile::mkdir(getExpandedFilename(LL_PATH_USER_SETTINGS,""));  	if (res == -1)  	{ -		if (errno != EEXIST) -		{ -			LL_WARNS() << "Couldn't create LL_PATH_USER_SETTINGS dir " << getExpandedFilename(LL_PATH_USER_SETTINGS,"") << LL_ENDL; -		} +		LL_WARNS() << "Couldn't create LL_PATH_USER_SETTINGS dir " << getExpandedFilename(LL_PATH_USER_SETTINGS,"") << LL_ENDL;  	} -	 +  	res = LLFile::mkdir(getExpandedFilename(LL_PATH_CACHE,""));  	if (res == -1)  	{ -		if (errno != EEXIST) -		{ -			LL_WARNS() << "Couldn't create LL_PATH_CACHE dir " << getExpandedFilename(LL_PATH_CACHE,"") << LL_ENDL; -		} +		LL_WARNS() << "Couldn't create LL_PATH_CACHE dir " << getExpandedFilename(LL_PATH_CACHE,"") << LL_ENDL;  	} -	 +  	mCAFile = getExpandedFilename(LL_PATH_APP_SETTINGS, "CA.pem");  } diff --git a/indra/llvfs/lldir_solaris.cpp b/indra/llvfs/lldir_solaris.cpp index b43b2f27ce..d60237bacc 100644 --- a/indra/llvfs/lldir_solaris.cpp +++ b/indra/llvfs/lldir_solaris.cpp @@ -203,41 +203,29 @@ void LLDir_Solaris::initAppDirs(const std::string &app_name,  	int res = LLFile::mkdir(mOSUserAppDir);  	if (res == -1)  	{ -		if (errno != EEXIST) -		{ -			LL_WARNS() << "Couldn't create app user dir " << mOSUserAppDir << LL_ENDL; -			LL_WARNS() << "Default to base dir" << mOSUserDir << LL_ENDL; -			mOSUserAppDir = mOSUserDir; -		} +		LL_WARNS() << "Couldn't create app user dir " << mOSUserAppDir << LL_ENDL; +		LL_WARNS() << "Default to base dir" << mOSUserDir << LL_ENDL; +		mOSUserAppDir = mOSUserDir;  	}  	res = LLFile::mkdir(getExpandedFilename(LL_PATH_LOGS,""));  	if (res == -1)  	{ -		if (errno != EEXIST) -		{ -			LL_WARNS() << "Couldn't create LL_PATH_LOGS dir " << getExpandedFilename(LL_PATH_LOGS,"") << LL_ENDL; -		} +		LL_WARNS() << "Couldn't create LL_PATH_LOGS dir " << getExpandedFilename(LL_PATH_LOGS,"") << LL_ENDL;  	}  	res = LLFile::mkdir(getExpandedFilename(LL_PATH_USER_SETTINGS,""));  	if (res == -1)  	{ -		if (errno != EEXIST) -		{ -			LL_WARNS() << "Couldn't create LL_PATH_USER_SETTINGS dir " << getExpandedFilename(LL_PATH_USER_SETTINGS,"") << LL_ENDL; -		} +		LL_WARNS() << "Couldn't create LL_PATH_USER_SETTINGS dir " << getExpandedFilename(LL_PATH_USER_SETTINGS,"") << LL_ENDL;  	} -	 +  	res = LLFile::mkdir(getExpandedFilename(LL_PATH_CACHE,""));  	if (res == -1)  	{ -		if (errno != EEXIST) -		{ -			LL_WARNS() << "Couldn't create LL_PATH_CACHE dir " << getExpandedFilename(LL_PATH_CACHE,"") << LL_ENDL; -		} +		LL_WARNS() << "Couldn't create LL_PATH_CACHE dir " << getExpandedFilename(LL_PATH_CACHE,"") << LL_ENDL;  	} -	 +  	mCAFile = getExpandedFilename(LL_PATH_APP_SETTINGS, "CA.pem");  } diff --git a/indra/llvfs/lldir_win32.cpp b/indra/llvfs/lldir_win32.cpp index 4d8aa0e189..5485349c83 100644 --- a/indra/llvfs/lldir_win32.cpp +++ b/indra/llvfs/lldir_win32.cpp @@ -32,10 +32,7 @@  #include "llerror.h"  #include "llrand.h"		// for gLindenLabRandomNumber  #include <shlobj.h> -#include <Knownfolders.h> -#include <iostream> -#include <map> -#include <Objbase.h>                // CoTaskMemFree() +#include <fstream>  #include <direct.h>  #include <errno.h> @@ -46,47 +43,15 @@  #define PACKVERSION(major,minor) MAKELONG(minor,major)  DWORD GetDllVersion(LPCTSTR lpszDllName); -namespace { - -std::string getKnownFolderPath(const std::string& desc, REFKNOWNFOLDERID folderid) -{ -    // https://msdn.microsoft.com/en-us/library/windows/desktop/bb762188(v=vs.85).aspx -    PWSTR wstrptr = 0; -    HRESULT result = SHGetKnownFolderPath( -        folderid, -        KF_FLAG_DEFAULT,            // no flags -        NULL,                       // current user, no impersonation -        &wstrptr); -    if (result == S_OK) -    { -        std::string utf8 = utf16str_to_utf8str(llutf16string(wstrptr)); -        // have to free the returned pointer after copying its data -        CoTaskMemFree(wstrptr); -        return utf8; -    } - -    // gack, no logging yet! -    // at least say something to a developer trying to debug this... -    static std::map<HRESULT, const char*> codes -    { -        { E_FAIL, "E_FAIL; known folder does not have a path?" }, -        { E_INVALIDARG, "E_INVALIDARG; not present on system?" } -    }; -    auto found = codes.find(result); -    const char* text = (found == codes.end())? "unknown" : found->second; -    std::cout << "*** SHGetKnownFolderPath(" << desc << ") failed with " -              << result << " (" << text << ")\n"; -    return {}; -} - -} // anonymous namespace -  LLDir_Win32::LLDir_Win32()  { +	// set this first: used by append() and add() methods  	mDirDelimiter = "\\"; -	// Application Data is where user settings go -	mOSUserDir = getKnownFolderPath("RoamingAppData", FOLDERID_RoamingAppData); +	// Application Data is where user settings go. We rely on $APPDATA being +	// correct; in fact the VMP makes a point of setting it properly, since +	// Windows itself botches the job for non-ASCII usernames (MAINT-8087). +	mOSUserDir = ll_safe_string(getenv("APPDATA"));  	// We want cache files to go on the local disk, even if the  	// user is on a network with a "roaming profile". @@ -96,7 +61,7 @@ LLDir_Win32::LLDir_Win32()  	//  	// We used to store the cache in AppData\Roaming, and the installer  	// cleans up that version on upgrade.  JC -	mOSCacheDir = getKnownFolderPath("LocalAppData", FOLDERID_LocalAppData); +	mOSCacheDir = ll_safe_string(getenv("LOCALAPPDATA"));  	WCHAR w_str[MAX_PATH];  	if (GetTempPath(MAX_PATH, w_str)) @@ -122,6 +87,38 @@ LLDir_Win32::LLDir_Win32()  		mTempDir = mOSUserDir;  	} +/*==========================================================================*| +	// Now that we've got mOSUserDir, one way or another, let's see how we did +	// with our environment variables. +	{ +		auto report = [this](std::ostream& out){ +			out << "mOSUserDir  = '" << mOSUserDir  << "'\n" +				<< "mOSCacheDir = '" << mOSCacheDir << "'\n" +				<< "mTempDir    = '" << mTempDir    << "'" << std::endl; +		}; +		int res = LLFile::mkdir(mOSUserDir); +		if (res == -1) +		{ +			// If we couldn't even create the directory, just blurt to stderr +			report(std::cerr); +		} +		else +		{ +			// successfully created logdir, plunk a log file there +			std::string logfilename(add(mOSUserDir, "lldir.log")); +			std::ofstream logfile(logfilename.c_str()); +			if (! logfile.is_open()) +			{ +				report(std::cerr); +			} +			else +			{ +				report(logfile); +			} +		} +	} +|*==========================================================================*/ +  //	fprintf(stderr, "mTempDir = <%s>",mTempDir);  	// Set working directory, for LLDir::getWorkingDir() @@ -167,7 +164,7 @@ LLDir_Win32::LLDir_Win32()  	// 'llplugin' need to go somewhere else.  	// alas... this also gets called during static initialization   	// time due to the construction of gDirUtil in lldir.cpp. -	if(! LLFile::isdir(mAppRODataDir + mDirDelimiter + "skins")) +	if(! LLFile::isdir(add(mAppRODataDir, "skins")))  	{  		// What? No skins in the working dir?  		// Try the executable's directory. @@ -176,7 +173,7 @@ LLDir_Win32::LLDir_Win32()  //	LL_INFOS() << "mAppRODataDir = " << mAppRODataDir << LL_ENDL; -	mSkinBaseDir = mAppRODataDir + mDirDelimiter + "skins"; +	mSkinBaseDir = add(mAppRODataDir, "skins");  	// Build the default cache directory  	mDefaultCacheDir = buildSLOSCacheDir(); @@ -185,13 +182,10 @@ LLDir_Win32::LLDir_Win32()  	int res = LLFile::mkdir(mDefaultCacheDir);  	if (res == -1)  	{ -		if (errno != EEXIST) -		{ -			LL_WARNS() << "Couldn't create LL_PATH_CACHE dir " << mDefaultCacheDir << LL_ENDL; -		} +		LL_WARNS() << "Couldn't create LL_PATH_CACHE dir " << mDefaultCacheDir << LL_ENDL;  	} -	mLLPluginDir = mExecutableDir + mDirDelimiter + "llplugin"; +	mLLPluginDir = add(mExecutableDir, "llplugin");  }  LLDir_Win32::~LLDir_Win32() @@ -207,52 +201,38 @@ void LLDir_Win32::initAppDirs(const std::string &app_name,  	if (!app_read_only_data_dir.empty())  	{  		mAppRODataDir = app_read_only_data_dir; -		mSkinBaseDir = mAppRODataDir + mDirDelimiter + "skins"; +		mSkinBaseDir = add(mAppRODataDir, "skins");  	}  	mAppName = app_name; -	mOSUserAppDir = mOSUserDir; -	mOSUserAppDir += "\\"; -	mOSUserAppDir += app_name; +	mOSUserAppDir = add(mOSUserDir, app_name);  	int res = LLFile::mkdir(mOSUserAppDir);  	if (res == -1)  	{ -		if (errno != EEXIST) -		{ -			LL_WARNS() << "Couldn't create app user dir " << mOSUserAppDir << LL_ENDL; -			LL_WARNS() << "Default to base dir" << mOSUserDir << LL_ENDL; -			mOSUserAppDir = mOSUserDir; -		} +		LL_WARNS() << "Couldn't create app user dir " << mOSUserAppDir << LL_ENDL; +		LL_WARNS() << "Default to base dir" << mOSUserDir << LL_ENDL; +		mOSUserAppDir = mOSUserDir;  	}  	//dumpCurrentDirectories();  	res = LLFile::mkdir(getExpandedFilename(LL_PATH_LOGS,""));  	if (res == -1)  	{ -		if (errno != EEXIST) -		{ -			LL_WARNS() << "Couldn't create LL_PATH_LOGS dir " << getExpandedFilename(LL_PATH_LOGS,"") << LL_ENDL; -		} +		LL_WARNS() << "Couldn't create LL_PATH_LOGS dir " << getExpandedFilename(LL_PATH_LOGS,"") << LL_ENDL;  	} -	 +  	res = LLFile::mkdir(getExpandedFilename(LL_PATH_USER_SETTINGS,""));  	if (res == -1)  	{ -		if (errno != EEXIST) -		{ -			LL_WARNS() << "Couldn't create LL_PATH_USER_SETTINGS dir " << getExpandedFilename(LL_PATH_USER_SETTINGS,"") << LL_ENDL; -		} +		LL_WARNS() << "Couldn't create LL_PATH_USER_SETTINGS dir " << getExpandedFilename(LL_PATH_USER_SETTINGS,"") << LL_ENDL;  	} -	 +  	res = LLFile::mkdir(getExpandedFilename(LL_PATH_CACHE,""));  	if (res == -1)  	{ -		if (errno != EEXIST) -		{ -			LL_WARNS() << "Couldn't create LL_PATH_CACHE dir " << getExpandedFilename(LL_PATH_CACHE,"") << LL_ENDL; -		} +		LL_WARNS() << "Couldn't create LL_PATH_CACHE dir " << getExpandedFilename(LL_PATH_CACHE,"") << LL_ENDL;  	} -	 +  	mCAFile = getExpandedFilename(LL_PATH_APP_SETTINGS, "CA.pem");  } diff --git a/indra/media_plugins/libvlc/media_plugin_libvlc.cpp b/indra/media_plugins/libvlc/media_plugin_libvlc.cpp index 048e7675f8..80702a1079 100644 --- a/indra/media_plugins/libvlc/media_plugin_libvlc.cpp +++ b/indra/media_plugins/libvlc/media_plugin_libvlc.cpp @@ -37,6 +37,11 @@  #include "vlc/vlc.h"  #include "vlc/libvlc_version.h" +#if LL_WINDOWS +// needed for waveOut call - see below for description +#include <mmsystem.h> +#endif +  ////////////////////////////////////////////////////////////////////////////////  //  class MediaPluginLibVLC : @@ -55,6 +60,7 @@ private:  	void playMedia();  	void resetVLC();  	void setVolume(const F64 volume); +	void setVolumeVLC();  	void updateTitle(const char* title);  	static void* lock(void* data, void** p_pixels); @@ -221,6 +227,7 @@ void MediaPluginLibVLC::eventCallbacks(const libvlc_event_t* event, void* ptr)  	case libvlc_MediaPlayerPlaying:  		parent->mDuration = (float)(libvlc_media_get_duration(parent->mLibVLCMedia)) / 1000.0f;  		parent->mVlcStatus = STATUS_PLAYING; +		parent->setVolumeVLC();  		break;  	case libvlc_MediaPlayerPaused: @@ -394,30 +401,60 @@ void MediaPluginLibVLC::updateTitle(const char* title)  	sendMessage(message);  } -//////////////////////////////////////////////////////////////////////////////// -// -void MediaPluginLibVLC::setVolume(const F64 volume) +void MediaPluginLibVLC::setVolumeVLC()  { -	mCurVolume = volume; -  	if (mLibVLCMediaPlayer)  	{ -		int result = libvlc_audio_set_volume(mLibVLCMediaPlayer, (int)(volume * 100)); -		if (result != 0) +		int vlc_vol = (int)(mCurVolume * 100); + +		int result = libvlc_audio_set_volume(mLibVLCMediaPlayer, vlc_vol); +		if (result == 0) +		{ +			// volume change was accepted by LibVLC +		} +		else  		{ -			// volume wasn't set but not much to be done here +			// volume change was NOT accepted by LibVLC and not actioned  		} + +#if LL_WINDOWS +		// https ://jira.secondlife.com/browse/MAINT-8119 +		// CEF media plugin uses code in media_plugins/cef/windows_volume_catcher.cpp to +		// set the actual output volume of the plugin process since there is no API in  +		// CEF to otherwise do this. +		// There are explicit calls to change the volume in LibVLC but sometimes they +		// are ignored SLPlugin.exe process volume is set to 0 so you never heard audio +		// from the VLC media stream. +		// The right way to solve this is to move the volume catcher stuff out of  +		// the CEF plugin and into it's own folder under media_plugins and have it referenced +		// by both CEF and VLC. That's for later. The code there boils down to this so for  +                // now, as we approach a release, the less risky option is to do it directly vs +                // calls to volume catcher code. +		DWORD left_channel = (DWORD)(mCurVolume * 65535.0f); +		DWORD right_channel = (DWORD)(mCurVolume * 65535.0f); +		DWORD hw_volume = left_channel << 16 | right_channel; +		waveOutSetVolume(NULL, hw_volume); +#endif  	}  	else  	{  		// volume change was requested but VLC wasn't ready. -		// that's okay thought because we saved the value in mCurVolume and  +		// that's okay though because we saved the value in mCurVolume and   		// the next volume change after the VLC system is initilzied  will set it  	}  }  ////////////////////////////////////////////////////////////////////////////////  // +void MediaPluginLibVLC::setVolume(const F64 volume) +{ +	mCurVolume = volume; + +	setVolumeVLC(); +} + +//////////////////////////////////////////////////////////////////////////////// +//  void MediaPluginLibVLC::receiveMessage(const char* message_string)  {  	LLPluginMessage message_in; diff --git a/indra/newview/VIEWER_VERSION.txt b/indra/newview/VIEWER_VERSION.txt index 831446cbd2..ac14c3dfaa 100644 --- a/indra/newview/VIEWER_VERSION.txt +++ b/indra/newview/VIEWER_VERSION.txt @@ -1 +1 @@ -5.1.0 +5.1.1 diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 087a672d69..b33b3a6410 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -4136,10 +4136,7 @@ void dumpVFSCaches()  	S32 res = LLFile::mkdir("StaticVFSDump");  	if (res == -1)  	{ -		if (errno != EEXIST) -		{ -			LL_WARNS() << "Couldn't create dir StaticVFSDump" << LL_ENDL; -		} +		LL_WARNS() << "Couldn't create dir StaticVFSDump" << LL_ENDL;  	}  	SetCurrentDirectory(utf8str_to_utf16str("StaticVFSDump").c_str());  	gStaticVFS->dumpFiles(); @@ -4153,10 +4150,7 @@ void dumpVFSCaches()  	res = LLFile::mkdir("VFSDump");  	if (res == -1)  	{ -		if (errno != EEXIST) -		{ -			LL_WARNS() << "Couldn't create dir VFSDump" << LL_ENDL; -		} +		LL_WARNS() << "Couldn't create dir VFSDump" << LL_ENDL;  	}  	SetCurrentDirectory(utf8str_to_utf16str("VFSDump").c_str());  	gVFS->dumpFiles(); diff --git a/indra/newview/llpresetsmanager.cpp b/indra/newview/llpresetsmanager.cpp index 76d721ecdc..96818d5a21 100644 --- a/indra/newview/llpresetsmanager.cpp +++ b/indra/newview/llpresetsmanager.cpp @@ -78,16 +78,10 @@ std::string LLPresetsManager::getPresetsDir(const std::string& subdirectory)  	std::string presets_path = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, PRESETS_DIR);  	std::string full_path; -	if (!gDirUtilp->fileExists(presets_path)) -	{ -		LLFile::mkdir(presets_path); -	} +	LLFile::mkdir(presets_path);  	full_path = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, PRESETS_DIR, subdirectory); -	if (!gDirUtilp->fileExists(full_path)) -	{ -		LLFile::mkdir(full_path); -	} +	LLFile::mkdir(full_path);  	return full_path;  } diff --git a/indra/newview/lltexturecache.cpp b/indra/newview/lltexturecache.cpp index 435d833345..371da5d0a2 100644 --- a/indra/newview/lltexturecache.cpp +++ b/indra/newview/lltexturecache.cpp @@ -1054,11 +1054,11 @@ S64 LLTextureCache::initCache(ELLPath location, S64 max_size, BOOL texture_cache  			return max_size ;  		}  	} -	 +  	if (!mReadOnly)  	{  		LLFile::mkdir(mTexturesDirName); -		 +  		const char* subdirs = "0123456789abcdef";  		for (S32 i=0; i<16; i++)  		{ @@ -1602,11 +1602,11 @@ void LLTextureCache::clearCorruptedCache()  	closeHeaderEntriesFile();//close possible file handler  	purgeAllTextures(false) ; //clear the cache. -	 +  	if (!mReadOnly) //regenerate the directory tree if not exists.  	{  		LLFile::mkdir(mTexturesDirName); -		 +  		const char* subdirs = "0123456789abcdef";  		for (S32 i=0; i<16; i++)  		{ diff --git a/indra/newview/skins/default/xui/en/mime_types.xml b/indra/newview/skins/default/xui/en/mime_types.xml index 8a810f32a6..de9ac4247f 100644 --- a/indra/newview/skins/default/xui/en/mime_types.xml +++ b/indra/newview/skins/default/xui/en/mime_types.xml @@ -526,7 +526,7 @@  			movie  		</widgettype>  		<impl> -			media_plugin_cef +			media_plugin_libvlc  		</impl>  	</mimetype>  </mimetypes> diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index f930e8b2ce..e0c332681e 100755 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -689,10 +689,10 @@ class WindowsManifest(ViewerManifest):              self.path("zh-CN.pak")              self.path("zh-TW.pak") -            with self.prefix(src=os.path.join(pkgdir, 'bin', 'release'), dst="llplugin"): -                self.path("libvlc.dll") -                self.path("libvlccore.dll") -                self.path("plugins/") +        with self.prefix(src=os.path.join(pkgdir, 'bin', 'release'), dst="llplugin"): +            self.path("libvlc.dll") +            self.path("libvlccore.dll") +            self.path("plugins/")          # pull in the crash logger and updater from other projects          # tag:"crash-logger" here as a cue to the exporter diff --git a/indra/test/CMakeLists.txt b/indra/test/CMakeLists.txt index 3f12431acc..8344cead57 100644 --- a/indra/test/CMakeLists.txt +++ b/indra/test/CMakeLists.txt @@ -73,9 +73,6 @@ if (NOT WINDOWS)    list(APPEND test_SOURCE_FILES         llmessagetemplateparser_tut.cpp         ) -  set(EXTRA_WINDOWS_LIBRARIES "") -else (NOT WINDOWS) -  set(EXTRA_WINDOWS_LIBRARIES ole32)  endif (NOT WINDOWS)  set_source_files_properties(${test_HEADER_FILES} @@ -99,7 +96,6 @@ target_link_libraries(lltest      ${GOOGLEMOCK_LIBRARIES}      ${PTHREAD_LIBRARY}      ${WINDOWS_LIBRARIES} -    ${EXTRA_WINDOWS_LIBRARIES}      ${BOOST_PROGRAM_OPTIONS_LIBRARY}      ${BOOST_REGEX_LIBRARY}      ${BOOST_COROUTINE_LIBRARY} | 
