Hello community,

here is the log from the commit of package SDL2_mixer for openSUSE:Factory 
checked in at 2018-01-13 21:40:24
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/SDL2_mixer (Old)
 and      /work/SRC/openSUSE:Factory/.SDL2_mixer.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "SDL2_mixer"

Sat Jan 13 21:40:24 2018 rev:5 rq:559888 version:2.0.2

Changes:
--------
--- /work/SRC/openSUSE:Factory/SDL2_mixer/SDL2_mixer.changes    2016-01-22 
01:07:25.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.SDL2_mixer.new/SDL2_mixer.changes       
2018-01-13 21:40:27.254191497 +0100
@@ -1,0 +2,16 @@
+Sat Dec 23 04:21:51 UTC 2017 - 9@cirno.systems
+
+- update to version 2.0.2
+
+  * 24-bit and surround sound support for FLAC audio files
+  * Updated for SDL 2.0.6 and newer
+  * Support for MP3 playback using mpg123
+  * Added Mix_OpenAudioDevice() to specify the audio device to open
+- Add SDL2_mixer-only-load-required-interfaces.patch
+  Prevents initializing decoders unnecessarily.
+  Fixes an issue with applications that use the API incorrectly
+  (due to misleading documentation).
+- Build with libmpg123 where available
+- Fix fluidsynth linking
+
+-------------------------------------------------------------------

Old:
----
  SDL2_mixer-2.0.1.tar.gz

New:
----
  SDL2_mixer-2.0.2.tar.gz
  SDL2_mixer-only-load-required-interfaces.patch

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ SDL2_mixer.spec ++++++
--- /var/tmp/diff_new_pack.RCcdHe/_old  2018-01-13 21:40:28.594129055 +0100
+++ /var/tmp/diff_new_pack.RCcdHe/_new  2018-01-13 21:40:28.594129055 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package SDL2_mixer
 #
-# Copyright (c) 2016 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany.
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -18,7 +18,7 @@
 
 Name:           SDL2_mixer
 %define lname  libSDL2_mixer-2_0-0
-Version:        2.0.1
+Version:        2.0.2
 Release:        0
 Summary:        SDL2 sound mixer library
 License:        Zlib
@@ -28,12 +28,16 @@
 #Hg-Clone:     http://hg.libsdl.org/SDL_mixer/
 Source:         
http://libsdl.org/projects/SDL_mixer/release/%name-%version.tar.gz
 Source1:        baselibs.conf
+Patch0:         SDL2_mixer-only-load-required-interfaces.patch
 BuildRequires:  dos2unix
 BuildRequires:  pkg-config
 BuildRequires:  pkgconfig(flac)
 BuildRequires:  pkgconfig(fluidsynth)
 BuildRequires:  pkgconfig(libmikmod)
 BuildRequires:  pkgconfig(libmodplug) >= 0.8.8
+%if !(0%{?sle_version} == 120200 && 0%{?is_opensuse})
+BuildRequires:  pkgconfig(libmpg123)
+%endif
 BuildRequires:  pkgconfig(sdl2)
 BuildRequires:  pkgconfig(vorbis)
 Recommends:     timidity
@@ -42,17 +46,17 @@
 %description
 A multichannel audio mixer. It supports four channels of 16-bit stereo
 audio, plus a single channel of music, mixed by the popular MikMod MOD,
-Timidity MIDI, and SMPEG MP3 libraries.
+Timidity MIDI, and mpg123 MP3 libraries.
 
 %package -n %lname
-Summary:        Simple DirectMedia Layer 2 – Sound mixer library
+Summary:        Simple DirectMedia Layer 2 – Sound mixer library
 Group:          System/Libraries
 Provides:       SDL2_mixer = %version-%release
 
 %description -n %lname
 A multichannel audio mixer. It supports four channels of 16-bit stereo
 audio, plus a single channel of music, mixed by the popular MikMod MOD,
