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

