diff options
| -rw-r--r-- | autobuild.xml | 51 | ||||
| -rw-r--r-- | indra/cmake/CMakeLists.txt | 2 | ||||
| -rw-r--r-- | indra/cmake/Copy3rdPartyLibs.cmake | 39 | ||||
| -rw-r--r-- | indra/cmake/FMOD.cmake | 39 | ||||
| -rw-r--r-- | indra/cmake/FindFMOD.cmake | 44 | ||||
| -rw-r--r-- | indra/llaudio/CMakeLists.txt | 25 | ||||
| -rw-r--r-- | indra/llaudio/llaudioengine_fmod.cpp | 781 | ||||
| -rw-r--r-- | indra/llaudio/llaudioengine_fmod.h | 124 | ||||
| -rw-r--r-- | indra/llaudio/llaudioengine_fmodex.h | 1 | ||||
| -rw-r--r-- | indra/llaudio/lllistener_fmod.cpp | 125 | ||||
| -rw-r--r-- | indra/llaudio/lllistener_fmod.h | 58 | ||||
| -rw-r--r-- | indra/llaudio/lllistener_fmodex.cpp | 2 | ||||
| -rw-r--r-- | indra/llaudio/llstreamingaudio_fmod.cpp | 356 | ||||
| -rw-r--r-- | indra/llaudio/llstreamingaudio_fmod.h | 62 | ||||
| -rw-r--r-- | indra/llaudio/llstreamingaudio_fmodex.h | 6 | ||||
| -rw-r--r-- | indra/llaudio/llvorbisencode.cpp | 2 | ||||
| -rw-r--r-- | indra/newview/CMakeLists.txt | 45 | ||||
| -rw-r--r-- | indra/newview/fmodwrapper.cpp | 4 | ||||
| -rw-r--r-- | indra/newview/llappviewer.cpp | 14 | ||||
| -rw-r--r-- | indra/newview/llstartup.cpp | 19 | ||||
| -rw-r--r-- | indra/newview/viewer_manifest.py | 4 | 
21 files changed, 21 insertions, 1782 deletions
diff --git a/autobuild.xml b/autobuild.xml index caccdf7abc..442e4d0765 100644 --- a/autobuild.xml +++ b/autobuild.xml @@ -483,54 +483,6 @@            </map>          </map>        </map> -      <key>fmod</key> -      <map> -        <key>license</key> -        <string>fmod</string> -        <key>license_file</key> -        <string>LICENSES/fmod.txt</string> -        <key>name</key> -        <string>fmod</string> -        <key>platforms</key> -        <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>61ead113e6479452e6b690c84b4e9d30</string> -              <key>url</key> -              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-fmod-private/rev/221852/arch/Darwin/installer/fmod-3.75-darwin-20110222.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>0c61d643db54d2e5999be8254569d8b3</string> -              <key>url</key> -              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-fmod-private/rev/221852/arch/Linux/installer/fmod-3.75-linux-20110223.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>d9a9a6ad86895353bcd63374a4c1a91d</string> -              <key>url</key> -              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-fmod-private/rev/221852/arch/CYGWIN/installer/fmod-3.75-windows-20110222.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map>        <key>fmodex</key>        <map>          <key>license</key> @@ -2541,7 +2493,6 @@                    <string>"Visual Studio 10"</string>                    <string>-DUNATTENDED:BOOL=ON</string>                    <string>-DUSE_KDU=FALSE</string> -                  <string>-DFMOD=FALSE</string>                  </array>                </map>                <key>name</key> @@ -2630,7 +2581,6 @@                    <string>-DUNATTENDED:BOOL=ON</string>                    <string>-DINSTALL_PROPRIETARY=FALSE</string>                    <string>-DUSE_KDU=FALSE</string> -                  <string>-DFMOD=FALSE</string>                  </array>                </map>                <key>name</key> @@ -2718,7 +2668,6 @@                    <string>-DUNATTENDED:BOOL=ON</string>                    <string>-DINSTALL_PROPRIETARY=FALSE</string>                    <string>-DUSE_KDU=FALSE</string> -                  <string>-DFMOD=FALSE</string>                  </array>                </map>                <key>name</key> diff --git a/indra/cmake/CMakeLists.txt b/indra/cmake/CMakeLists.txt index e9c0554641..acff0621d1 100644 --- a/indra/cmake/CMakeLists.txt +++ b/indra/cmake/CMakeLists.txt @@ -25,7 +25,6 @@ set(cmake_SOURCE_FILES      FindBerkeleyDB.cmake      FindCARes.cmake      FindELFIO.cmake -    FindFMOD.cmake      FindFMODEX.cmake      FindGooglePerfTools.cmake      FindMono.cmake @@ -33,7 +32,6 @@ set(cmake_SOURCE_FILES      FindOpenJPEG.cmake      FindXmlRpcEpi.cmake      FindZLIB.cmake -    FMOD.cmake      FMODEX.cmake      FreeType.cmake      GLOD.cmake diff --git a/indra/cmake/Copy3rdPartyLibs.cmake b/indra/cmake/Copy3rdPartyLibs.cmake index c28361398f..f9e2013483 100644 --- a/indra/cmake/Copy3rdPartyLibs.cmake +++ b/indra/cmake/Copy3rdPartyLibs.cmake @@ -67,11 +67,6 @@ if(WINDOWS)        set(release_files ${release_files} fmodex.dll)      endif (FMODEX) -    if (FMOD) -      set(debug_files ${debug_files} fmod.dll) -      set(release_files ${release_files} fmod.dll) -    endif (FMOD) -  #*******************************  # Copy MS C runtime dlls, required for packaging.  # *TODO - Adapt this to support VC9 @@ -232,10 +227,6 @@ elseif(DARWIN)        set(release_files ${release_files} libfmodex.dylib)      endif (FMODEX) -    if (FMOD) -        # fmod is statically linked on darwin -       set(fmod_files "") -    endif (FMOD)  elseif(LINUX)      # linux is weird, multiple side by side configurations aren't supported      # and we don't seem to have any debug shared libs built yet anyways... @@ -299,10 +290,6 @@ elseif(LINUX)        set(release_files ${release_files} "libtcmalloc_minimal.so")      endif (USE_TCMALLOC) -    if (FMOD) -      set(release_files ${release_files} "libfmod-3.75.so") -    endif (FMOD) -  else(WINDOWS)      message(STATUS "WARNING: unrecognized platform for staging 3rd party libs, skipping...")      set(vivox_src_dir "${CMAKE_SOURCE_DIR}/newview/vivox-runtime/i686-linux") @@ -316,8 +303,6 @@ else(WINDOWS)      set(release_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-linux/lib/release")      set(release_files "") -    set(fmod_files "") -      set(debug_llkdu_src "")      set(debug_llkdu_dst "")      set(release_llkdu_src "") @@ -380,30 +365,6 @@ copy_if_different(      )  set(third_party_targets ${third_party_targets} ${out_targets}) -if (FMOD_SDK_DIR) -    copy_if_different( -        ${FMOD_SDK_DIR}  -        "${CMAKE_CURRENT_BINARY_DIR}/Debug" -        out_targets  -        ${fmod_files} -        ) -    set(all_targets ${all_targets} ${out_targets}) -    copy_if_different( -        ${FMOD_SDK_DIR}  -        "${CMAKE_CURRENT_BINARY_DIR}/Release" -        out_targets  -        ${fmod_files} -        ) -    set(all_targets ${all_targets} ${out_targets}) -    copy_if_different( -        ${FMOD_SDK_DIR}  -        "${CMAKE_CURRENT_BINARY_DIR}/RelWithDbgInfo" -        out_targets  -        ${fmod_files} -        ) -    set(all_targets ${all_targets} ${out_targets}) -endif (FMOD_SDK_DIR) -  if(NOT STANDALONE)    add_custom_target(        stage_third_party_libs ALL diff --git a/indra/cmake/FMOD.cmake b/indra/cmake/FMOD.cmake deleted file mode 100644 index ef0ae58bdf..0000000000 --- a/indra/cmake/FMOD.cmake +++ /dev/null @@ -1,39 +0,0 @@ -# -*- cmake -*- - -# FMOD can be set when launching the make using the argument -DFMOD:BOOL=ON -# When building using proprietary binaries though (i.e. having access to LL private servers), -# we always build with FMOD. -# Open source devs should use the -DFMOD:BOOL=ON then if they want to build with FMOD, whether -# they are using STANDALONE or not. -if (INSTALL_PROPRIETARY) -  set(FMOD OFF CACHE BOOL "Use FMOD sound library.") -endif (INSTALL_PROPRIETARY) - -if (FMOD) -  if (STANDALONE) -    # In that case, we use the version of the library installed on the system -    set(FMOD_FIND_REQUIRED ON) -    include(FindFMOD) -  else (STANDALONE) -    if (FMOD_LIBRARY AND FMOD_INCLUDE_DIR) -      # If the path have been specified in the arguments, use that -      set(FMOD_LIBRARIES ${FMOD_LIBRARY}) -      MESSAGE(STATUS "Using FMOD path: ${FMOD_LIBRARIES}, ${FMOD_INCLUDE_DIR}") -    else (FMOD_LIBRARY AND FMOD_INCLUDE_DIR) -      # If not, we're going to try to get the package listed in autobuild.xml -      # Note: if you're not using INSTALL_PROPRIETARY, the package URL should be local (file:/// URL)  -      # as accessing the private LL location will fail if you don't have the credential -      include(Prebuilt) -      use_prebuilt_binary(fmod)     -      if (WINDOWS) -        set(FMOD_LIBRARY fmod) -      elseif (DARWIN) -        set(FMOD_LIBRARY fmod) -      elseif (LINUX) -        set(FMOD_LIBRARY fmod-3.75) -      endif (WINDOWS) -      set(FMOD_LIBRARIES ${FMOD_LIBRARY}) -      set(FMOD_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include) -    endif (FMOD_LIBRARY AND FMOD_INCLUDE_DIR) -  endif (STANDALONE) -endif (FMOD) diff --git a/indra/cmake/FindFMOD.cmake b/indra/cmake/FindFMOD.cmake deleted file mode 100644 index 1ebbc8c96e..0000000000 --- a/indra/cmake/FindFMOD.cmake +++ /dev/null @@ -1,44 +0,0 @@ -# -*- cmake -*- - -# - Find FMOD -# Find the FMOD includes and library -# This module defines -#  FMOD_INCLUDE_DIR, where to find fmod.h and fmod_errors.h -#  FMOD_LIBRARIES, the libraries needed to use FMOD. -#  FMOD, If false, do not try to use FMOD. -# also defined, but not for general use are -#  FMOD_LIBRARY, where to find the FMOD library. - -FIND_PATH(FMOD_INCLUDE_DIR fmod.h PATH_SUFFIXES fmod) - -SET(FMOD_NAMES ${FMOD_NAMES} fmod fmodvc fmodex fmod-3.75) -FIND_LIBRARY(FMOD_LIBRARY -  NAMES ${FMOD_NAMES} -  PATH_SUFFIXES fmod -  ) - -IF (FMOD_LIBRARY AND FMOD_INCLUDE_DIR) -  SET(FMOD_LIBRARIES ${FMOD_LIBRARY}) -  SET(FMOD_FOUND "YES") -ELSE (FMOD_LIBRARY AND FMOD_INCLUDE_DIR) -  SET(FMOD_FOUND "NO") -ENDIF (FMOD_LIBRARY AND FMOD_INCLUDE_DIR) - -IF (FMOD_FOUND) -  IF (NOT FMOD_FIND_QUIETLY) -    MESSAGE(STATUS "Found FMOD: ${FMOD_LIBRARIES}") -  ENDIF (NOT FMOD_FIND_QUIETLY) -ELSE (FMOD_FOUND) -  IF (FMOD_FIND_REQUIRED) -    MESSAGE(FATAL_ERROR "Could not find FMOD library") -  ENDIF (FMOD_FIND_REQUIRED) -ENDIF (FMOD_FOUND) - -# Deprecated declarations. -SET (NATIVE_FMOD_INCLUDE_PATH ${FMOD_INCLUDE_DIR} ) -GET_FILENAME_COMPONENT (NATIVE_FMOD_LIB_PATH ${FMOD_LIBRARY} PATH) - -MARK_AS_ADVANCED( -  FMOD_LIBRARY -  FMOD_INCLUDE_DIR -  ) diff --git a/indra/llaudio/CMakeLists.txt b/indra/llaudio/CMakeLists.txt index b2d7b7c911..f27bcb27d1 100644 --- a/indra/llaudio/CMakeLists.txt +++ b/indra/llaudio/CMakeLists.txt @@ -6,7 +6,6 @@ include(00-Common)  include(Audio)  include(LLAudio)  include(FMODEX) -set(FMOD OFF)  include(OPENAL)  include(LLCommon)  include(LLMath) @@ -61,30 +60,6 @@ if (FMODEX)           )  endif (FMODEX) -if (FMOD) -    include_directories( -        ${FMOD_INCLUDE_DIR} -        ) - -    list(APPEND llaudio_SOURCE_FILES -         llaudioengine_fmod.cpp -         lllistener_fmod.cpp -         llstreamingaudio_fmod.cpp -         ) - -    list(APPEND llaudio_HEADER_FILES -         llaudioengine_fmod.h -         lllistener_fmod.h -         llstreamingaudio_fmod.h -         ) - -    if (LINUX OR DARWIN) -      set_source_files_properties(llaudioengine_fmod.cpp -                                  llstreamingaudio_fmod.cpp -                                  COMPILE_FLAGS -Wno-write-strings) -    endif (LINUX OR DARWIN) -endif (FMOD) -  if (OPENAL)    list(APPEND llaudio_SOURCE_FILES      llaudioengine_openal.cpp diff --git a/indra/llaudio/llaudioengine_fmod.cpp b/indra/llaudio/llaudioengine_fmod.cpp deleted file mode 100644 index a40de9fa68..0000000000 --- a/indra/llaudio/llaudioengine_fmod.cpp +++ /dev/null @@ -1,781 +0,0 @@ -/**  - * @file audioengine_fmod.cpp - * @brief Implementation of LLAudioEngine class abstracting the audio support as a FMOD 3D implementation - * - * $LicenseInfo:firstyear=2002&license=viewerlgpl$ - * Second Life Viewer Source Code - * Copyright (C) 2010, 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 - * License as published by the Free Software Foundation; - * version 2.1 of the License only. - *  - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU - * Lesser General Public License for more details. - *  - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA - *  - * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA - * $/LicenseInfo$ - */ - -#include "linden_common.h" - -#include "llstreamingaudio.h" -#include "llstreamingaudio_fmod.h" - -#include "llaudioengine_fmod.h" -#include "lllistener_fmod.h" - -#include "llerror.h" -#include "llmath.h" -#include "llrand.h" - -#include "fmod.h" -#include "fmod_errors.h" -#include "lldir.h" -#include "llapr.h" - -#include "sound_ids.h" - - -extern "C" { -	void * F_CALLBACKAPI windCallback(void *originalbuffer, void *newbuffer, int length, void* userdata); -} - - -LLAudioEngine_FMOD::LLAudioEngine_FMOD() -{ -	mInited = false; -	mWindGen = NULL; -	mWindDSP = NULL; -} - - -LLAudioEngine_FMOD::~LLAudioEngine_FMOD() -{ -} - - -bool LLAudioEngine_FMOD::init(const S32 num_channels, void* userdata) -{ -	LLAudioEngine::init(num_channels, userdata); - -	// Reserve one extra channel for the http stream. -	if (!FSOUND_SetMinHardwareChannels(num_channels + 1)) -	{ -		LL_WARNS("AppInit") << "FMOD::init[0](), error: " << FMOD_ErrorString(FSOUND_GetError()) << LL_ENDL; -	} - -	LL_DEBUGS("AppInit") << "LLAudioEngine_FMOD::init() initializing FMOD" << LL_ENDL; - -	F32 version = FSOUND_GetVersion(); -	if (version < FMOD_VERSION) -	{ -		LL_WARNS("AppInit") << "Error : You are using the wrong FMOD version (" << version -			<< ")!  You should be using FMOD " << FMOD_VERSION << LL_ENDL; -		//return false; -	} - -	U32 fmod_flags = 0x0; - -#if LL_WINDOWS -	// Windows needs to know which window is frontmost. -	// This must be called before FSOUND_Init() per the FMOD docs. -	// This could be used to let FMOD handle muting when we lose focus, -	// but we don't actually want to do that because we want to distinguish -	// between minimized and not-focused states. -	if (!FSOUND_SetHWND(userdata)) -	{ -		LL_WARNS("AppInit") << "Error setting FMOD window: " -			<< FMOD_ErrorString(FSOUND_GetError()) << LL_ENDL; -		return false; -	} -	// Play audio when we don't have focus. -	// (For example, IM client on top of us.) -	// This means we also try to play audio when minimized, -	// so we manually handle muting in that case. JC -	fmod_flags |= FSOUND_INIT_GLOBALFOCUS; -#endif - -#if LL_LINUX -	// initialize the FMOD engine - -	// This is a hack to use only FMOD's basic FPU mixer -	// when the LL_VALGRIND environmental variable is set, -	// otherwise valgrind will fall over on FMOD's MMX detection -	if (getenv("LL_VALGRIND"))		/*Flawfinder: ignore*/ -	{ -		LL_INFOS("AppInit") << "Pacifying valgrind in FMOD init." << LL_ENDL; -		FSOUND_SetMixer(FSOUND_MIXER_QUALITY_FPU); -	} - -	// If we don't set an output method, Linux FMOD always -	// decides on OSS and fails otherwise.  So we'll manually -	// try ESD, then OSS, then ALSA. -	// Why this order?  See SL-13250, but in short, OSS emulated -	// on top of ALSA is ironically more reliable than raw ALSA. -	// Ack, and ESD has more reliable failure modes - but has worse -	// latency - than all of them, so wins for now. -	bool audio_ok = false; - -	if (!audio_ok) -	{ -		if (NULL == getenv("LL_BAD_FMOD_ESD")) /*Flawfinder: ignore*/ -		{ -			LL_DEBUGS("AppInit") << "Trying ESD audio output..." << LL_ENDL; -			if(FSOUND_SetOutput(FSOUND_OUTPUT_ESD) && -			   FSOUND_Init(44100, num_channels, fmod_flags)) -			{ -				LL_DEBUGS("AppInit") << "ESD audio output initialized OKAY" -					<< LL_ENDL; -				audio_ok = true; -			} else { -				LL_WARNS("AppInit") << "ESD audio output FAILED to initialize: " -					<< FMOD_ErrorString(FSOUND_GetError()) << LL_ENDL; -			} -		} else { -			LL_DEBUGS("AppInit") << "ESD audio output SKIPPED" << LL_ENDL; -		} -	} -	if (!audio_ok) -	{ -		if (NULL == getenv("LL_BAD_FMOD_OSS")) 	 /*Flawfinder: ignore*/ -		{ -			LL_DEBUGS("AppInit") << "Trying OSS audio output..."	<< LL_ENDL; -			if(FSOUND_SetOutput(FSOUND_OUTPUT_OSS) && -			   FSOUND_Init(44100, num_channels, fmod_flags)) -			{ -				LL_DEBUGS("AppInit") << "OSS audio output initialized OKAY" << LL_ENDL; -				audio_ok = true; -			} else { -				LL_WARNS("AppInit") << "OSS audio output FAILED to initialize: " -					<< FMOD_ErrorString(FSOUND_GetError()) << LL_ENDL; -			} -		} else { -			LL_DEBUGS("AppInit") << "OSS audio output SKIPPED" << LL_ENDL; -		} -	} -	if (!audio_ok) -	{ -		if (NULL == getenv("LL_BAD_FMOD_ALSA"))		/*Flawfinder: ignore*/ -		{ -			LL_DEBUGS("AppInit") << "Trying ALSA audio output..." << LL_ENDL; -			if(FSOUND_SetOutput(FSOUND_OUTPUT_ALSA) && -			   FSOUND_Init(44100, num_channels, fmod_flags)) -			{ -				LL_DEBUGS("AppInit") << "ALSA audio output initialized OKAY" << LL_ENDL; -				audio_ok = true; -			} else { -				LL_WARNS("AppInit") << "ALSA audio output FAILED to initialize: " -					<< FMOD_ErrorString(FSOUND_GetError()) << LL_ENDL; -			} -		} else { -			LL_DEBUGS("AppInit") << "OSS audio output SKIPPED" << LL_ENDL; -		} -	} -	if (!audio_ok) -	{ -		LL_WARNS("AppInit") << "Overall audio init failure." << LL_ENDL; -		return false; -	} - -	// On Linux, FMOD causes a SIGPIPE for some netstream error -	// conditions (an FMOD bug); ignore SIGPIPE so it doesn't crash us. -	// NOW FIXED in FMOD 3.x since 2006-10-01. -	//signal(SIGPIPE, SIG_IGN); - -	// We're interested in logging which output method we -	// ended up with, for QA purposes. -	switch (FSOUND_GetOutput()) -	{ -	case FSOUND_OUTPUT_NOSOUND: LL_DEBUGS("AppInit") << "Audio output: NoSound" << LL_ENDL; break; -	case FSOUND_OUTPUT_OSS:	LL_DEBUGS("AppInit") << "Audio output: OSS" << LL_ENDL; break; -	case FSOUND_OUTPUT_ESD:	LL_DEBUGS("AppInit") << "Audio output: ESD" << LL_ENDL; break; -	case FSOUND_OUTPUT_ALSA: LL_DEBUGS("AppInit") << "Audio output: ALSA" << LL_ENDL; break; -	default: LL_INFOS("AppInit") << "Audio output: Unknown!" << LL_ENDL; break; -	}; - -#else // LL_LINUX - -	// initialize the FMOD engine -	if (!FSOUND_Init(44100, num_channels, fmod_flags)) -	{ -		LL_WARNS("AppInit") << "Error initializing FMOD: " -			<< FMOD_ErrorString(FSOUND_GetError()) << LL_ENDL; -		return false; -	} -	 -#endif - -	// set up our favourite FMOD-native streaming audio implementation if none has already been added -	if (!getStreamingAudioImpl()) // no existing implementation added -		setStreamingAudioImpl(new LLStreamingAudio_FMOD()); - -	LL_DEBUGS("AppInit") << "LLAudioEngine_FMOD::init() FMOD initialized correctly" << LL_ENDL; - -	mInited = true; - -	return true; -} - - -std::string LLAudioEngine_FMOD::getDriverName(bool verbose) -{ -	if (verbose) -	{ -		F32 version = FSOUND_GetVersion(); -		return llformat("FMOD version %f", version); -	} -	else -	{ -		return "FMOD"; -	} -} - - -void LLAudioEngine_FMOD::allocateListener(void) -{	 -	mListenerp = (LLListener *) new LLListener_FMOD(); -	if (!mListenerp) -	{ -		llwarns << "Listener creation failed" << llendl; -	} -} - - -void LLAudioEngine_FMOD::shutdown() -{ -	if (mWindDSP) -	{ -		FSOUND_DSP_SetActive(mWindDSP,false); -		FSOUND_DSP_Free(mWindDSP); -	} - -	stopInternetStream(); - -	LLAudioEngine::shutdown(); -	 -	llinfos << "LLAudioEngine_FMOD::shutdown() closing FMOD" << llendl; -	FSOUND_Close(); -	llinfos << "LLAudioEngine_FMOD::shutdown() done closing FMOD" << llendl; - -	delete mListenerp; -	mListenerp = NULL; -} - - -LLAudioBuffer * LLAudioEngine_FMOD::createBuffer() -{ -	return new LLAudioBufferFMOD(); -} - - -LLAudioChannel * LLAudioEngine_FMOD::createChannel() -{ -	return new LLAudioChannelFMOD(); -} - - -bool LLAudioEngine_FMOD::initWind() -{ -	if (!mWindGen) -	{ -		bool enable; -		 -		switch (FSOUND_GetMixer()) -		{ -			case FSOUND_MIXER_MMXP5: -			case FSOUND_MIXER_MMXP6: -			case FSOUND_MIXER_QUALITY_MMXP5: -			case FSOUND_MIXER_QUALITY_MMXP6: -				enable = (typeid(MIXBUFFERFORMAT) == typeid(S16)); -				break; -			case FSOUND_MIXER_BLENDMODE: -				enable = (typeid(MIXBUFFERFORMAT) == typeid(S32)); -				break; -			case FSOUND_MIXER_QUALITY_FPU: -				enable = (typeid(MIXBUFFERFORMAT) == typeid(F32)); -				break; -			default: -				// FSOUND_GetMixer() does not return a valid mixer type on Darwin -				LL_INFOS("AppInit") << "Unknown FMOD mixer type, assuming default" << LL_ENDL; -				enable = true; -				break; -		} -		 -		if (enable) -		{ -			mWindGen = new LLWindGen<MIXBUFFERFORMAT>(FSOUND_GetOutputRate()); -		} -		else -		{ -			LL_WARNS("AppInit") << "Incompatible FMOD mixer type, wind noise disabled" << LL_ENDL; -		} -	} - -	mNextWindUpdate = 0.0; - -	if (mWindGen && !mWindDSP) -	{ -		mWindDSP = FSOUND_DSP_Create(&windCallback, FSOUND_DSP_DEFAULTPRIORITY_CLEARUNIT + 20, mWindGen); -	} -	if (mWindDSP) -	{ -		FSOUND_DSP_SetActive(mWindDSP, true); -		return true; -	} -	 -	return false; -} - - -void LLAudioEngine_FMOD::cleanupWind() -{ -	if (mWindDSP) -	{ -		FSOUND_DSP_SetActive(mWindDSP, false); -		FSOUND_DSP_Free(mWindDSP); -		mWindDSP = NULL; -	} - -	delete mWindGen; -	mWindGen = NULL; -} - - -//----------------------------------------------------------------------- -void LLAudioEngine_FMOD::updateWind(LLVector3 wind_vec, F32 camera_height_above_water) -{ -	LLVector3 wind_pos; -	F64 pitch; -	F64 center_freq; - -	if (!mEnableWind) -	{ -		return; -	} -	 -	if (mWindUpdateTimer.checkExpirationAndReset(LL_WIND_UPDATE_INTERVAL)) -	{ -		 -		// wind comes in as Linden coordinate (+X = forward, +Y = left, +Z = up) -		// need to convert this to the conventional orientation DS3D and OpenAL use -		// where +X = right, +Y = up, +Z = backwards - -		wind_vec.setVec(-wind_vec.mV[1], wind_vec.mV[2], -wind_vec.mV[0]); - -		// cerr << "Wind update" << endl; - -		pitch = 1.0 + mapWindVecToPitch(wind_vec); -		center_freq = 80.0 * pow(pitch,2.5*(mapWindVecToGain(wind_vec)+1.0)); -		 -		mWindGen->mTargetFreq = (F32)center_freq; -		mWindGen->mTargetGain = (F32)mapWindVecToGain(wind_vec) * mMaxWindGain; -		mWindGen->mTargetPanGainR = (F32)mapWindVecToPan(wind_vec); -  	} -} - -/* -//----------------------------------------------------------------------- -void LLAudioEngine_FMOD::setSourceMinDistance(U16 source_num, F64 distance) -{ -	if (!mInited) -	{ -		return; -	} -	if (mBuffer[source_num]) -	{ -		mMinDistance[source_num] = (F32) distance; -		if (!FSOUND_Sample_SetMinMaxDistance(mBuffer[source_num],mMinDistance[source_num], mMaxDistance[source_num])) -		{ -			llwarns << "FMOD::setSourceMinDistance(" << source_num << "), error: " << FMOD_ErrorString(FSOUND_GetError()) << llendl; -		} -	} -} - -//----------------------------------------------------------------------- -void LLAudioEngine_FMOD::setSourceMaxDistance(U16 source_num, F64 distance) -{ -	if (!mInited) -	{ -		return; -	} -	if (mBuffer[source_num]) -	{ -		mMaxDistance[source_num] = (F32) distance; -		if (!FSOUND_Sample_SetMinMaxDistance(mBuffer[source_num],mMinDistance[source_num], mMaxDistance[source_num])) -		{ -			llwarns << "FMOD::setSourceMaxDistance(" << source_num << "), error: " << FMOD_ErrorString(FSOUND_GetError()) << llendl; -		} -	} -} - -//----------------------------------------------------------------------- -void LLAudioEngine_FMOD::get3DParams(S32 source_num, S32 *volume, S32 *freq, S32 *inside, S32 *outside, LLVector3 *orient, S32 *out_volume, F32 *min_dist, F32 *max_dist) -{ -	*volume = 0; -	*freq = 0; -	*inside = 0; -	*outside = 0; -	*orient = LLVector3::zero; -	*out_volume = 0; -	*min_dist = 0.f; -	*max_dist = 0.f; -} - -*/ - - -//----------------------------------------------------------------------- -void LLAudioEngine_FMOD::setInternalGain(F32 gain) -{ -	if (!mInited) -	{ -		return; -	} - -	gain = llclamp( gain, 0.0f, 1.0f ); -	FSOUND_SetSFXMasterVolume( llround( 255.0f * gain ) ); - -	LLStreamingAudioInterface *saimpl = getStreamingAudioImpl(); -	if ( saimpl ) -	{ -		// fmod likes its streaming audio channel gain re-asserted after -		// master volume change. -		saimpl->setGain(saimpl->getGain()); -	} -} - -// -// LLAudioChannelFMOD implementation -// - -LLAudioChannelFMOD::LLAudioChannelFMOD() : LLAudioChannel(), mChannelID(0), mLastSamplePos(0) -{ -} - - -LLAudioChannelFMOD::~LLAudioChannelFMOD() -{ -	cleanup(); -} - - -bool LLAudioChannelFMOD::updateBuffer() -{ -	if (LLAudioChannel::updateBuffer()) -	{ -		// Base class update returned true, which means that we need to actually -		// set up the channel for a different buffer. - -		LLAudioBufferFMOD *bufferp = (LLAudioBufferFMOD *)mCurrentSourcep->getCurrentBuffer(); - -		// Grab the FMOD sample associated with the buffer -		FSOUND_SAMPLE *samplep = bufferp->getSample(); -		if (!samplep) -		{ -			// This is bad, there should ALWAYS be a sample associated with a legit -			// buffer. -			llerrs << "No FMOD sample!" << llendl; -			return false; -		} - - -		// Actually play the sound.  Start it off paused so we can do all the necessary -		// setup. -		mChannelID = FSOUND_PlaySoundEx(FSOUND_FREE, samplep, FSOUND_DSP_GetSFXUnit(), true); - -		//llinfos << "Setting up channel " << std::hex << mChannelID << std::dec << llendl; -	} - -	// If we have a source for the channel, we need to update its gain. -	if (mCurrentSourcep) -	{ -		// SJB: warnings can spam and hurt framerate, disabling -		if (!FSOUND_SetVolume(mChannelID, llround(getSecondaryGain() * mCurrentSourcep->getGain() * 255.0f))) -		{ -// 			llwarns << "LLAudioChannelFMOD::updateBuffer error: " << FMOD_ErrorString(FSOUND_GetError()) << llendl; -		} -		 -		if (!FSOUND_SetLoopMode(mChannelID, mCurrentSourcep->isLoop() ? FSOUND_LOOP_NORMAL : FSOUND_LOOP_OFF)) -		{ -// 			llwarns << "Channel " << mChannelID << "Source ID: " << mCurrentSourcep->getID() -// 					<< " at " << mCurrentSourcep->getPositionGlobal() << llendl; -// 			llwarns << "LLAudioChannelFMOD::updateBuffer error: " << FMOD_ErrorString(FSOUND_GetError()) << llendl; -		} -	} - -	return true; -} - - -void LLAudioChannelFMOD::update3DPosition() -{ -	if (!mChannelID) -	{ -		// We're not actually a live channel (i.e., we're not playing back anything) -		return; -	} - -	LLAudioBufferFMOD *bufferp = (LLAudioBufferFMOD *)mCurrentBufferp; -	if (!bufferp) -	{ -		// We don't have a buffer associated with us (should really have been picked up -		// by the above if. -		return; -	} - -	if (mCurrentSourcep->isAmbient()) -	{ -		// Ambient sound, don't need to do any positional updates. -		bufferp->set3DMode(false); -	} -	else -	{ -		// Localized sound.  Update the position and velocity of the sound. -		bufferp->set3DMode(true); - -		LLVector3 float_pos; -		float_pos.setVec(mCurrentSourcep->getPositionGlobal()); -		if (!FSOUND_3D_SetAttributes(mChannelID, float_pos.mV, mCurrentSourcep->getVelocity().mV)) -		{ -			LL_DEBUGS("FMOD") << "LLAudioChannelFMOD::update3DPosition error: " << FMOD_ErrorString(FSOUND_GetError()) << LL_ENDL; -		} -	} -} - - -void LLAudioChannelFMOD::updateLoop() -{ -	if (!mChannelID) -	{ -		// May want to clear up the loop/sample counters. -		return; -	} - -	// -	// Hack:  We keep track of whether we looped or not by seeing when the -	// sample position looks like it's going backwards.  Not reliable; may -	// yield false negatives. -	// -	U32 cur_pos = FSOUND_GetCurrentPosition(mChannelID); -	if (cur_pos < (U32)mLastSamplePos) -	{ -		mLoopedThisFrame = true; -	} -	mLastSamplePos = cur_pos; -} - - -void LLAudioChannelFMOD::cleanup() -{ -	if (!mChannelID) -	{ -		//llinfos << "Aborting cleanup with no channelID." << llendl; -		return; -	} - -	//llinfos << "Cleaning up channel: " << mChannelID << llendl; -	if (!FSOUND_StopSound(mChannelID)) -	{ -		LL_DEBUGS("FMOD") << "LLAudioChannelFMOD::cleanup error: " << FMOD_ErrorString(FSOUND_GetError()) << llendl; -	} - -	mCurrentBufferp = NULL; -	mChannelID = 0; -} - - -void LLAudioChannelFMOD::play() -{ -	if (!mChannelID) -	{ -		llwarns << "Playing without a channelID, aborting" << llendl; -		return; -	} - -	if (!FSOUND_SetPaused(mChannelID, false)) -	{ -		llwarns << "LLAudioChannelFMOD::play error: " << FMOD_ErrorString(FSOUND_GetError()) << llendl; -	} -	getSource()->setPlayedOnce(true); -} - - -void LLAudioChannelFMOD::playSynced(LLAudioChannel *channelp) -{ -	LLAudioChannelFMOD *fmod_channelp = (LLAudioChannelFMOD*)channelp; -	if (!(fmod_channelp->mChannelID && mChannelID)) -	{ -		// Don't have channels allocated to both the master and the slave -		return; -	} - -	U32 position = FSOUND_GetCurrentPosition(fmod_channelp->mChannelID) % mCurrentBufferp->getLength(); -	// Try to match the position of our sync master -	if (!FSOUND_SetCurrentPosition(mChannelID, position)) -	{ -		llwarns << "LLAudioChannelFMOD::playSynced unable to set current position" << llendl; -	} - -	// Start us playing -	play(); -} - - -bool LLAudioChannelFMOD::isPlaying() -{ -	if (!mChannelID) -	{ -		return false; -	} - -	return FSOUND_IsPlaying(mChannelID) && (!FSOUND_GetPaused(mChannelID)); -} - - - -// -// LLAudioBufferFMOD implementation -// - - -LLAudioBufferFMOD::LLAudioBufferFMOD() -{ -	mSamplep = NULL; -} - - -LLAudioBufferFMOD::~LLAudioBufferFMOD() -{ -	if (mSamplep) -	{ -		// Clean up the associated FMOD sample if it exists. -		FSOUND_Sample_Free(mSamplep); -		mSamplep = NULL; -	} -} - - -bool LLAudioBufferFMOD::loadWAV(const std::string& filename) -{ -	// Try to open a wav file from disk.  This will eventually go away, as we don't -	// really want to block doing this. -	if (filename.empty()) -	{ -		// invalid filename, abort. -		return false; -	} - -	if (!LLAPRFile::isExist(filename, NULL, LL_APR_RPB)) -	{ -		// File not found, abort. -		return false; -	} -	 -	if (mSamplep) -	{ -		// If there's already something loaded in this buffer, clean it up. -		FSOUND_Sample_Free(mSamplep); -		mSamplep = NULL; -	} - -	// Load up the wav file into an fmod sample -#if LL_WINDOWS -	// MikeS. - Loading the sound file manually and then handing it over to FMOD, -	//	since FMOD uses posix IO internally, -	// which doesn't work with unicode file paths. -	LLFILE* sound_file = LLFile::fopen(filename,"rb");	/* Flawfinder: ignore */ -	if (sound_file) -	{ -		fseek(sound_file,0,SEEK_END); -		U32	file_length = ftell(sound_file);	//Find the length of the file by seeking to the end and getting the offset -		size_t	read_count; -		fseek(sound_file,0,SEEK_SET);	//Seek back to the beginning -		char*	buffer = new char[file_length]; -		llassert(buffer); -		read_count = fread((void*)buffer,file_length,1,sound_file);//Load it.. -		if(ferror(sound_file)==0 && (read_count == 1)){//No read error, and we got 1 chunk of our size... -			unsigned int mode_flags = FSOUND_LOOP_NORMAL | FSOUND_LOADMEMORY; -									//FSOUND_16BITS | FSOUND_MONO | FSOUND_LOADMEMORY | FSOUND_LOOP_NORMAL; -			mSamplep = FSOUND_Sample_Load(FSOUND_UNMANAGED, buffer, mode_flags , 0, file_length); -		} -		delete[] buffer; -		fclose(sound_file); -	} -#else -	mSamplep = FSOUND_Sample_Load(FSOUND_UNMANAGED, filename.c_str(), FSOUND_LOOP_NORMAL, 0, 0); -#endif - -	if (!mSamplep) -	{ -		// We failed to load the file for some reason. -		llwarns << "Could not load data '" << filename << "': " -				<< FMOD_ErrorString(FSOUND_GetError()) << llendl; - -		// -		// If we EVER want to load wav files provided by end users, we need -		// to rethink this! -		// -		// file is probably corrupt - remove it. -		LLFile::remove(filename); -		return false; -	} - -	// Everything went well, return true -	return true; -} - - -U32 LLAudioBufferFMOD::getLength() -{ -	if (!mSamplep) -	{ -		return 0; -	} - -	return FSOUND_Sample_GetLength(mSamplep); -} - - -void LLAudioBufferFMOD::set3DMode(bool use3d) -{ -	U16 current_mode = FSOUND_Sample_GetMode(mSamplep); -	 -	if (use3d) -	{ -		if (!FSOUND_Sample_SetMode(mSamplep, (current_mode & (~FSOUND_2D)))) -		{ -			llwarns << "LLAudioBufferFMOD::set3DMode error: " << FMOD_ErrorString(FSOUND_GetError()) << llendl; -		} -	} -	else -	{ -		if (!FSOUND_Sample_SetMode(mSamplep, current_mode | FSOUND_2D)) -		{ -			llwarns << "LLAudioBufferFMOD::set3DMode error: " << FMOD_ErrorString(FSOUND_GetError()) << llendl; -		} -	} -} - - -void * F_CALLBACKAPI windCallback(void *originalbuffer, void *newbuffer, int length, void* userdata) -{ -	// originalbuffer = fmod's original mixbuffer. -	// newbuffer = the buffer passed from the previous DSP unit. -	// length = length in samples at this mix time. -	// userdata = user parameter passed through in FSOUND_DSP_Create. - -	LLWindGen<LLAudioEngine_FMOD::MIXBUFFERFORMAT> *windgen = -		(LLWindGen<LLAudioEngine_FMOD::MIXBUFFERFORMAT> *)userdata; -	 -	newbuffer = windgen->windGenerate((LLAudioEngine_FMOD::MIXBUFFERFORMAT *)newbuffer, length); - -	return newbuffer; -} diff --git a/indra/llaudio/llaudioengine_fmod.h b/indra/llaudio/llaudioengine_fmod.h deleted file mode 100644 index 4582a5d57e..0000000000 --- a/indra/llaudio/llaudioengine_fmod.h +++ /dev/null @@ -1,124 +0,0 @@ -/**  - * @file audioengine_fmod.h - * @brief Definition of LLAudioEngine class abstracting the audio - * support as a FMOD 3D implementation - * - * $LicenseInfo:firstyear=2002&license=viewerlgpl$ - * Second Life Viewer Source Code - * Copyright (C) 2010, 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 - * License as published by the Free Software Foundation; - * version 2.1 of the License only. - *  - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU - * Lesser General Public License for more details. - *  - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA - *  - * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA - * $/LicenseInfo$ - */ - -#ifndef LL_AUDIOENGINE_FMOD_H -#define LL_AUDIOENGINE_FMOD_H - -#include "llaudioengine.h" -#include "lllistener_fmod.h" -#include "llwindgen.h" - -#include "fmod.h" - -class LLAudioStreamManagerFMOD; - -class LLAudioEngine_FMOD : public LLAudioEngine  -{ -public: -	LLAudioEngine_FMOD(); -	virtual ~LLAudioEngine_FMOD(); - -	// initialization/startup/shutdown -	virtual bool init(const S32 num_channels, void *user_data); -       	virtual std::string getDriverName(bool verbose); -	virtual void allocateListener(); - -	virtual void shutdown(); - -	/*virtual*/ bool initWind(); -	/*virtual*/ void cleanupWind(); - -	/*virtual*/void updateWind(LLVector3 direction, F32 camera_height_above_water); - -#if LL_DARWIN -	typedef S32 MIXBUFFERFORMAT; -#else -	typedef S16 MIXBUFFERFORMAT; -#endif - -protected: -	/*virtual*/ LLAudioBuffer *createBuffer(); // Get a free buffer, or flush an existing one if you have to. -	/*virtual*/ LLAudioChannel *createChannel(); // Create a new audio channel. - -	/*virtual*/ void setInternalGain(F32 gain); -protected: -	static signed char F_CALLBACKAPI callbackMetaData(char* name, char* value, void* userdata); - -	//F32 mMinDistance[MAX_BUFFERS]; -	//F32 mMaxDistance[MAX_BUFFERS]; - -	bool mInited; - -	// On Windows, userdata is the HWND of the application window. -	void* mUserData; - -	LLWindGen<MIXBUFFERFORMAT> *mWindGen; -	FSOUND_DSPUNIT *mWindDSP; -}; - - -class LLAudioChannelFMOD : public LLAudioChannel -{ -public: -	LLAudioChannelFMOD(); -	virtual ~LLAudioChannelFMOD(); - -protected: -	/*virtual*/ void play(); -	/*virtual*/ void playSynced(LLAudioChannel *channelp); -	/*virtual*/ void cleanup(); -	/*virtual*/ bool isPlaying(); - -	/*virtual*/ bool updateBuffer(); -	/*virtual*/ void update3DPosition(); -	/*virtual*/ void updateLoop(); - -protected: -	int mChannelID; -	S32 mLastSamplePos; -}; - - -class LLAudioBufferFMOD : public LLAudioBuffer -{ -public: -	LLAudioBufferFMOD(); -	virtual ~LLAudioBufferFMOD(); - -	/*virtual*/ bool loadWAV(const std::string& filename); -	/*virtual*/ U32 getLength(); -	friend class LLAudioChannelFMOD; - -	void set3DMode(bool use3d); -protected: -	FSOUND_SAMPLE *getSample()	{ return mSamplep; } -protected: -	FSOUND_SAMPLE *mSamplep; -}; - - -#endif // LL_AUDIOENGINE_FMOD_H diff --git a/indra/llaudio/llaudioengine_fmodex.h b/indra/llaudio/llaudioengine_fmodex.h index cf3d967d4f..415a9ed0ef 100644 --- a/indra/llaudio/llaudioengine_fmodex.h +++ b/indra/llaudio/llaudioengine_fmodex.h @@ -29,7 +29,6 @@  #define LL_AUDIOENGINE_FMODEX_H  #include "llaudioengine.h" -#include "lllistener_fmod.h"  #include "llwindgen.h"  //Stubs diff --git a/indra/llaudio/lllistener_fmod.cpp b/indra/llaudio/lllistener_fmod.cpp deleted file mode 100644 index 0138f4345e..0000000000 --- a/indra/llaudio/lllistener_fmod.cpp +++ /dev/null @@ -1,125 +0,0 @@ -/**  - * @file listener_fmod.cpp - * @brief implementation of LISTENER class abstracting the audio - * support as a FMOD 3D implementation (windows only) - * - * $LicenseInfo:firstyear=2002&license=viewerlgpl$ - * Second Life Viewer Source Code - * Copyright (C) 2010, 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 - * License as published by the Free Software Foundation; - * version 2.1 of the License only. - *  - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU - * Lesser General Public License for more details. - *  - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA - *  - * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA - * $/LicenseInfo$ - */ - -#include "linden_common.h" -#include "llaudioengine.h" -#include "lllistener_fmod.h" -#include "fmod.h" - -//----------------------------------------------------------------------- -// constructor -//----------------------------------------------------------------------- -LLListener_FMOD::LLListener_FMOD() -{ -	init(); -} - -//----------------------------------------------------------------------- -LLListener_FMOD::~LLListener_FMOD() -{ -} - -//----------------------------------------------------------------------- -void LLListener_FMOD::init(void) -{ -	// do inherited -	LLListener::init(); -	mDopplerFactor = 1.0f; -	mRolloffFactor = 1.0f; -} - -//----------------------------------------------------------------------- -void LLListener_FMOD::translate(LLVector3 offset) -{ -	LLListener::translate(offset); - -	FSOUND_3D_Listener_SetAttributes(mPosition.mV, NULL, mListenAt.mV[0],mListenAt.mV[1],mListenAt.mV[2], mListenUp.mV[0],mListenUp.mV[1],mListenUp.mV[2]); -} - -//----------------------------------------------------------------------- -void LLListener_FMOD::setPosition(LLVector3 pos) -{ -	LLListener::setPosition(pos); - -	FSOUND_3D_Listener_SetAttributes(pos.mV, NULL, mListenAt.mV[0],mListenAt.mV[1],mListenAt.mV[2], mListenUp.mV[0],mListenUp.mV[1],mListenUp.mV[2]); -} - -//----------------------------------------------------------------------- -void LLListener_FMOD::setVelocity(LLVector3 vel) -{ -	LLListener::setVelocity(vel); - -	FSOUND_3D_Listener_SetAttributes(NULL, vel.mV, mListenAt.mV[0],mListenAt.mV[1],mListenAt.mV[2], mListenUp.mV[0],mListenUp.mV[1],mListenUp.mV[2]); -} - -//----------------------------------------------------------------------- -void LLListener_FMOD::orient(LLVector3 up, LLVector3 at) -{ -	LLListener::orient(up, at); - -	// Welcome to the transition between right and left -	// (coordinate systems, that is) -	// Leaving the at vector alone results in a L/R reversal -	// since DX is left-handed and we (LL, OpenGL, OpenAL) are right-handed -	at = -at; - -	FSOUND_3D_Listener_SetAttributes(NULL, NULL, at.mV[0],at.mV[1],at.mV[2], up.mV[0],up.mV[1],up.mV[2]); -} - -//----------------------------------------------------------------------- -void LLListener_FMOD::commitDeferredChanges() -{ -	FSOUND_Update(); -} - - -void LLListener_FMOD::setRolloffFactor(F32 factor) -{ -	mRolloffFactor = factor; -	FSOUND_3D_SetRolloffFactor(factor); -} - - -F32 LLListener_FMOD::getRolloffFactor() -{ -	return mRolloffFactor; -} - - -void LLListener_FMOD::setDopplerFactor(F32 factor) -{ -	mDopplerFactor = factor; -	FSOUND_3D_SetDopplerFactor(factor); -} - - -F32 LLListener_FMOD::getDopplerFactor() -{ -	return mDopplerFactor; -} - - diff --git a/indra/llaudio/lllistener_fmod.h b/indra/llaudio/lllistener_fmod.h deleted file mode 100644 index 818da05d51..0000000000 --- a/indra/llaudio/lllistener_fmod.h +++ /dev/null @@ -1,58 +0,0 @@ -/**  - * @file listener_fmod.h - * @brief Description of LISTENER class abstracting the audio support - * as an FMOD 3D implementation (windows and Linux) - * - * $LicenseInfo:firstyear=2002&license=viewerlgpl$ - * Second Life Viewer Source Code - * Copyright (C) 2010, 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 - * License as published by the Free Software Foundation; - * version 2.1 of the License only. - *  - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU - * Lesser General Public License for more details. - *  - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA - *  - * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA - * $/LicenseInfo$ - */ - -#ifndef LL_LISTENER_FMOD_H -#define LL_LISTENER_FMOD_H - -#include "lllistener.h" - -class LLListener_FMOD : public LLListener -{ - public:   -	LLListener_FMOD(); -	virtual ~LLListener_FMOD(); -	virtual void init();   - -	virtual void translate(LLVector3 offset); -	virtual void setPosition(LLVector3 pos); -	virtual void setVelocity(LLVector3 vel); -	virtual void orient(LLVector3 up, LLVector3 at); -	virtual void commitDeferredChanges(); - -	virtual void setDopplerFactor(F32 factor); -	virtual F32 getDopplerFactor(); -	virtual void setRolloffFactor(F32 factor); -	virtual F32 getRolloffFactor(); - - protected: -	 F32 mDopplerFactor; -	 F32 mRolloffFactor; -}; - -#endif - - diff --git a/indra/llaudio/lllistener_fmodex.cpp b/indra/llaudio/lllistener_fmodex.cpp index 4bc745b89a..2509a7aebc 100644 --- a/indra/llaudio/lllistener_fmodex.cpp +++ b/indra/llaudio/lllistener_fmodex.cpp @@ -1,7 +1,7 @@  /**    * @file listener_fmodex.cpp   * @brief Implementation of LISTENER class abstracting the audio - * support as a FMODEX implementation (windows only) + * support as a FMODEX implementation   *   * $LicenseInfo:firstyear=2002&license=viewerlgpl$   * Second Life Viewer Source Code diff --git a/indra/llaudio/llstreamingaudio_fmod.cpp b/indra/llaudio/llstreamingaudio_fmod.cpp deleted file mode 100644 index bcdea771a7..0000000000 --- a/indra/llaudio/llstreamingaudio_fmod.cpp +++ /dev/null @@ -1,356 +0,0 @@ -/**  - * @file streamingaudio_fmod.cpp - * @brief LLStreamingAudio_FMOD implementation - * - * $LicenseInfo:firstyear=2009&license=viewerlgpl$ - * Second Life Viewer Source Code - * Copyright (C) 2010, 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 - * License as published by the Free Software Foundation; - * version 2.1 of the License only. - *  - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU - * Lesser General Public License for more details. - *  - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA - *  - * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA - * $/LicenseInfo$ - */ - -#include "linden_common.h" - -#include "llmath.h" - -#include "fmod.h" -#include "fmod_errors.h" - -#include "llstreamingaudio_fmod.h" - - -class LLAudioStreamManagerFMOD -{ -public: -	LLAudioStreamManagerFMOD(const std::string& url); -	int	startStream(); -	bool stopStream(); // Returns true if the stream was successfully stopped. -	bool ready(); - -	const std::string& getURL() 	{ return mInternetStreamURL; } - -	int getOpenState(); -protected: -	FSOUND_STREAM* mInternetStream; -	bool mReady; - -	std::string mInternetStreamURL; -}; - - - -//--------------------------------------------------------------------------- -// Internet Streaming -//--------------------------------------------------------------------------- -LLStreamingAudio_FMOD::LLStreamingAudio_FMOD() : -	mCurrentInternetStreamp(NULL), -	mFMODInternetStreamChannel(-1), -	mGain(1.0f) -{ -	// Number of milliseconds of audio to buffer for the audio card. -	// Must be larger than the usual Second Life frame stutter time. -	FSOUND_Stream_SetBufferSize(200); - -	// Here's where we set the size of the network buffer and some buffering  -	// parameters.  In this case we want a network buffer of 16k, we want it  -	// to prebuffer 40% of that when we first connect, and we want it  -	// to rebuffer 80% of that whenever we encounter a buffer underrun. - -	// Leave the net buffer properties at the default. -	//FSOUND_Stream_Net_SetBufferProperties(20000, 40, 80); -} - - -LLStreamingAudio_FMOD::~LLStreamingAudio_FMOD() -{ -	// nothing interesting/safe to do. -} - - -void LLStreamingAudio_FMOD::start(const std::string& url) -{ -	//if (!mInited) -	//{ -	//	llwarns << "startInternetStream before audio initialized" << llendl; -	//	return; -	//} - -	// "stop" stream but don't clear url, etc. in case url == mInternetStreamURL -	stop(); - -	if (!url.empty()) -	{ -		llinfos << "Starting internet stream: " << url << llendl; -		mCurrentInternetStreamp = new LLAudioStreamManagerFMOD(url); -		mURL = url; -	} -	else -	{ -		llinfos << "Set internet stream to null" << llendl; -		mURL.clear(); -	} -} - - -void LLStreamingAudio_FMOD::update() -{ -	// Kill dead internet streams, if possible -	std::list<LLAudioStreamManagerFMOD *>::iterator iter; -	for (iter = mDeadStreams.begin(); iter != mDeadStreams.end();) -	{ -		LLAudioStreamManagerFMOD *streamp = *iter; -		if (streamp->stopStream()) -		{ -			llinfos << "Closed dead stream" << llendl; -			delete streamp; -			mDeadStreams.erase(iter++); -		} -		else -		{ -			iter++; -		} -	} - -	// Don't do anything if there are no streams playing -	if (!mCurrentInternetStreamp) -	{ -		return; -	} - -	int open_state = mCurrentInternetStreamp->getOpenState(); - -	if (!open_state) -	{ -		// Stream is live - -		// start the stream if it's ready -		if (mFMODInternetStreamChannel < 0) -		{ -			mFMODInternetStreamChannel = mCurrentInternetStreamp->startStream(); - -			if (mFMODInternetStreamChannel != -1) -			{ -				// Reset volume to previously set volume -				setGain(getGain()); -				FSOUND_SetPaused(mFMODInternetStreamChannel, false); -			} -		} -	} -		 -	switch(open_state) -	{ -	default: -	case 0: -		// success -		break; -	case -1: -		// stream handle is invalid -		llwarns << "InternetStream - invalid handle" << llendl; -		stop(); -		return; -	case -2: -		// opening -		break; -	case -3: -		// failed to open, file not found, perhaps -		llwarns << "InternetStream - failed to open" << llendl; -		stop(); -		return; -	case -4: -		// connecting -		break; -	case -5: -		// buffering -		break; -	} - -} - -void LLStreamingAudio_FMOD::stop() -{ -	if (mFMODInternetStreamChannel != -1) -	{ -		FSOUND_SetPaused(mFMODInternetStreamChannel, true); -		FSOUND_SetPriority(mFMODInternetStreamChannel, 0); -		mFMODInternetStreamChannel = -1; -	} - -	if (mCurrentInternetStreamp) -	{ -		llinfos << "Stopping internet stream: " << mCurrentInternetStreamp->getURL() << llendl; -		if (mCurrentInternetStreamp->stopStream()) -		{ -			delete mCurrentInternetStreamp; -		} -		else -		{ -			llwarns << "Pushing stream to dead list: " << mCurrentInternetStreamp->getURL() << llendl; -			mDeadStreams.push_back(mCurrentInternetStreamp); -		} -		mCurrentInternetStreamp = NULL; -		//mURL.clear(); -	} -} - -void LLStreamingAudio_FMOD::pause(int pauseopt) -{ -	if (pauseopt < 0) -	{ -		pauseopt = mCurrentInternetStreamp ? 1 : 0; -	} - -	if (pauseopt) -	{ -		if (mCurrentInternetStreamp) -		{ -			stop(); -		} -	} -	else -	{ -		start(getURL()); -	} -} - - -// A stream is "playing" if it has been requested to start.  That -// doesn't necessarily mean audio is coming out of the speakers. -int LLStreamingAudio_FMOD::isPlaying() -{ -	if (mCurrentInternetStreamp) -	{ -		return 1; // Active and playing -	} -	else if (!mURL.empty()) -	{ -		return 2; // "Paused" -	} -	else -	{ -		return 0; -	} -} - - -F32 LLStreamingAudio_FMOD::getGain() -{ -	return mGain; -} - - -std::string LLStreamingAudio_FMOD::getURL() -{ -	return mURL; -} - - -void LLStreamingAudio_FMOD::setGain(F32 vol) -{ -	mGain = vol; - -	if (mFMODInternetStreamChannel != -1) -	{ -		vol = llclamp(vol * vol, 0.f, 1.f); -		int vol_int = llround(vol * 255.f); -		FSOUND_SetVolumeAbsolute(mFMODInternetStreamChannel, vol_int); -	} -} - - -/////////////////////////////////////////////////////// -// manager of possibly-multiple internet audio streams - -LLAudioStreamManagerFMOD::LLAudioStreamManagerFMOD(const std::string& url) : -	mInternetStream(NULL), -	mReady(false) -{ -	mInternetStreamURL = url; -	mInternetStream = FSOUND_Stream_Open(url.c_str(), FSOUND_NORMAL | FSOUND_NONBLOCKING, 0, 0); -	if (!mInternetStream) -	{ -		llwarns << "Couldn't open fmod stream, error " -			<< FMOD_ErrorString(FSOUND_GetError()) -			<< llendl; -		mReady = false; -		return; -	} - -	mReady = true; -} - -int LLAudioStreamManagerFMOD::startStream() -{ -	// We need a live and opened stream before we try and play it. -	if (!mInternetStream || getOpenState()) -	{ -		llwarns << "No internet stream to start playing!" << llendl; -		return -1; -	} - -	// Make sure the stream is set to 2D mode. -	FSOUND_Stream_SetMode(mInternetStream, FSOUND_2D); - -	return FSOUND_Stream_PlayEx(FSOUND_FREE, mInternetStream, NULL, true); -} - -bool LLAudioStreamManagerFMOD::stopStream() -{ -	if (mInternetStream) -	{ -		int read_percent = 0; -		int status = 0; -		int bitrate = 0; -		unsigned int flags = 0x0; -		FSOUND_Stream_Net_GetStatus(mInternetStream, &status, &read_percent, &bitrate, &flags); - -		bool close = true; -		switch (status) -		{ -		case FSOUND_STREAM_NET_CONNECTING: -			close = false; -			break; -		case FSOUND_STREAM_NET_NOTCONNECTED: -		case FSOUND_STREAM_NET_BUFFERING: -		case FSOUND_STREAM_NET_READY: -		case FSOUND_STREAM_NET_ERROR: -		default: -			close = true; -		} - -		if (close) -		{ -			FSOUND_Stream_Close(mInternetStream); -			mInternetStream = NULL; -			return true; -		} -		else -		{ -			return false; -		} -	} -	else -	{ -		return true; -	} -} - -int LLAudioStreamManagerFMOD::getOpenState() -{ -	int open_state = FSOUND_Stream_GetOpenState(mInternetStream); -	return open_state; -} diff --git a/indra/llaudio/llstreamingaudio_fmod.h b/indra/llaudio/llstreamingaudio_fmod.h deleted file mode 100644 index 9970f0d03b..0000000000 --- a/indra/llaudio/llstreamingaudio_fmod.h +++ /dev/null @@ -1,62 +0,0 @@ -/**  - * @file streamingaudio_fmod.h - * @author Tofu Linden - * @brief Definition of LLStreamingAudio_FMOD implementation - * - * $LicenseInfo:firstyear=2009&license=viewerlgpl$ - * Second Life Viewer Source Code - * Copyright (C) 2010, 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 - * License as published by the Free Software Foundation; - * version 2.1 of the License only. - *  - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU - * Lesser General Public License for more details. - *  - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA - *  - * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA - * $/LicenseInfo$ - */ - -#ifndef LL_STREAMINGAUDIO_FMOD_H -#define LL_STREAMINGAUDIO_FMOD_H - -#include "stdtypes.h" // from llcommon - -#include "llstreamingaudio.h" - -class LLAudioStreamManagerFMOD; - -class LLStreamingAudio_FMOD : public LLStreamingAudioInterface -{ - public: -	LLStreamingAudio_FMOD(); -	/*virtual*/ ~LLStreamingAudio_FMOD(); - -	/*virtual*/ void start(const std::string& url); -	/*virtual*/ void stop(); -	/*virtual*/ void pause(int pause); -	/*virtual*/ void update(); -	/*virtual*/ int isPlaying(); -	/*virtual*/ void setGain(F32 vol); -	/*virtual*/ F32 getGain(); -	/*virtual*/ std::string getURL(); - -private: -	LLAudioStreamManagerFMOD *mCurrentInternetStreamp; -	int mFMODInternetStreamChannel; -	std::list<LLAudioStreamManagerFMOD *> mDeadStreams; - -	std::string mURL; -	F32 mGain; -}; - - -#endif // LL_STREAMINGAUDIO_FMOD_H diff --git a/indra/llaudio/llstreamingaudio_fmodex.h b/indra/llaudio/llstreamingaudio_fmodex.h index 3751dd60ad..42b6b3aaa8 100644 --- a/indra/llaudio/llstreamingaudio_fmodex.h +++ b/indra/llaudio/llstreamingaudio_fmodex.h @@ -24,8 +24,8 @@   * $/LicenseInfo$   */ -#ifndef LL_STREAMINGAUDIO_FMOD_H -#define LL_STREAMINGAUDIO_FMOD_H +#ifndef LL_STREAMINGAUDIO_FMODEX_H +#define LL_STREAMINGAUDIO_FMODEX_H  #include "stdtypes.h" // from llcommon @@ -72,4 +72,4 @@ private:  }; -#endif // LL_STREAMINGAUDIO_FMOD_H +#endif // LL_STREAMINGAUDIO_FMODEX_H diff --git a/indra/llaudio/llvorbisencode.cpp b/indra/llaudio/llvorbisencode.cpp index 0e0c80a456..dfd5da12b3 100644 --- a/indra/llaudio/llvorbisencode.cpp +++ b/indra/llaudio/llvorbisencode.cpp @@ -35,7 +35,7 @@  #include "llapr.h"  //#if LL_DARWIN -// MBW -- XXX -- Getting rid of SecondLifeVorbis for now -- no fmod means no name collisions. +// MBW -- XXX -- Getting rid of SecondLifeVorbis for now  #if 0  #include "VorbisFramework.h" diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 793b01baa1..24a35bf8a2 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -11,7 +11,6 @@ include(OpenSSL)  include(DragDrop)  include(EXPAT)  include(FMODEX) -set(FMOD OFF)  include(OPENAL)  include(FindOpenGL)  include(Hunspell) @@ -57,10 +56,6 @@ if(FMODEX)    include_directories(${FMODEX_INCLUDE_DIR})  endif(FMODEX) -if(FMOD) -  include_directories(${FMOD_INCLUDE_DIR}) -endif(FMOD) -  include_directories(      ${DBUSGLIB_INCLUDE_DIRS}      ${JSONCPP_INCLUDE_DIR} @@ -1527,20 +1522,15 @@ endif (WINDOWS)  if (OPENAL)    set(LLSTARTUP_COMPILE_FLAGS "${LLSTARTUP_COMPILE_FLAGS} -DLL_OPENAL") -endif (OPENAL) +endif (OPENAL)           -if (FMOD OR FMODEX) -  if (FMODEX) -    set(LLSTARTUP_COMPILE_FLAGS "${LLSTARTUP_COMPILE_FLAGS} -DLL_FMODEX") -  endif (FMODEX) -  if (FMOD) -    set(LLSTARTUP_COMPILE_FLAGS "${LLSTARTUP_COMPILE_FLAGS} -DLL_FMOD") -  endif (FMOD) +if (FMODEX) +  set(LLSTARTUP_COMPILE_FLAGS "${LLSTARTUP_COMPILE_FLAGS} -DLL_FMODEX") -  if (DARWIN AND FMOD) +  if (DARWIN)      set(fmodwrapper_SOURCE_FILES fmodwrapper.cpp)      add_library(fmodwrapper SHARED ${fmodwrapper_SOURCE_FILES}) -    set(fmodwrapper_needed_LIBRARIES ${FMOD_LIBRARY} ${CARBON_LIBRARY}) +    set(fmodwrapper_needed_LIBRARIES ${FMODEX_LIBRARY} ${CARBON_LIBRARY})      set_target_properties(        fmodwrapper        PROPERTIES @@ -1550,16 +1540,11 @@ if (FMOD OR FMODEX)        )      set(FMODWRAPPER_LIBRARY fmodwrapper)      target_link_libraries(fmodwrapper ${fmodwrapper_needed_LIBRARIES}) -  else (DARWIN AND FMOD) -    # fmodwrapper unnecessary on linux or windows for fmod and darwin for fmodex -    if (FMODEX) -       set(FMODWRAPPER_LIBRARY ${FMODEX_LIBRARY}) -    endif (FMODEX) -    if (FMOD) -       set(FMODWRAPPER_LIBRARY ${FMOD_LIBRARY}) -    endif (FMOD) -  endif (DARWIN AND FMOD) -endif (FMOD OR FMODEX) +  else (DARWIN) +    # fmodwrapper unnecessary on linux or windows +    set(FMODWRAPPER_LIBRARY ${FMODEX_LIBRARY}) +  endif (DARWIN) +endif (FMODEX)  set_source_files_properties(llstartup.cpp PROPERTIES COMPILE_FLAGS "${LLSTARTUP_COMPILE_FLAGS}") @@ -1705,15 +1690,7 @@ if (WINDOWS)             ${SHARED_LIB_STAGING_DIR}/Debug/fmodexL.dll            )      endif (FMODEX) - -    if (FMOD) -      list(APPEND COPY_INPUT_DEPENDENCIES -           ${SHARED_LIB_STAGING_DIR}/Release/fmod.dll -           ${SHARED_LIB_STAGING_DIR}/RelWithDebInfo/fmod.dll -           ${SHARED_LIB_STAGING_DIR}/Debug/fmod.dll -          ) -    endif (FMOD) - +          add_custom_command(        OUTPUT  ${CMAKE_CFG_INTDIR}/copy_touched.bat        COMMAND ${PYTHON_EXECUTABLE} diff --git a/indra/newview/fmodwrapper.cpp b/indra/newview/fmodwrapper.cpp index 16f1d19a78..e74c4a1d7c 100644 --- a/indra/newview/fmodwrapper.cpp +++ b/indra/newview/fmodwrapper.cpp @@ -26,12 +26,12 @@  extern "C"  { -	void FSOUND_Init(void); +	void FMOD_System_Init(void);  }  void* fmodwrapper(void)  {  	// When building the fmodwrapper library, the linker doesn't seem to want to bring in libfmod.a unless I explicitly  	// reference at least one symbol in the library.  This seemed like the simplest way. -	return (void*)&FSOUND_Init; +	return (void*)&FMOD_System_Init;  } diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 1000c0e1e8..55d7a5d45d 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -1677,19 +1677,7 @@ bool LLAppViewer::cleanup()  		gAudiop->setStreamingAudioImpl(NULL);  		// shut down the audio subsystem - -		bool want_longname = false; -		if (gAudiop->getDriverName(want_longname) == "FMOD") -		{ -			// This hack exists because fmod likes to occasionally -			// crash or hang forever when shutting down, for no -			// apparent reason. -			llwarns << "Hack, skipping FMOD audio engine cleanup" << llendflush; -		} -		else -		{ -			gAudiop->shutdown(); -		} +        gAudiop->shutdown();  		delete gAudiop;  		gAudiop = NULL; diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index 6a874d1af5..18ef36a893 100644 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -41,10 +41,6 @@  # include "llaudioengine_fmodex.h"  #endif -#ifdef LL_FMOD -# include "llaudioengine_fmod.h" -#endif -  #ifdef LL_OPENAL  #include "llaudioengine_openal.h"  #endif @@ -648,22 +644,11 @@ bool idle_startup()  				gAudiop = (LLAudioEngine *) new LLAudioEngine_OpenAL();  			}  #endif - -#ifdef LL_FMOD			 -			if (!gAudiop -#if !LL_WINDOWS -			    && NULL == getenv("LL_BAD_FMOD_DRIVER") -#endif // !LL_WINDOWS -			    ) -			{ -				gAudiop = (LLAudioEngine *) new LLAudioEngine_FMOD(); -			} -#endif - +              			if (gAudiop)  			{  #if LL_WINDOWS -				// FMOD on Windows needs the window handle to stop playing audio +				// FMOD Ex on Windows needs the window handle to stop playing audio  				// when window is minimized. JC  				void* window_handle = (HWND)gViewerWindow->getPlatformWindow();  #else diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index cdd227e9fe..37b119041f 100644 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -376,10 +376,6 @@ class WindowsManifest(ViewerManifest):              except:                  print "Skipping fmodex audio library(assuming other audio engine)" -            # Get fmod dll, continue if missing -            if not self.path("fmod.dll"): -                print "Skipping fmod.dll" -              # For textures              if self.args['configuration'].lower() == 'debug':                  self.path("openjpegd.dll")  | 