-Timidity MIDI, and SMPEG MP3 libraries.
+Timidity MIDI, and mpg123 MP3 libraries.
 
 %package -n libSDL2_mixer-devel
 Summary:        Development files for the SDL2 sound mixer library
@@ -63,10 +67,11 @@
 %description -n libSDL2_mixer-devel
 A multi-channel audio mixer. It supports 4 channels of 16-bit stereo
 audio, plus a single channel of music, mixed by the popular MikMod MOD,
-Timidity MIDI, and SMPEG MP3 libraries.
+Timidity MIDI, and mpg123 MP3 libraries.
 
 %prep
 %setup -q
+%patch0 -p1
 dos2unix *.txt
 rm -rf external
 
@@ -74,10 +79,14 @@
 %configure \
        --disable-music-mod-modplug-shared \
        --disable-music-mod-mikmod-shared \
-       --disable-music-fluidsynth-shared \
+       --disable-music-midi-fluidsynth-shared \
        --disable-music-ogg-shared \
        --disable-music-flac-shared \
-       --enable-music-mp3-smpeg-shared \
+%if 0%{?sle_version} == 120200 && 0%{?is_opensuse}
+       --enable-music-mp3-mpg123-shared \
+%else
+       --disable-music-mp3-mpg123-shared \
+%endif
        --disable-static
 make %{?_smp_mflags}
 

++++++ SDL2_mixer-2.0.1.tar.gz -> SDL2_mixer-2.0.2.tar.gz ++++++
/work/SRC/openSUSE:Factory/SDL2_mixer/SDL2_mixer-2.0.1.tar.gz 
/work/SRC/openSUSE:Factory/.SDL2_mixer.new/SDL2_mixer-2.0.2.tar.gz differ: char 
4, line 1

++++++ SDL2_mixer-only-load-required-interfaces.patch ++++++

# HG changeset patch
# User Sam Lantinga <slou...@libsdl.org>
# Date 1508906510 25200
# Node ID 7fa15b556953502e11c911d104450ae02c807c84
# Parent  7d6df0a13bd02a3eb7fbdf64eca628913d46c291
Only load music interfaces that are explicitly initialized or needed for audio 
content

diff -r 7d6df0a13bd0 -r 7fa15b556953 mixer.c
--- a/mixer.c   Mon Oct 23 12:40:10 2017 -0700
+++ b/mixer.c   Tue Oct 24 21:41:50 2017 -0700
@@ -118,9 +118,19 @@
     return SDL_FALSE;
 }
 
