diff options
Diffstat (limited to 'indra')
| -rwxr-xr-x | indra/cmake/Copy3rdPartyLibs.cmake | 4 | ||||
| -rw-r--r-- | indra/cmake/FMODEX.cmake | 2 | ||||
| -rw-r--r-- | indra/llaudio/llaudioengine_fmodex.cpp | 25 | ||||
| -rw-r--r-- | indra/llaudio/llaudioengine_fmodex.h | 4 | ||||
| -rwxr-xr-x | indra/media_plugins/winmmshim/winmm_shim.cpp | 76 | ||||
| -rw-r--r-- | indra/newview/VIEWER_VERSION.txt | 2 | ||||
| -rw-r--r-- | indra/newview/llfloatersocial.cpp | 22 | ||||
| -rw-r--r-- | indra/newview/llfloatersocial.h | 1 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/panel_social_photo.xml | 8 | ||||
| -rwxr-xr-x | indra/newview/viewer_manifest.py | 17 | 
10 files changed, 84 insertions, 77 deletions
| diff --git a/indra/cmake/Copy3rdPartyLibs.cmake b/indra/cmake/Copy3rdPartyLibs.cmake index 44c2d3ac27..f98e88b697 100755 --- a/indra/cmake/Copy3rdPartyLibs.cmake +++ b/indra/cmake/Copy3rdPartyLibs.cmake @@ -64,6 +64,7 @@ if(WINDOWS)      endif(USE_TCMALLOC)      if (FMODEX) +      set(debug_files ${debug_files} fmodexL.dll)        set(release_files ${release_files} fmodex.dll)      endif (FMODEX) @@ -294,7 +295,8 @@ elseif(LINUX)      endif (USE_TCMALLOC)      if (FMODEX) -      set(release_file ${release_files} "libfmodex.so") +      set(debug_files ${debug_files} "libfmodexL.so") +      set(release_files ${release_files} "libfmodex.so")      endif (FMODEX)  else(WINDOWS) diff --git a/indra/cmake/FMODEX.cmake b/indra/cmake/FMODEX.cmake index 65bc1cabeb..163260137b 100644 --- a/indra/cmake/FMODEX.cmake +++ b/indra/cmake/FMODEX.cmake @@ -39,7 +39,7 @@ if (FMODEX)              optimized fmodex)        endif (WINDOWS)        set(FMODEX_LIBRARIES ${FMODEX_LIBRARY}) -      set(FMODEX_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include/fmodex) +      set(FMODEX_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include/)      endif (FMODEX_LIBRARY AND FMODEX_INCLUDE_DIR)    endif (STANDALONE)  endif (FMODEX) diff --git a/indra/llaudio/llaudioengine_fmodex.cpp b/indra/llaudio/llaudioengine_fmodex.cpp index 6bbabbed5a..7e65a05e48 100644 --- a/indra/llaudio/llaudioengine_fmodex.cpp +++ b/indra/llaudio/llaudioengine_fmodex.cpp @@ -5,7 +5,7 @@   *   * $LicenseInfo:firstyear=2002&license=viewerlgpl$   * Second Life Viewer Source Code - * Copyright (C) 2010, Linden Research, Inc. + * Copyright (C) 2014, Linden Research, Inc.   *    * This library is free software; you can redistribute it and/or   * modify it under the terms of the GNU Lesser General Public @@ -55,11 +55,13 @@ LLAudioEngine_FMODEX::LLAudioEngine_FMODEX(bool enable_profiler)  	mWindDSP = NULL;  	mSystem = NULL;  	mEnableProfiler = enable_profiler; +	mWindDSPDesc = new FMOD_DSP_DESCRIPTION();  }  LLAudioEngine_FMODEX::~LLAudioEngine_FMODEX()  { +	delete mWindDSPDesc;  } @@ -320,8 +322,8 @@ void LLAudioEngine_FMODEX::shutdown()  	LL_INFOS() << "LLAudioEngine_FMODEX::shutdown() closing FMOD Ex" << LL_ENDL;  	if ( mSystem ) // speculative fix for MAINT-2657  	{ -	mSystem->close(); -	mSystem->release(); +		mSystem->close(); +		mSystem->release();  	}  	LL_INFOS() << "LLAudioEngine_FMODEX::shutdown() done closing FMOD Ex" << LL_ENDL; @@ -347,15 +349,14 @@ bool LLAudioEngine_FMODEX::initWind()  	if (!mWindDSP)  	{ -		FMOD_DSP_DESCRIPTION dspdesc; -		memset(&dspdesc, 0, sizeof(FMOD_DSP_DESCRIPTION));	//Set everything to zero -		strncpy(dspdesc.name,"Wind Unit", sizeof(dspdesc.name));	//Set name to "Wind Unit" -		dspdesc.channels=2; -		dspdesc.read = &windCallback; //Assign callback. -		if(Check_FMOD_Error(mSystem->createDSP(&dspdesc, &mWindDSP), "FMOD::createDSP")) +		memset(mWindDSPDesc, 0, sizeof(*mWindDSPDesc));	//Set everything to zero +		strncpy(mWindDSPDesc->name, "Wind Unit", sizeof(mWindDSPDesc->name)); +		mWindDSPDesc->channels = 2; +		mWindDSPDesc->read = &windCallback; // Assign callback - may be called from arbitrary threads +		if (Check_FMOD_Error(mSystem->createDSP(mWindDSPDesc, &mWindDSP), "FMOD::createDSP"))  			return false; -		if(mWindGen) +		if (mWindGen)  			delete mWindGen;  		float frequency = 44100; @@ -364,6 +365,7 @@ bool LLAudioEngine_FMODEX::initWind()  		mWindDSP->setUserData((void*)mWindGen);  	} +	// *TODO:  Should this guard against multiple plays?  	if (mWindDSP)  	{  		mSystem->playDSP(FMOD_CHANNEL_FREE, mWindDSP, false, 0); @@ -741,6 +743,9 @@ void LLAudioChannelFMODEX::set3DMode(bool use3d)  	}  } +// *NOTE:  This is almost certainly being called on the mixer thread, +// not the main thread.  May have implications for callees or audio +// engine shutdown.  FMOD_RESULT F_CALLBACK windCallback(FMOD_DSP_STATE *dsp_state, float *originalbuffer, float *newbuffer, unsigned int length, int inchannels, int outchannels)  { diff --git a/indra/llaudio/llaudioengine_fmodex.h b/indra/llaudio/llaudioengine_fmodex.h index 415a9ed0ef..ca389d489f 100644 --- a/indra/llaudio/llaudioengine_fmodex.h +++ b/indra/llaudio/llaudioengine_fmodex.h @@ -5,7 +5,7 @@   *   * $LicenseInfo:firstyear=2002&license=viewerlgpl$   * Second Life Viewer Source Code - * Copyright (C) 2010, Linden Research, Inc. + * Copyright (C) 2014, Linden Research, Inc.   *    * This library is free software; you can redistribute it and/or   * modify it under the terms of the GNU Lesser General Public @@ -41,6 +41,7 @@ namespace FMOD  	class Sound;  	class DSP;  } +typedef struct FMOD_DSP_DESCRIPTION FMOD_DSP_DESCRIPTION;  //Interfaces  class LLAudioEngine_FMODEX : public LLAudioEngine  @@ -74,6 +75,7 @@ protected:  	LLWindGen<MIXBUFFERFORMAT> *mWindGen; +	FMOD_DSP_DESCRIPTION *mWindDSPDesc;  	FMOD::DSP *mWindDSP;  	FMOD::System *mSystem;  	bool mEnableProfiler; diff --git a/indra/media_plugins/winmmshim/winmm_shim.cpp b/indra/media_plugins/winmmshim/winmm_shim.cpp index 6297189869..78f7a9b0da 100755 --- a/indra/media_plugins/winmmshim/winmm_shim.cpp +++ b/indra/media_plugins/winmmshim/winmm_shim.cpp @@ -4,7 +4,7 @@   *   * $LicenseInfo:firstyear=2010&license=viewerlgpl$   * Second Life Viewer Source Code - * Copyright (C) 2010, Linden Research, Inc. + * Copyright (C) 2010-2014, Linden Research, Inc.   *    * This library is free software; you can redistribute it and/or   * modify it under the terms of the GNU Lesser General Public @@ -30,8 +30,8 @@  using std::wstring; -static float sVolumeLevel = 1.f; -static bool sMute = false; +static float sVolumeLevel = 1.f;		// Could be covered by critical section, +static bool sMute = false;				// not needed with atomicity and alignment.  static CRITICAL_SECTION sCriticalSection;  BOOL APIENTRY DllMain( HMODULE hModule, @@ -47,32 +47,36 @@ BOOL APIENTRY DllMain( HMODULE hModule,  }  void ll_winmm_shim_initialize(){ -	static bool initialized = false; -	// do this only once -	EnterCriticalSection(&sCriticalSection); +	static volatile bool initialized = false; + +	// do this only once using double-check locking  	if (!initialized) -	{	// bind to original winmm.dll -		TCHAR system_path[MAX_PATH]; -		TCHAR dll_path[MAX_PATH]; -		::GetSystemDirectory(system_path, MAX_PATH); - -		// grab winmm.dll from system path, where it should live -		wsprintf(dll_path, "%s\\winmm.dll", system_path); -		HMODULE winmm_handle = ::LoadLibrary(dll_path); - -		if (winmm_handle != NULL) -		{	// we have a dll, let's get out pointers! -			initialized = true; -			init_function_pointers(winmm_handle); -			::OutputDebugStringA("WINMM_SHIM.DLL: real winmm.dll initialized successfully\n"); -		} -		else -		{ -			// failed to initialize real winmm.dll -			::OutputDebugStringA("WINMM_SHIM.DLL: Failed to initialize real winmm.dll\n"); +	{ +		EnterCriticalSection(&sCriticalSection); +		if (!initialized) +		{	// bind to original winmm.dll +			TCHAR system_path[MAX_PATH]; +			TCHAR dll_path[MAX_PATH]; +			::GetSystemDirectory(system_path, MAX_PATH); + +			// grab winmm.dll from system path, where it should live +			wsprintf(dll_path, "%s\\winmm.dll", system_path); +			HMODULE winmm_handle = ::LoadLibrary(dll_path); + +			if (winmm_handle != NULL) +			{	// we have a dll, let's get out pointers! +				init_function_pointers(winmm_handle); +				::OutputDebugStringA("WINMM_SHIM.DLL: real winmm.dll initialized successfully\n"); +				initialized = true;		// Last thing after completing setup +			} +			else +			{ +				// failed to initialize real winmm.dll +				::OutputDebugStringA("WINMM_SHIM.DLL: Failed to initialize real winmm.dll\n"); +			}  		} +		LeaveCriticalSection(&sCriticalSection);  	} -	LeaveCriticalSection(&sCriticalSection);  } @@ -87,7 +91,7 @@ extern "C"  		int	mBitsPerSample;  	};  	typedef std::map<HWAVEOUT, WaveOutFormat*> wave_out_map_t; -	static wave_out_map_t sWaveOuts; +	static wave_out_map_t sWaveOuts;						// Covered by sCriticalSection  	MMRESULT WINAPI waveOutOpen( LPHWAVEOUT phwo, UINT uDeviceID, LPCWAVEFORMATEX pwfx, DWORD_PTR dwCallback, DWORD_PTR dwInstance, DWORD fdwOpen)  	{ @@ -103,7 +107,9 @@ extern "C"  			&& ((fdwOpen & WAVE_FORMAT_QUERY) == 0)) // not just querying for format support  		{	// remember the requested bits per sample, and associate with the given handle  			WaveOutFormat* wave_outp = new WaveOutFormat(pwfx->wBitsPerSample); +			EnterCriticalSection(&sCriticalSection);  			sWaveOuts.insert(std::make_pair(*phwo, wave_outp)); +			LeaveCriticalSection(&sCriticalSection);  		}  		return result;  	} @@ -111,13 +117,15 @@ extern "C"  	MMRESULT WINAPI waveOutClose( HWAVEOUT hwo)  	{  		ll_winmm_shim_initialize(); +		EnterCriticalSection(&sCriticalSection);  		wave_out_map_t::iterator found_it = sWaveOuts.find(hwo);  		if (found_it != sWaveOuts.end())  		{	// forget what we know about this handle  			delete found_it->second;  			sWaveOuts.erase(found_it);  		} -		return waveOutClose_orig( hwo); +		LeaveCriticalSection(&sCriticalSection); +		return waveOutClose_orig(hwo);  	}  	MMRESULT WINAPI waveOutWrite( HWAVEOUT hwo, LPWAVEHDR pwh, UINT cbwh) @@ -131,11 +139,19 @@ extern "C"  		}  		else if (sVolumeLevel != 1.f)   		{ // need to apply volume level +			int bits_per_sample(0); +			 +			EnterCriticalSection(&sCriticalSection);  			wave_out_map_t::iterator found_it = sWaveOuts.find(hwo);  			if (found_it != sWaveOuts.end())  			{ -				WaveOutFormat* formatp = found_it->second; -				switch (formatp->mBitsPerSample){ +				bits_per_sample = found_it->second->mBitsPerSample; +			} +			LeaveCriticalSection(&sCriticalSection); +			if (bits_per_sample) +			{ +				switch (bits_per_sample) +				{  				case 8:  					{  						char volume = (char)(sVolumeLevel * 127.f); diff --git a/indra/newview/VIEWER_VERSION.txt b/indra/newview/VIEWER_VERSION.txt index 0833a98f14..aaf18d2948 100644 --- a/indra/newview/VIEWER_VERSION.txt +++ b/indra/newview/VIEWER_VERSION.txt @@ -1 +1 @@ -3.7.4 +3.7.5 diff --git a/indra/newview/llfloatersocial.cpp b/indra/newview/llfloatersocial.cpp index 7238c6fff5..ea3d72e116 100644 --- a/indra/newview/llfloatersocial.cpp +++ b/indra/newview/llfloatersocial.cpp @@ -170,7 +170,6 @@ mRefreshBtn(NULL),  mWorkingLabel(NULL),  mThumbnailPlaceholder(NULL),  mCaptionTextBox(NULL), -mLocationCheckbox(NULL),  mPostButton(NULL)  {  	mCommitCallbackRegistrar.add("SocialSharing.SendPhoto", boost::bind(&LLSocialPhotoPanel::onSend, this)); @@ -196,7 +195,6 @@ BOOL LLSocialPhotoPanel::postBuild()      mWorkingLabel = getChild<LLUICtrl>("working_lbl");  	mThumbnailPlaceholder = getChild<LLUICtrl>("thumbnail_placeholder");  	mCaptionTextBox = getChild<LLUICtrl>("photo_caption"); -	mLocationCheckbox = getChild<LLUICtrl>("add_location_cb");  	mPostButton = getChild<LLUICtrl>("post_photo_btn");  	mCancelButton = getChild<LLUICtrl>("cancel_photo_btn"); @@ -213,7 +211,6 @@ void LLSocialPhotoPanel::draw()      mCaptionTextBox->setEnabled(no_ongoing_connection);      mResolutionComboBox->setEnabled(no_ongoing_connection);      mRefreshBtn->setEnabled(no_ongoing_connection); -    mLocationCheckbox->setEnabled(no_ongoing_connection);      // Display the preview if one is available  	if (previewp && previewp->getThumbnailImage()) @@ -343,25 +340,6 @@ void LLSocialPhotoPanel::sendPhoto()  	// Get the caption  	std::string caption = mCaptionTextBox->getValue().asString(); -	// Add the location if required -	bool add_location = mLocationCheckbox->getValue().asBoolean(); -	if (add_location) -	{ -		// Get the SLURL for the location -		LLSLURL slurl; -		LLAgentUI::buildSLURL(slurl); -		std::string slurl_string = slurl.getSLURLString(); - -		// Add query parameters so Google Analytics can track incoming clicks! -		slurl_string += DEFAULT_PHOTO_QUERY_PARAMETERS; - -		// Add it to the caption (pretty crude, but we don't have a better option with photos) -		if (caption.empty()) -			caption = slurl_string; -		else -			caption = caption + " " + slurl_string; -	} -  	// Get the image  	LLSnapshotLivePreview* previewp = getPreviewView(); diff --git a/indra/newview/llfloatersocial.h b/indra/newview/llfloatersocial.h index a021267bb4..585b265d9f 100644 --- a/indra/newview/llfloatersocial.h +++ b/indra/newview/llfloatersocial.h @@ -85,7 +85,6 @@ private:  	LLUICtrl * mWorkingLabel;  	LLUICtrl * mThumbnailPlaceholder;  	LLUICtrl * mCaptionTextBox; -	LLUICtrl * mLocationCheckbox;  	LLUICtrl * mPostButton;  	LLUICtrl* mCancelButton;  }; diff --git a/indra/newview/skins/default/xui/en/panel_social_photo.xml b/indra/newview/skins/default/xui/en/panel_social_photo.xml index a55613b52a..c79a246d9d 100644 --- a/indra/newview/skins/default/xui/en/panel_social_photo.xml +++ b/indra/newview/skins/default/xui/en/panel_social_photo.xml @@ -113,14 +113,6 @@               type="string"               word_wrap="true">              </text_editor> -            <check_box -             follows="left|top" -             initial_value="true" -             label="Include location in posting" -             name="add_location_cb" -              left="9" -              height="16" -             top_pad="8"/>          </layout_panel>          <layout_panel            name="photo_button_panel" diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index fe0774b409..f7b3a45e8d 100755 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -7,7 +7,7 @@  $LicenseInfo:firstyear=2006&license=viewerlgpl$  Second Life Viewer Source Code -Copyright (C) 2006-2011, Linden Research, Inc. +Copyright (C) 2006-2014, Linden Research, Inc.  This library is free software; you can redistribute it and/or  modify it under the terms of the GNU Lesser General Public @@ -749,7 +749,6 @@ class Darwin_i386_Manifest(ViewerManifest):                                  "libcollada14dom.dylib",                                  "libexpat.1.5.2.dylib",                                  "libexception_handler.dylib", -                                "libfmodex.dylib",                                  "libGLOD.dylib",                                  ):                      dylibs += path_optional(os.path.join(libdir, libfile), libfile) @@ -765,6 +764,20 @@ class Darwin_i386_Manifest(ViewerManifest):                                  'SLVoice',                                  ):                       self.path2basename(libdir, libfile) + +                # dylibs that vary based on configuration +                if self.args['configuration'].lower() == 'debug': +                    for libfile in ( +                                "libfmodexL.dylib", +                                ): +                        dylibs += path_optional(os.path.join("../packages/lib/debug", +                                                             libfile), libfile) +                else: +                    for libfile in ( +                                "libfmodex.dylib", +                                ): +                        dylibs += path_optional(os.path.join("../packages/lib/release", +                                                             libfile), libfile)                  # our apps                  for app_bld_dir, app in (("mac_crash_logger", "mac-crash-logger.app"), | 
