From f42358ad08370fecad167ca1bcebb5ee71aa625c Mon Sep 17 00:00:00 2001 From: Braden Obrzut Date: Sat, 13 Aug 2011 21:11:09 +0000 Subject: [PATCH] - Backported FMOD Ex 4.34 fixes from gzdoom-macosx. (With changes to continue to allow compilation with 4.22-4.28.) SVN r3278 (trunk) --- specs/fmod_version.txt | 2 +- src/sound/fmodsound.cpp | 23 +++++++++++++++++++++-- wadsrc/static/menudef.txt | 1 + 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/specs/fmod_version.txt b/specs/fmod_version.txt index c285c50b98..1016b93883 100644 --- a/specs/fmod_version.txt +++ b/specs/fmod_version.txt @@ -1,3 +1,3 @@ -This version of ZDoom must be compiled with any version between 4.22 and 4.28 inclusive. +This version of ZDoom must be compiled with any version between 4.22 and 4.28 inclusive or 4.34. Use of the latest 4.26 is recommended though due to technical issues with 4.28. diff --git a/src/sound/fmodsound.cpp b/src/sound/fmodsound.cpp index 308e6db9e4..e1a15bb248 100644 --- a/src/sound/fmodsound.cpp +++ b/src/sound/fmodsound.cpp @@ -75,6 +75,10 @@ extern HWND Window; #define SPECTRUM_SIZE 256 +#if FMOD_VERSION < 0x43400 +#define FMOD_OPENSTATE_PLAYING FMOD_OPENSTATE_STREAMING +#endif + // TYPES ------------------------------------------------------------------- struct FEnumList @@ -157,7 +161,9 @@ static const FEnumList OutputNames[] = { "Windows Multimedia", FMOD_OUTPUTTYPE_WINMM }, { "WinMM", FMOD_OUTPUTTYPE_WINMM }, { "WaveOut", FMOD_OUTPUTTYPE_WINMM }, +#if FMOD_VERSION < 0x43400 { "OpenAL", FMOD_OUTPUTTYPE_OPENAL }, +#endif { "WASAPI", FMOD_OUTPUTTYPE_WASAPI }, { "ASIO", FMOD_OUTPUTTYPE_ASIO }, @@ -165,6 +171,9 @@ static const FEnumList OutputNames[] = { "OSS", FMOD_OUTPUTTYPE_OSS }, { "ALSA", FMOD_OUTPUTTYPE_ALSA }, { "ESD", FMOD_OUTPUTTYPE_ESD }, +#if FMOD_VERSION >= 0x43400 + { "PulseAudio", FMOD_OUTPUTTYPE_PULSEAUDIO }, +#endif { "SDL", 666 }, // Mac @@ -388,12 +397,17 @@ public: bool is; FMOD_OPENSTATE openstate = FMOD_OPENSTATE_MAX; bool starving; + bool diskbusy; if (Stream == NULL) { return true; } +#if FMOD_VERSION < 0x43400 if (FMOD_OK != Stream->getOpenState(&openstate, NULL, &starving)) +#else + if (FMOD_OK != Stream->getOpenState(&openstate, NULL, &starving, &diskbusy)) +#endif { openstate = FMOD_OPENSTATE_ERROR; } @@ -436,7 +450,7 @@ public: Owner->Sys->setStreamBufferSize(16*1024, FMOD_TIMEUNIT_RAWBYTES); return result != FMOD_OK; } - if (JustStarted && openstate == FMOD_OPENSTATE_STREAMING) + if (JustStarted && openstate == FMOD_OPENSTATE_PLAYING) { JustStarted = false; } @@ -480,14 +494,19 @@ public: unsigned int percentbuffered; unsigned int position; bool starving; + bool diskbusy; float volume; float frequency; bool paused; bool isplaying; +#if FMOD_VERSION < 0x43400 if (FMOD_OK == Stream->getOpenState(&openstate, &percentbuffered, &starving)) +#else + if (FMOD_OK == Stream->getOpenState(&openstate, &percentbuffered, &starving, &diskbusy)) +#endif { - stats = (openstate <= FMOD_OPENSTATE_STREAMING ? OpenStateNames[openstate] : "Unknown state"); + stats = (openstate <= FMOD_OPENSTATE_PLAYING ? OpenStateNames[openstate] : "Unknown state"); stats.AppendFormat(",%3d%% buffered, %s", percentbuffered, starving ? "Starving" : "Well-fed"); } if (Channel == NULL) diff --git a/wadsrc/static/menudef.txt b/wadsrc/static/menudef.txt index f7e0b51b24..73928b8bda 100644 --- a/wadsrc/static/menudef.txt +++ b/wadsrc/static/menudef.txt @@ -1266,6 +1266,7 @@ OptionString SoundOutputsUnix "ALSA", "ALSA" "SDL", "SDL" "ESD", "ESD" + "PulseAudio", "PulseAudio" "No sound", "No sound" }