-static void add_chunk_decoder(const char *decoder)
+void add_chunk_decoder(const char *decoder)
 {
-    void *ptr = SDL_realloc((void *)chunk_decoders, (num_decoders + 1) * 
sizeof (const char *));
+    int i;
+    void *ptr;
+
+    /* Check to see if we already have this decoder */
+    for (i = 0; i < num_decoders; ++i) {
+        if (SDL_strcmp(chunk_decoders[i], decoder) == 0) {
+            return;
+        }
+    }
+
+    ptr = SDL_realloc((void *)chunk_decoders, (num_decoders + 1) * sizeof 
(const char *));
     if (ptr == NULL) {
         return;  /* oh well, go on without it. */
     }
@@ -140,44 +150,47 @@
 {
     int result = 0;
 
-    load_music();
-
     if (flags & MIX_INIT_FLAC) {
-        if (has_music(MUS_FLAC)) {
+        if (load_music_type(MUS_FLAC)) {
+            open_music_type(MUS_FLAC);
             result |= MIX_INIT_FLAC;
         } else {
             Mix_SetError("FLAC support not available");
         }
     }
     if (flags & MIX_INIT_MOD) {
-        if (has_music(MUS_MOD)) {
+        if (load_music_type(MUS_MOD)) {
+            open_music_type(MUS_MOD);
             result |= MIX_INIT_MOD;
         } else {
             Mix_SetError("MOD support not available");
         }
     }
     if (flags & MIX_INIT_MP3) {
-        if (has_music(MUS_MP3)) {
+        if (load_music_type(MUS_MP3)) {
+            open_music_type(MUS_MP3);
             result |= MIX_INIT_MP3;
         } else {
             Mix_SetError("MP3 support not available");
         }
     }
     if (flags & MIX_INIT_OGG) {
-        if (has_music(MUS_OGG)) {
+        if (load_music_type(MUS_OGG)) {
+            open_music_type(MUS_OGG);
             result |= MIX_INIT_OGG;
         } else {
             Mix_SetError("OGG support not available");
         }
     }
     if (flags & MIX_INIT_MID) {
-        if (has_music(MUS_MID)) {
+        if (load_music_type(MUS_MID)) {
+            open_music_type(MUS_MID);
             result |= MIX_INIT_MID;
         } else {
             Mix_SetError("MIDI support not available");
         }
     }
-    return (result);
+    return result;
 }
 
 void Mix_Quit()
@@ -400,13 +413,6 @@
     PrintFormat("Audio device", &mixer);
 #endif
 
-    /* Initialize the music players */
-    load_music();
-    if (open_music(&mixer) < 0) {
-        SDL_CloseAudioDevice(audio_device);
-        return(-1);
-    }
-
     num_channels = MIX_CHANNELS;
     mix_channel = (struct _Mix_Channel *) SDL_malloc(num_channels * 
sizeof(struct _Mix_Channel));
 
@@ -431,21 +437,9 @@
     add_chunk_decoder("WAVE");
     add_chunk_decoder("AIFF");
     add_chunk_decoder("VOC");
-    if (has_music(MUS_MOD)) {
-        add_chunk_decoder("MOD");
-    }
-    if (has_music(MUS_MID)) {
-        add_chunk_decoder("MID");
-    }
-    if (has_music(MUS_OGG)) {
-        add_chunk_decoder("OGG");
-    }
-    if (has_music(MUS_MP3)) {
-        add_chunk_decoder("MP3");
-    }
-    if (has_music(MUS_FLAC)) {
-        add_chunk_decoder("FLAC");
-    }
+
+    /* Initialize the music players */
+    open_music(&mixer);
 
     audio_opened = 1;
     SDL_PauseAudioDevice(audio_device, 0);
@@ -536,6 +530,10 @@
     int count = 0;
     int fragment_size;
 
+    if (!load_music_type(music_type) || !open_music_type(music_type)) {
+        return NULL;
+    }
+
     *spec = mixer;
 
     /* Use fragments sized on full audio frame boundaries - this'll do */
@@ -544,6 +542,9 @@
     start = SDL_RWtell(src);
     for (i = 0; i < get_num_music_interfaces(); ++i) {
         interface = get_music_interface(i);
+        if (!interface->opened) {
+            continue;
+        }
         if (interface->type != music_type) {
             continue;
         }
diff -r 7d6df0a13bd0 -r 7fa15b556953 mixer.h
--- a/mixer.h   Mon Oct 23 12:40:10 2017 -0700
+++ b/mixer.h   Tue Oct 24 21:41:50 2017 -0700
@@ -23,4 +23,6 @@
 extern void Mix_LockAudio(void);
 extern void Mix_UnlockAudio(void);
 
+extern void add_chunk_decoder(const char *decoder);
+
 /* vi: set ts=4 sw=4 expandtab: */
diff -r 7d6df0a13bd0 -r 7fa15b556953 music.c
--- a/music.c   Mon Oct 23 12:40:10 2017 -0700
+++ b/music.c   Tue Oct 24 21:41:50 2017 -0700
@@ -42,6 +42,9 @@
 #include "music_flac.h"
 #include "native_midi/native_midi.h"
 
+/* Set this hint to true if you want verbose logging of music interfaces */
+#define SDL_MIXER_HINT_DEBUG_MUSIC_INTERFACES \
+    "SDL_MIXER_DEBUG_MUSIC_INTERFACES"
 
 char *music_cmd = NULL;
 static SDL_bool music_active = SDL_TRUE;
@@ -135,7 +138,17 @@
 
 static void add_music_decoder(const char *decoder)
 {
-    void *ptr = SDL_realloc((void *)music_decoders, (num_decoders + 1) * 
sizeof (const char *));
+    void *ptr;
+    int i;
+
+    /* Check to see if we already have this decoder */
+    for (i = 0; i < num_decoders; ++i) {
+        if (SDL_strcmp(music_decoders[i], decoder) == 0) {
+            return;
+        }
+    }
+
+    ptr = SDL_realloc((void *)music_decoders, (num_decoders + 1) * sizeof 
(const char *));
     if (ptr == NULL) {
         return;  /* oh well, go on without it. */
     }
@@ -252,28 +265,123 @@
     }
 }
 
-/* Load the music interface libraries */
-int load_music(void)
+/* Load the music interface libraries for a given music type */
+SDL_bool load_music_type(Mix_MusicType type)
 {
-    char hint[128];
-
-    int i;
+    int i, loaded = 0;
     for (i = 0; i < SDL_arraysize(s_music_interfaces); ++i) {
         Mix_MusicInterface *interface = s_music_interfaces[i];
-        if (interface->loaded) {
+        if (interface->type != type) {
+            continue;
+        }
+        if (!interface->loaded) {
+            char hint[64];
+            SDL_snprintf(hint, sizeof(hint), "SDL_MIXER_DISABLE_%s", 
interface->tag);
+            if (SDL_GetHintBoolean(hint, SDL_FALSE)) {
+                continue;
+            }
+
+            if (interface->Load && interface->Load() < 0) {
+                if (SDL_GetHintBoolean(SDL_MIXER_HINT_DEBUG_MUSIC_INTERFACES, 
SDL_FALSE)) {
+                    SDL_Log("Couldn't load %s: %s\n", interface->tag, 
Mix_GetError());
+                }
+                continue;
+            }
+            interface->loaded = SDL_TRUE;
+        }
+        ++loaded;
+    }
+    return (loaded > 0) ? SDL_TRUE : SDL_FALSE;
+}
+
+/* Open the music interfaces for a given music type */
+SDL_bool open_music_type(Mix_MusicType type)
+{
+    int i, opened = 0;
+    SDL_bool use_native_midi = SDL_FALSE;
+
+    if (!music_spec.format) {
+        /* Music isn't opened yet */
+        return SDL_FALSE;
+    }
+
+#ifdef MUSIC_MID_NATIVE
+    if (type == MUS_MID && SDL_GetHintBoolean("SDL_NATIVE_MUSIC", SDL_FALSE) 
&& native_midi_detect()) {
+        use_native_midi = SDL_TRUE;
+    }
+#endif
+
+    for (i = 0; i < SDL_arraysize(s_music_interfaces); ++i) {
+        Mix_MusicInterface *interface = s_music_interfaces[i];
+        if (!interface->loaded) {
+            continue;
+        }
+        if (type != MUS_NONE && interface->type != type) {
             continue;
         }
 
-        SDL_snprintf(hint, sizeof(hint), "SDL_MIXER_DISABLE_%s", 
interface->tag);
-        if (SDL_GetHintBoolean(hint, SDL_FALSE)) {
+        if (interface->type == MUS_MID && use_native_midi && interface->api != 
MIX_MUSIC_NATIVEMIDI) {
             continue;
         }
 
-        if (!interface->Load || interface->Load() == 0) {
-            interface->loaded = SDL_TRUE;
+        if (!interface->opened) {
+            if (interface->Open && interface->Open(&music_spec) < 0) {
+                if (SDL_GetHintBoolean(SDL_MIXER_HINT_DEBUG_MUSIC_INTERFACES, 
SDL_FALSE)) {
+                    SDL_Log("Couldn't open %s: %s\n", interface->tag, 
Mix_GetError());
+                }
+                continue;
+            }
+            interface->opened = SDL_TRUE;
+            add_music_decoder(interface->tag);
         }
+        ++opened;
     }
-    return 0;
+
+    if (has_music(MUS_MOD)) {
+        add_music_decoder("MOD");
+        add_chunk_decoder("MOD");
+    }
+    if (has_music(MUS_MID)) {
+        add_music_decoder("MIDI");
+        add_chunk_decoder("MID");
+    }
+    if (has_music(MUS_OGG)) {
+        add_music_decoder("OGG");
+        add_chunk_decoder("OGG");
+    }
+    if (has_music(MUS_MP3)) {
+        add_music_decoder("MP3");
+        add_chunk_decoder("MP3");
+    }
+    if (has_music(MUS_FLAC)) {
+        add_music_decoder("FLAC");
+        add_chunk_decoder("FLAC");
+    }
+
+    return (opened > 0) ? SDL_TRUE : SDL_FALSE;
+}
+
+/* Initialize the music interfaces with a certain desired audio format */
+void open_music(const SDL_AudioSpec *spec)
+{
+#ifdef MIX_INIT_SOUNDFONT_PATHS
+    if (!soundfont_paths) {
+        soundfont_paths = SDL_strdup(MIX_INIT_SOUNDFONT_PATHS);
+    }
+#endif
+
+    /* Load the music interfaces that don't have explicit initialization */
+    load_music_type(MUS_CMD);
+    load_music_type(MUS_WAV);
+
+    /* Open all the interfaces that are loaded */
+    music_spec = *spec;
+    open_music_type(MUS_NONE);
+
+    Mix_VolumeMusic(MIX_MAX_VOLUME);
+
+    /* Calculate the number of ms for each callback */
+    ms_per_step = (int) (((float)spec->samples * 1000.0) / spec->freq);
 }
 
 /* Return SDL_TRUE if the music type is available */
@@ -292,60 +400,6 @@
     return SDL_FALSE;
 }
 
-/* Initialize the music interfaces with a certain desired audio format */
-int open_music(const SDL_AudioSpec *spec)
-{
-    int i;
-    SDL_bool use_native_midi = SDL_FALSE;
-
-#ifdef MIX_INIT_SOUNDFONT_PATHS
-    if (!soundfont_paths) {
-        soundfont_paths = SDL_strdup(MIX_INIT_SOUNDFONT_PATHS);
-    }
-#endif
-
-
-#ifdef MUSIC_MID_NATIVE
-    if (SDL_GetHintBoolean("SDL_NATIVE_MUSIC", SDL_FALSE) && 
native_midi_detect()) {
-        use_native_midi = SDL_TRUE;
-    }
-#endif
-
-    music_spec = *spec;
-    for (i = 0; i < SDL_arraysize(s_music_interfaces); ++i) {
-        Mix_MusicInterface *interface = s_music_interfaces[i];
-        if (!interface->loaded) {
-            continue;
-        }
-
-        if (interface->type == MUS_MID && use_native_midi && interface->api != 
MIX_MUSIC_NATIVEMIDI) {
-            continue;
-        }
-
-        if (!interface->Open || interface->Open(spec) == 0) {
-            interface->opened = SDL_TRUE;
-            add_music_decoder(interface->tag);
-        }
-    }
-
-    if (has_music(MUS_MOD)) {
-        add_music_decoder("MOD");
-    }
-    if (has_music(MUS_MID)) {
-        add_music_decoder("MIDI");
-    }
-    if (has_music(MUS_MP3)) {
-        add_music_decoder("MP3");
-    }
-
-    Mix_VolumeMusic(MIX_MAX_VOLUME);
-
-    /* Calculate the number of ms for each callback */
-    ms_per_step = (int) (((float)spec->samples * 1000.0) / spec->freq);
-
-    return 0;
-}
-
 Mix_MusicType detect_music_type_from_magic(const Uint8 *magic)
 {
     /* Ogg Vorbis files have the magic four bytes "OggS" */
@@ -509,32 +563,34 @@
 
     Mix_ClearError();
 
-    for (i = 0; i < SDL_arraysize(s_music_interfaces); ++i) {
-        Mix_MusicInterface *interface = s_music_interfaces[i];
-        if (!interface->opened || type != interface->type || 
!interface->CreateFromRW) {
-            continue;
+    if (load_music_type(type) && open_music_type(type)) {
+        for (i = 0; i < SDL_arraysize(s_music_interfaces); ++i) {
+            Mix_MusicInterface *interface = s_music_interfaces[i];
+            if (!interface->opened || type != interface->type || 
!interface->CreateFromRW) {
+                continue;
+            }
+
+            context = interface->CreateFromRW(src, freesrc);
+            if (context) {
+                /* Allocate memory for the music structure */
+                Mix_Music *music = (Mix_Music *)SDL_calloc(1, 
sizeof(Mix_Music));
+                if (music == NULL) {
+                    interface->Delete(context);
+                    Mix_SetError("Out of memory");
+                    return NULL;
+                }
+                music->interface = interface;
+                music->context = context;
+
+                if (SDL_GetHintBoolean(SDL_MIXER_HINT_DEBUG_MUSIC_INTERFACES, 
SDL_FALSE)) {
+                    SDL_Log("Loaded music with %s\n", interface->tag);
+                }
+                return music;
+            }
+
+            /* Reset the stream for the next decoder */
+            SDL_RWseek(src, start, RW_SEEK_SET);
         }
-
-        context = interface->CreateFromRW(src, freesrc);
-        if (context) {
-            /* Allocate memory for the music structure */
-            Mix_Music *music = (Mix_Music *)SDL_calloc(1, sizeof(Mix_Music));
-            if (music == NULL) {
-                interface->Delete(context);
-                Mix_SetError("Out of memory");
-                return NULL;
-            }
-            music->interface = interface;
-            music->context = context;
-#ifdef DEBUG_MUSIC
-            /* This would be useful to expose via an API */
-            SDL_Log("Music playing with %s\n", interface->tag);
-#endif
-            return music;
-        }
-
-        /* Reset the stream for the next decoder */
-        SDL_RWseek(src, start, RW_SEEK_SET);
     }
 
     if (!*Mix_GetError()) {
diff -r 7d6df0a13bd0 -r 7fa15b556953 music.h
--- a/music.h   Mon Oct 23 12:40:10 2017 -0700
+++ b/music.h   Tue Oct 24 21:41:50 2017 -0700
@@ -103,12 +103,13 @@
 } Mix_MusicInterface;
 
 
-extern int load_music(void);
-extern Mix_MusicType detect_music_type_from_magic(const Uint8 *magic);
 extern int get_num_music_interfaces(void);
 extern Mix_MusicInterface *get_music_interface(int index);
+extern Mix_MusicType detect_music_type_from_magic(const Uint8 *magic);
+extern SDL_bool load_music_type(Mix_MusicType type);
+extern SDL_bool open_music_type(Mix_MusicType type);
 extern SDL_bool has_music(Mix_MusicType type);
-extern int open_music(const SDL_AudioSpec *spec);
+extern void open_music(const SDL_AudioSpec *spec);
 extern int music_pcm_getaudio(void *context, void *data, int bytes, int volume,
                               int (*GetSome)(void *context, void *data, int 
bytes, SDL_bool *done));
 extern void SDLCALL music_mixer(void *udata, Uint8 *stream, int len);


Reply via email to