commit:     08f671f9dce9ac08533038bca37c4a8563560710
Author:     Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Thu Apr 15 19:57:47 2021 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Thu Apr 15 20:44:18 2021 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=08f671f9

games-engines/scummvm: Backport fluidsynth-2.2 fix

Closes: https://bugs.gentoo.org/782805
Signed-off-by: Michał Górny <mgorny <AT> gentoo.org>

 .../files/scummvm-2.2.0-fluidsynth-2.2.patch       | 150 +++++++++++++++++++++
 ...cummvm-2.2.0.ebuild => scummvm-2.2.0-r1.ebuild} |   5 +-
 2 files changed, 153 insertions(+), 2 deletions(-)

diff --git a/games-engines/scummvm/files/scummvm-2.2.0-fluidsynth-2.2.patch 
b/games-engines/scummvm/files/scummvm-2.2.0-fluidsynth-2.2.patch
new file mode 100644
index 00000000000..8bb94ec6ab6
--- /dev/null
+++ b/games-engines/scummvm/files/scummvm-2.2.0-fluidsynth-2.2.patch
@@ -0,0 +1,150 @@
+diff --git a/audio/softsynth/fluidsynth.cpp b/audio/softsynth/fluidsynth.cpp
+index e0d7c4e3df..d8e82c24f5 100644
+--- a/audio/softsynth/fluidsynth.cpp
++++ b/audio/softsynth/fluidsynth.cpp
+@@ -46,6 +46,14 @@
+ #include "backends/platform/ios7/ios7_common.h"
+ #endif
+ 
++// We assume here Fluidsynth minor will never be above 255 and
++// that micro versions won't break API compatibility
++#if defined(FLUIDSYNTH_VERSION_MAJOR) && defined(FLUIDSYNTH_VERSION_MINOR)
++#define FS_API_VERSION ((FLUIDSYNTH_VERSION_MAJOR << 8) | 
FLUIDSYNTH_VERSION_MINOR)
++#else
++#define FS_API_VERSION 0
++#endif
++
+ class MidiDriver_FluidSynth : public MidiDriver_Emulated {
+ private:
+       MidiChannel_MPU401 _midiChannels[16];
+@@ -75,7 +83,7 @@ public:
+ 
+       void setEngineSoundFont(Common::SeekableReadStream *soundFontData) 
override;
+       bool acceptsSoundFontData() override {
+-#if defined(FLUIDSYNTH_VERSION_MAJOR) && FLUIDSYNTH_VERSION_MAJOR > 1
++#if FS_API_VERSION >= 0x0200
+               return true;
+ #else
+               return false;
+@@ -134,7 +142,7 @@ void MidiDriver_FluidSynth::setStr(const char *name, const 
char *val) {
+ 
+ // Soundfont memory loader callback functions.
+ 
+-#if defined(FLUIDSYNTH_VERSION_MAJOR) && FLUIDSYNTH_VERSION_MAJOR > 1
++#if FS_API_VERSION >= 0x0200
+ static void *SoundFontMemLoader_open(const char *filename) {
+       void *p;
+       if (filename[0] != '&') {
+@@ -144,11 +152,19 @@ static void *SoundFontMemLoader_open(const char 
*filename) {
+       return p;
+ }
+ 
++#if FS_API_VERSION >= 0x0202
++static int SoundFontMemLoader_read(void *buf, fluid_long_long_t count, void 
*handle) {
++#else
+ static int SoundFontMemLoader_read(void *buf, int count, void *handle) {
++#endif
+       return ((Common::SeekableReadStream *) handle)->read(buf, count) == 
(uint32)count ? FLUID_OK : FLUID_FAILED;
+ }
+ 
++#if FS_API_VERSION >= 0x0202
++static int SoundFontMemLoader_seek(void *handle, fluid_long_long_t offset, 
int origin) {
++#else
+ static int SoundFontMemLoader_seek(void *handle, long offset, int origin) {
++#endif
+       return ((Common::SeekableReadStream *) handle)->seek(offset, origin) ? 
FLUID_OK : FLUID_FAILED;
+ }
+ 
+@@ -157,7 +173,11 @@ static int SoundFontMemLoader_close(void *handle) {
+       return FLUID_OK;
+ }
+ 
++#if FS_API_VERSION >= 0x0202
++static fluid_long_long_t SoundFontMemLoader_tell(void *handle) {
++#else
+ static long SoundFontMemLoader_tell(void *handle) {
++#endif
+       return ((Common::SeekableReadStream *) handle)->pos();
+ }
+ #endif
+@@ -166,7 +186,8 @@ int MidiDriver_FluidSynth::open() {
+       if (_isOpen)
+               return MERR_ALREADY_OPEN;
+ 
+-#if defined(FLUIDSYNTH_VERSION_MAJOR) && FLUIDSYNTH_VERSION_MAJOR > 1
++
++#if FS_API_VERSION >= 0x0200
+       // When provided with in-memory SoundFont data, only use the configured
+       // SoundFont instead if it's explicitly configured on the current game.
+       bool isUsingInMemorySoundFontData = _engineSoundFontData && 
!ConfMan.getActiveDomain()->contains("soundfont");
+@@ -195,7 +216,11 @@ int MidiDriver_FluidSynth::open() {
+       _synth = new_fluid_synth(_settings);
+ 
+       if (ConfMan.getBool("fluidsynth_chorus_activate")) {
++#if FS_API_VERSION >= 0x0202
++              fluid_synth_chorus_on(_synth, -1, 1);
++#else
+               fluid_synth_set_chorus_on(_synth, 1);
++#endif
+ 
+               int chorusNr = ConfMan.getInt("fluidsynth_chorus_nr");
+               double chorusLevel = 
(double)ConfMan.getInt("fluidsynth_chorus_level") / 100.0;
+@@ -210,22 +235,49 @@ int MidiDriver_FluidSynth::open() {
+                       chorusType = FLUID_CHORUS_MOD_TRIANGLE;
+               }
+ 
++#if FS_API_VERSION >= 0x0202
++              fluid_synth_set_chorus_group_nr(_synth, -1, chorusNr);
++              fluid_synth_set_chorus_group_level(_synth, -1, chorusLevel);
++              fluid_synth_set_chorus_group_speed(_synth, -1, chorusSpeed);
++              fluid_synth_set_chorus_group_depth(_synth, -1, chorusDepthMs);
++              fluid_synth_set_chorus_group_type(_synth, -1, chorusType);
++#else
+               fluid_synth_set_chorus(_synth, chorusNr, chorusLevel, 
chorusSpeed, chorusDepthMs, chorusType);
++#endif
+       } else {
++#if FS_API_VERSION >= 0x0202
++              fluid_synth_chorus_on(_synth, -1, 0);
++#else
+               fluid_synth_set_chorus_on(_synth, 0);
++#endif
+       }
+ 
+       if (ConfMan.getBool("fluidsynth_reverb_activate")) {
++#if FS_API_VERSION >= 0x0202
++              fluid_synth_reverb_on(_synth, -1, 1);
++#else
+               fluid_synth_set_reverb_on(_synth, 1);
++#endif
+ 
+               double reverbRoomSize = 
(double)ConfMan.getInt("fluidsynth_reverb_roomsize") / 100.0;
+               double reverbDamping = 
(double)ConfMan.getInt("fluidsynth_reverb_damping") / 100.0;
+               int reverbWidth = ConfMan.getInt("fluidsynth_reverb_width");
+               double reverbLevel = 
(double)ConfMan.getInt("fluidsynth_reverb_level") / 100.0;
+ 
++#if FS_API_VERSION >= 0x0202
++              fluid_synth_set_reverb_group_roomsize(_synth, -1, 
reverbRoomSize);
++              fluid_synth_set_reverb_group_damp(_synth, -1, reverbDamping);
++              fluid_synth_set_reverb_group_width(_synth, -1, reverbWidth);
++              fluid_synth_set_reverb_group_level(_synth, -1, reverbLevel);
++#else
+               fluid_synth_set_reverb(_synth, reverbRoomSize, reverbDamping, 
reverbWidth, reverbLevel);
++#endif
+       } else {
++#if FS_API_VERSION >= 0x0202
++              fluid_synth_reverb_on(_synth, -1, 0);
++#else
+               fluid_synth_set_reverb_on(_synth, 0);
++#endif
+       }
+ 
+       Common::String interpolation = 
ConfMan.get("fluidsynth_misc_interpolation");
+@@ -246,7 +298,7 @@ int MidiDriver_FluidSynth::open() {
+       const char *soundfont = !isUsingInMemorySoundFontData ?
+                       ConfMan.get("soundfont").c_str() : 
Common::String::format("&%p", (void *)_engineSoundFontData).c_str();
+ 
+-#if defined(FLUIDSYNTH_VERSION_MAJOR) && FLUIDSYNTH_VERSION_MAJOR > 1
++#if FS_API_VERSION >= 0x0200
+       if (isUsingInMemorySoundFontData) {
+               fluid_sfloader_t *soundFontMemoryLoader = 
new_fluid_defsfloader(_settings);
+               fluid_sfloader_set_callbacks(soundFontMemoryLoader,

diff --git a/games-engines/scummvm/scummvm-2.2.0.ebuild 
b/games-engines/scummvm/scummvm-2.2.0-r1.ebuild
similarity index 96%
rename from games-engines/scummvm/scummvm-2.2.0.ebuild
rename to games-engines/scummvm/scummvm-2.2.0-r1.ebuild
index 93e50eddec4..f4ab2f0515e 100644
--- a/games-engines/scummvm/scummvm-2.2.0.ebuild
+++ b/games-engines/scummvm/scummvm-2.2.0-r1.ebuild
@@ -1,4 +1,4 @@
-# Copyright 1999-2020 Gentoo Authors
+# Copyright 1999-2021 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 EAPI=7
@@ -20,7 +20,7 @@ RDEPEND="
        aac? ( media-libs/faad2 )
        alsa? ( media-libs/alsa-lib )
        flac? ( media-libs/flac )
-       fluidsynth? ( media-sound/fluidsynth )
+       fluidsynth? ( media-sound/fluidsynth:= )
        fribidi? ( dev-libs/fribidi )
        gtk? (
                dev-libs/glib:2
@@ -56,6 +56,7 @@ S="${WORKDIR}/${P/_/}"
 
 PATCHES=(
        "${FILESDIR}/${P}-ultima_engine_lua_dep.patch"
+       "${FILESDIR}/${P}-fluidsynth-2.2.patch"
 )
 
 src_prepare() {

Reply via email to