This is an automated email from the git hooks/post-receive script.

skitt pushed a commit to branch debian-sid
in repository gweled.

commit 1af2985df63e3831cbab95dd05d492cb932d4784
Author: Ondřej Surý <[email protected]>
Date:   Fri Aug 6 09:18:34 2010 +0200

    Merge revision 65: Sound handling rewritten.
    
    Now open audio device only if sound or music are enabled.
    Do not segfault on audio errors. This fix bug #345304 and bug #614135.
    
    (Closes: #588694)
---
 debian/patches/002-release-sound-if-not-used.patch | 631 +++++++++++++++++++++
 debian/patches/series                              |   1 +
 2 files changed, 632 insertions(+)

diff --git a/debian/patches/002-release-sound-if-not-used.patch 
b/debian/patches/002-release-sound-if-not-used.patch
new file mode 100644
index 0000000..3491807
--- /dev/null
+++ b/debian/patches/002-release-sound-if-not-used.patch
@@ -0,0 +1,631 @@
+=== modified file 'src/Makefile.am'
+--- a/src/Makefile.am
++++ b/src/Makefile.am
+@@ -21,7 +21,7 @@ gweled_SOURCES = \
+       graphic_engine.c graphic_engine.h \
+       sge_core.c sge_core.h \
+       sge_utils.c sge_utils.h \
+-      music.c music.h \
++      sound.c sound.h \
+       games-score.c games-score.h \
+       games-scores.c games-scores.h \
+       games-scores-backend.c games-scores-backend.h \
+--- a/src/board_engine.c
++++ b/src/board_engine.c
+@@ -30,7 +30,6 @@
+ #include <gtk/gtk.h>
+ #include <glib/gprintf.h>
+ #include <glib/gi18n-lib.h>
+-#include <mikmod.h>
+ 
+ #include "games-scores.h"
+ 
+@@ -39,6 +38,7 @@
+ #include "sge_core.h"
+ #include "board_engine.h"
+ #include "graphic_engine.h"
++#include "sound.h"
+ 
+ #define FIRST_BONUS_AT        100     // needs tweaking
+ #define NB_BONUS_GEMS 8       // same
+@@ -62,8 +62,6 @@ typedef struct s_alignment {
+       gint length;
+ } T_Alignment;
+ 
+-SAMPLE *swap_sfx;
+-
+ gint gi_score, gi_current_score, gi_game_running, gi_game_paused;
+ 
+ gint gi_total_gems_removed;
+@@ -595,8 +593,8 @@ board_engine_loop (gpointer data)
+                               sge_object_move_to (g_gem_objects[x2][y2],
+                                               x1 * prefs.tile_size,
+                                               y1 * prefs.tile_size);
+-                              if(swap_sfx && prefs.sounds_on == TRUE)
+-                              Sample_Play(swap_sfx, 0, 0);
++                              if(prefs.sounds_on == TRUE)
++                                  sound_play_sample(SWAP_EVENT);
+                               gi_state = _SECOND_GEM_CLICKED;
+                       } else if((x1 == x2) && (y1 == y2)) {
+                               if (cursor[1])
+--- a/src/callbacks.c
++++ b/src/callbacks.c
+@@ -24,10 +24,9 @@
+ 
+ #include <gtk/gtk.h>
+ #include <glib/gi18n-lib.h>
+-#include <mikmod.h>
+ 
+ #include "main.h"
+-#include "music.h"
++#include "sound.h"
+ #include "sge_core.h"
+ #include "board_engine.h"
+ #include "graphic_engine.h"
+@@ -43,6 +42,8 @@ extern GtkWidget *g_score_window;
+ extern GtkWidget *g_drawing_area;
+ extern GdkPixmap *g_buffer_pixmap;
+ extern GtkWidget *g_menu_pause;
++extern GtkWidget *g_pref_music_button;
++extern GtkWidget *g_pref_sounds_button;
+ 
+ extern gint gi_gem_clicked;
+ extern gint gi_x_click;
+@@ -55,8 +56,6 @@ extern gint gi_y_drag;
+ extern guint board_engine_id;
+ extern GweledPrefs prefs;
+ 
+-SAMPLE *click_sfx;
+-
+ static gint gi_dragging = 0;
+ 
+ void
+@@ -207,8 +206,8 @@ drawing_area_button_event_cb (GtkWidget 
+                       gi_gem_clicked = -1;
+                       gi_dragging = -1;
+ 
+-                      if(click_sfx && prefs.sounds_on == TRUE)
+-                              Sample_Play(click_sfx, 0, 0);
++                      if(prefs.sounds_on)
++                          sound_play_sample(CLICK_EVENT);
+               }
+               break;
+ 
+@@ -385,10 +384,20 @@ void
+ on_music_checkbutton_toggled (GtkToggleButton * togglebutton, gpointer 
user_data)
+ {
+       if (gtk_toggle_button_get_active (togglebutton)) {
+-              music_play();
+-      }
+-      else {
+-              music_stop();
++          prefs.music_on = TRUE;
++          if(sound_get_enabled() == FALSE) {
++              sound_init();
++                  if(sound_get_enabled() == FALSE) {
++                  gtk_widget_set_sensitive(g_pref_music_button, FALSE);
++                  gtk_widget_set_sensitive(g_pref_sounds_button, FALSE);
++              }
++              }
++              sound_music_play();
++      } else {
++          prefs.music_on = FALSE;
++              sound_music_stop();
++              if(prefs.sounds_on == FALSE)
++                  sound_destroy();
+       }
+ }
+ 
+@@ -396,9 +405,19 @@ void
+ on_sounds_checkbutton_toggled (GtkToggleButton * togglebutton, gpointer 
user_data)
+ {
+       if (gtk_toggle_button_get_active (togglebutton)) {
+-              prefs.sounds_on = TRUE;
+-      }
+-      else {
++              prefs.sounds_on = TRUE;
++              if(sound_get_enabled() == FALSE) {
++              sound_init();
++                  if(sound_get_enabled() == FALSE) {
++                  gtk_widget_set_sensitive(g_pref_music_button, FALSE);
++                  gtk_widget_set_sensitive(g_pref_sounds_button, FALSE);
++              }
++              }
++              sound_load_samples();
++      } else {
+               prefs.sounds_on = FALSE;
+-      }
++              sound_unload_samples();
++              if(prefs.music_on == FALSE)
++                  sound_destroy();
++        }
+ }
+--- a/src/main.c
++++ b/src/main.c
+@@ -33,13 +33,10 @@
+ #include "games-scores.h"
+ #include "games-scores-dialog.h"
+ 
+-#include <pthread.h>
+-#include <mikmod.h>
+-
+ #include "sge_core.h"
+ #include "board_engine.h"
+ #include "graphic_engine.h"
+-#include "music.h"
++#include "sound.h"
+ #include "main.h"
+ 
+ // GLOBALS
+@@ -53,13 +50,14 @@ GtkWidget *g_progress_bar;
+ GtkWidget *g_score_label;
+ GtkWidget *g_bonus_label;
+ GtkWidget *g_menu_pause;
++GtkWidget *g_pref_music_button;
++GtkWidget *g_pref_sounds_button;
+ GdkPixmap *g_buffer_pixmap = NULL;
+ GRand *g_random_generator;
+ 
+ guint board_engine_id;
+ 
+ GweledPrefs prefs;
+-pthread_t thread;
+ 
+ static const GamesScoresCategory scorecats[] = {
+   {"Normal", NC_("game type", "Normal")  },
+@@ -68,8 +66,6 @@ static const GamesScoresCategory scoreca
+ 
+ GamesScores *highscores;
+ 
+-SAMPLE *swap_sfx, *click_sfx;
+-
+ extern gint gi_game_running;
+ 
+ void save_preferences(void)
+@@ -262,14 +258,6 @@ show_hiscores (gint pos, gboolean endofg
+   return result;
+ }
+ 
+-void mikmod_thread(void *ptr)
+-{
+-      while (1) {
+-          g_usleep(10000);
+-              MikMod_Update();
+-    }
+-}
+-
+ int main (int argc, char **argv)
+ {
+       GError* error = NULL;
+@@ -294,7 +282,6 @@ int main (int argc, char **argv)
+ 
+       gtk_window_set_default_icon_name ("gweled");
+ 
+-    music_init ();
+       sge_init ();
+ 
+       g_random_generator = g_rand_new_with_seed (time (NULL));
+@@ -312,6 +299,8 @@ int main (int argc, char **argv)
+     g_score_label = GTK_WIDGET (gtk_builder_get_object (gweled_xml, 
"scoreLabel"));
+     g_drawing_area = GTK_WIDGET (gtk_builder_get_object (gweled_xml, 
"boardDrawingarea"));
+     g_menu_pause = GTK_WIDGET (gtk_builder_get_object (gweled_xml, "pause1"));
++    g_pref_music_button = GTK_WIDGET (gtk_builder_get_object (gweled_xml, 
"music_checkbutton"));
++    g_pref_sounds_button = GTK_WIDGET (gtk_builder_get_object (gweled_xml, 
"sounds_checkbutton"));
+ 
+       load_preferences();
+       init_pref_window();
+@@ -339,29 +328,20 @@ int main (int argc, char **argv)
+ 
+       gi_game_running = 0;
+ 
+-      // load sound fx
+-    swap_sfx = Sample_Load(DATADIR "/sounds/gweled/swap.wav");
+-    if (!swap_sfx) {
+-        g_warning("Could not load swap.wav, reason: %s", 
MikMod_strerror(MikMod_errno));
+-
+-    }
+-    click_sfx = Sample_Load(DATADIR "/sounds/gweled/click.wav");
+-    if (!click_sfx) {
+-        g_warning("Could not load click.wav, reason: %s", 
MikMod_strerror(MikMod_errno));
+-    }
+-
+-    MikMod_SetNumVoices(-1, 4);
+-      Voice_SetVolume(0, 255);
+-      Voice_SetVolume(1, 255);
+-      Voice_SetVolume(2, 255);
+-      Voice_SetVolume(3, 255);
++      if(prefs.music_on || prefs.sounds_on) {
++          sound_init();
++          if(sound_get_enabled() == FALSE) {
++              gtk_widget_set_sensitive(g_pref_music_button, FALSE);
++              gtk_widget_set_sensitive(g_pref_sounds_button, FALSE);
++          }
++      }
+ 
+-    MikMod_EnableOutput();
+ 
+-    pthread_create(&thread, NULL, (void *)&music_thread, NULL);
++      if (prefs.sounds_on)
++          sound_load_samples();
+ 
+       if (prefs.music_on)
+-              music_play();
++          sound_music_play();
+ 
+       sge_set_drawing_area (g_drawing_area, g_buffer_pixmap,
+                             BOARD_WIDTH * prefs.tile_size,
+@@ -372,7 +352,7 @@ int main (int argc, char **argv)
+ 
+       gtk_main ();
+ 
+-    MikMod_DisableOutput();
++    sound_destroy();
+ 
+       sge_destroy ();
+       if(board_engine_id)
+@@ -380,15 +360,6 @@ int main (int argc, char **argv)
+       g_rand_free (g_random_generator);
+       g_object_unref(G_OBJECT(gweled_xml));
+ 
+-      music_stop();
+-
+-      if(swap_sfx)
+-              Sample_Free(swap_sfx);
+-      if(click_sfx)
+-              Sample_Free(click_sfx);
+-
+-      MikMod_Exit();
+-
+       return 0;
+ }
+ 
+--- a/src/music.c
++++ /dev/null
+@@ -1,102 +0,0 @@
+-/* Gweled
+- *
+- * Copyright (C) 2003-2005 Sebastien Delestaing 
<[email protected]>
+- * Copyright (C) 2010 Daniele Napolitano <[email protected]>
+- *
+- * This program is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU General Public License
+- * as published by the Free Software Foundation; either version 2
+- * of the License, or (at your option) any later version.
+- *
+- * This program 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 General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program; if not, write to the Free Software
+- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, 
USA.
+- */
+-
+-#include <mikmod.h>
+-#include <pthread.h>
+-#include <glib.h>
+-
+-#include "music.h"
+-#include "board_engine.h"
+-
+-extern GweledPrefs prefs;
+-extern pthread_t thread;
+-
+-static MODULE *module;
+-static gboolean is_playing;
+-
+-void music_init()
+-{
+-    /* register all the drivers */
+-    MikMod_RegisterDriver(&drv_AF);
+-    MikMod_RegisterDriver(&drv_esd);
+-    MikMod_RegisterDriver(&drv_alsa);
+-    MikMod_RegisterDriver(&drv_oss);
+-    MikMod_RegisterDriver(&drv_nos);
+-
+-    /* register all the module loaders */
+-    MikMod_RegisterAllLoaders();
+-
+-    /* initialize the library */
+-    if (MikMod_Init(""))
+-      {
+-        fprintf(stderr, "Could not initialize sound, reason: %s\n", 
MikMod_strerror(MikMod_errno));
+-        //return; don't fail on sound problems
+-    }
+-    is_playing = FALSE;
+-
+-}
+-
+-void music_thread(void *ptr)
+-{
+-      while (1) {
+-          g_usleep(10000);
+-              MikMod_Update();
+-    }
+-}
+-
+-void music_play()
+-{
+-      if (!music_isplaying())
+-      {
+-          // load module
+-          module = Player_Load(DATADIR "/sounds/gweled/autonom.s3m", 64, 0);
+-      if (module) {
+-          Player_Start(module);
+-                      Player_SetVolume(64);
+-                      pthread_create(&thread, NULL, (void *)&music_thread, 
NULL);
+-                      prefs.music_on = TRUE;
+-                      is_playing = TRUE;
+-
+-      } else
+-          fprintf(stderr, "Could not load module, reason: %s\n", 
MikMod_strerror(MikMod_errno));
+-      }
+-}
+-
+-void music_stop()
+-{
+-      if (music_isplaying()){
+-      if (module)
+-              {
+-              Player_Stop();
+-              Player_Free(module);
+-                      pthread_cancel(thread);
+-                      pthread_join(thread, NULL);
+-              prefs.music_on = FALSE;
+-              is_playing = FALSE;
+-              }
+-      }
+-
+-}
+-
+-gboolean music_isplaying()
+-{
+-      return is_playing;
+-}
+-
+--- /dev/null
++++ b/src/sound.c
+@@ -0,0 +1,168 @@
++/* Gweled
++ *
++ * Copyright (C) 2003-2005 Sebastien Delestaing 
<[email protected]>
++ * Copyright (C) 2010 Daniele Napolitano <[email protected]>
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License
++ * as published by the Free Software Foundation; either version 2
++ * of the License, or (at your option) any later version.
++ *
++ * This program 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 General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, 
USA.
++ */
++
++#include <mikmod.h>
++#include <pthread.h>
++#include <glib.h>
++
++#include "sound.h"
++#include "board_engine.h"
++
++static pthread_t thread;
++
++static MODULE *module;
++static SAMPLE *swap_sfx = NULL;
++static SAMPLE *click_sfx = NULL;
++
++static gboolean is_playing;
++static gboolean sound_available;
++
++void sound_thread(void *ptr)
++{
++      while (1) {
++          g_usleep(10000);
++              MikMod_Update();
++    }
++}
++
++void sound_init()
++{
++    /* register all the drivers */
++    MikMod_RegisterDriver(&drv_esd);
++    MikMod_RegisterDriver(&drv_alsa);
++    MikMod_RegisterDriver(&drv_oss);
++    MikMod_RegisterDriver(&drv_nos);
++
++    /* register all the module loaders */
++    MikMod_RegisterAllLoaders();
++
++    /* initialize the library */
++    if (MikMod_Init("")) {
++        g_printerr("Could not initialize sound, reason: %s\n", 
MikMod_strerror(MikMod_errno));
++        MikMod_Exit();
++        sound_available = FALSE;
++    } else {
++        sound_available = TRUE;
++        MikMod_EnableOutput();
++        pthread_create(&thread, NULL, (void *)&sound_thread, NULL);
++        g_print("Audio driver choosen: %s\n", md_driver->Name);
++    }
++
++    is_playing = FALSE;
++
++}
++
++void sound_music_play()
++{
++      if (!is_playing && sound_available) {
++          // load module
++          module = Player_Load(DATADIR "/sounds/gweled/autonom.s3m", 64, 0);
++      if (module) {
++          Player_Start(module);
++                      Player_SetVolume(64);
++                      is_playing = TRUE;
++
++      } else
++          fprintf(stderr, "Could not load module, reason: %s\n", 
MikMod_strerror(MikMod_errno));
++      }
++}
++
++void sound_music_stop()
++{
++      if (is_playing && sound_available) {
++      if (module)
++              {
++              Player_Stop();
++              Player_Free(module);
++              is_playing = FALSE;
++              }
++      }
++}
++
++// load sound fx
++void sound_load_samples()
++{
++    if (sound_available == FALSE)
++        return;
++
++    if (!swap_sfx)
++        swap_sfx = Sample_Load(DATADIR "/sounds/gweled/swap.wav");
++    if (!swap_sfx)
++        g_warning("Could not load swap.wav, reason: %s", 
MikMod_strerror(MikMod_errno));
++
++    if (!click_sfx)
++        click_sfx = Sample_Load(DATADIR "/sounds/gweled/click.wav");
++    if (!click_sfx)
++        g_warning("Could not load click.wav, reason: %s", 
MikMod_strerror(MikMod_errno));
++
++    MikMod_SetNumVoices(-1, 2);
++}
++
++void sound_unload_samples()
++{
++    if (swap_sfx) {
++              Sample_Free(swap_sfx);
++              swap_sfx = NULL;
++      }
++      if (click_sfx) {
++              Sample_Free(click_sfx);
++              click_sfx = NULL;
++      }
++}
++
++// play sound fx
++void sound_play_sample(gweled_sound_samples sample)
++{
++    if (sound_available == FALSE)
++        return;
++
++    switch (sample) {
++        case CLICK_EVENT:
++            if(click_sfx)
++                Sample_Play(click_sfx, 0, 0);
++            break;
++        case SWAP_EVENT:
++            if(swap_sfx)
++                Sample_Play(swap_sfx, 0, 0);
++            break;
++    }
++}
++
++void sound_destroy()
++{
++    if (sound_available) {
++        sound_music_stop();
++
++        pthread_cancel(thread);
++        pthread_join(thread, NULL);
++
++        sound_unload_samples();
++
++        MikMod_DisableOutput();
++          MikMod_Exit();
++
++          sound_available = FALSE;
++      }
++}
++
++gboolean sound_get_enabled()
++{
++    return sound_available;
++}
+--- a/src/music.h
++++ /dev/null
+@@ -1,27 +0,0 @@
+-/* Gweled
+- *
+- * Copyright (C) 2003-2005 Sebastien Delestaing 
<[email protected]>
+- * Copyright (C) 2010 Daniele Napolitano <[email protected]>
+- *
+- * This program is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU General Public License
+- * as published by the Free Software Foundation; either version 2
+- * of the License, or (at your option) any later version.
+- *
+- * This program 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 General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program; if not, write to the Free Software
+- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, 
USA.
+- */
+-
+-#include <mikmod.h>
+-
+-void music_init();
+-void music_thread(void *ptr);
+-void music_play();
+-void music_stop();
+-int music_isplaying();
+--- /dev/null
++++ b/src/sound.h
+@@ -0,0 +1,41 @@
++/* Gweled
++ *
++ * Copyright (C) 2003-2005 Sebastien Delestaing 
<[email protected]>
++ * Copyright (C) 2010 Daniele Napolitano <[email protected]>
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License
++ * as published by the Free Software Foundation; either version 2
++ * of the License, or (at your option) any later version.
++ *
++ * This program 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 General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, 
USA.
++ */
++
++#ifndef _SOUND_H_
++#define _SOUND_H_
++
++#include <glib.h>
++
++typedef enum e_gweled_sound_samples
++{
++    CLICK_EVENT,
++    SWAP_EVENT
++} gweled_sound_samples;
++
++void sound_init(void);
++void sound_music_play(void);
++void sound_music_stop(void);
++void sound_load_samples(void);
++void sound_unload_samples(void);
++void sound_play_sample(gweled_sound_samples sample);
++void sound_destroy(void);
++gboolean sound_get_enabled();
++
++#endif
diff --git a/debian/patches/series b/debian/patches/series
index a963690..416c853 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1 +1,2 @@
 001-potfiles.patch
+002-release-sound-if-not-used.patch

-- 
Alioth's /usr/local/bin/git-commit-notice on 
/srv/git.debian.org/git/pkg-games/gweled.git

_______________________________________________
Pkg-games-commits mailing list
[email protected]
http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-games-commits

Reply via email to