From 6e010cbff48221758aaf397c3279819e7bf67c69 Mon Sep 17 00:00:00 2001 From: Kevin Mihelich Date: Sun, 15 Jan 2012 20:18:10 -0500 Subject: [PATCH] added extra/xmms --- extra/xmms/PKGBUILD | 83 +++ extra/xmms/xmms-1.2.10-crossfade-0.3.9.patch | 101 ++++ extra/xmms/xmms-1.2.10-fonts.patch | 24 + extra/xmms/xmms-1.2.10-recode-id3.patch | 11 + extra/xmms/xmms-1.2.11-3dse.patch | 503 ++++++++++++++++++ .../xmms/xmms-1.2.11-CVE-2007-0653.0654.patch | 43 ++ .../xmms-1.2.11-fix-http-title-mpg123.patch | 10 + extra/xmms/xmms-fix.diff | 11 + extra/xmms/xmms-menu.patch | 35 ++ extra/xmms/xmms.16.png | Bin 0 -> 1497 bytes extra/xmms/xmms.32.png | Bin 0 -> 3477 bytes extra/xmms/xmms.48.png | Bin 0 -> 5925 bytes extra/xmms/xmms.install | 11 + 13 files changed, 832 insertions(+) create mode 100644 extra/xmms/PKGBUILD create mode 100644 extra/xmms/xmms-1.2.10-crossfade-0.3.9.patch create mode 100644 extra/xmms/xmms-1.2.10-fonts.patch create mode 100644 extra/xmms/xmms-1.2.10-recode-id3.patch create mode 100644 extra/xmms/xmms-1.2.11-3dse.patch create mode 100644 extra/xmms/xmms-1.2.11-CVE-2007-0653.0654.patch create mode 100644 extra/xmms/xmms-1.2.11-fix-http-title-mpg123.patch create mode 100644 extra/xmms/xmms-fix.diff create mode 100644 extra/xmms/xmms-menu.patch create mode 100644 extra/xmms/xmms.16.png create mode 100644 extra/xmms/xmms.32.png create mode 100644 extra/xmms/xmms.48.png create mode 100644 extra/xmms/xmms.install diff --git a/extra/xmms/PKGBUILD b/extra/xmms/PKGBUILD new file mode 100644 index 000000000..495aa27c0 --- /dev/null +++ b/extra/xmms/PKGBUILD @@ -0,0 +1,83 @@ +# $Id: PKGBUILD 134338 2011-08-02 23:29:16Z eric $ +# Maintainer: Eric Bélanger + +# ALARM: Kevin Mihelich +# - added --disable-simd, which builds for MMX instructions + +plugrel=1 + +pkgname=xmms +pkgver=1.2.11 +pkgrel=4.1 +pkgdesc="The X MultiMedia System - a multimedia player" +arch=('i686' 'x86_64') +url="http://legacy.xmms2.org/" +license=('GPL') +depends=('gtk' 'libxxf86vm' 'libsm' 'desktop-file-utils') +makedepends=('mesa' 'libmikmod' 'libvorbis' 'alsa-lib' 'libgl') +optdepends=('libmikmod: for the MikMod input plugin' \ + 'libvorbis: for the Ogg Vorbis input plugin' \ + 'alsa-lib: for the alsa output plugin' \ + 'libgl: for the OpenGL Spectrum analyser visualization plugin') +options=('!libtool') +install=xmms.install +source=(http://legacy.xmms2.org/${pkgname}-${pkgver}.tar.bz2 \ + xmms-menu.patch xmms-1.2.10-crossfade-0.3.9.patch xmms-fix.diff \ + xmms-1.2.11-CVE-2007-0653.0654.patch xmms-1.2.11-fix-http-title-mpg123.patch \ + xmms-1.2.11-3dse.patch xmms-1.2.10-recode-id3.patch \ + xmms-1.2.10-fonts.patch xmms.16.png xmms.32.png xmms.48.png) +sha1sums=('9d1eae4baab25fd35c9ddfb49321ca60222f672d' + '27fb6e21bd6db923a425a8df8bd07a2a93867ddb' + 'ff5c172752c8bee708d9a9ecd53864cc95a4bcc5' + 'c227284955f2cc16f027dade670155c0f0fbc4ff' + '4ef47c34b27b6c868d4301b7a078b257c8604471' + '0c060385561ea2a4b1c7ad3bd35d3646ae9554f5' + '6f6db13c780ba4cbddb8613f0abd2db2823f3021' + '2a3b1bf17054b6bd8b1e5937de5c0ad49af8dc92' + '31abd37c9c57bd13b2088eb11a1e54e5aa312bf3' + '0089d11aa3bce67f3496592d68ee65837406e220' + 'f24071ae484d9b55e61dba076801fa8e7976ff2f' + '485c67cb8c8d4678bb3b0b280d2e233b14153b22') + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + +# Fix xmms.desktop + patch -p0 < ../xmms-menu.patch +# Patch for hang with xmms-crossfade + patch -p1 < ../xmms-1.2.10-crossfade-0.3.9.patch +# fix xmms not able to be shown double size,at least needed for x86_64 + patch -p1 < ../xmms-fix.diff +# Several patches from Mandriva + patch -p1 < ../xmms-1.2.11-fix-http-title-mpg123.patch + patch -p0 < ../xmms-1.2.10-recode-id3.patch + patch -p1 < ../xmms-1.2.11-3dse.patch + patch -p1 < ../xmms-1.2.10-fonts.patch + patch -p1 < ../xmms-1.2.11-CVE-2007-0653.0654.patch + + if [ "$CARCH" == "x86_64" ]; then + SIMDOPT="--disable-simd" + elsif [ "$CARCH" == "i686" ]; then + SIMDOPT="--enable-simd" + else + SIMDOPT="--disable-simd" + fi + ./configure --prefix=/usr --mandir=/usr/share/man $SIMDOPT + make +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" install + + install -D -m644 xmms/xmms.desktop "${pkgdir}/usr/share/applications/xmms.desktop" + install -D -m644 xmms/xmms_mini.xpm "${pkgdir}/usr/share/pixmaps/xmms_mini.xpm" + install -D -m644 ../xmms.16.png "${pkgdir}/usr/share/pixmaps/xmms16.png" + install -D -m644 ../xmms.32.png "${pkgdir}/usr/share/pixmaps/xmms32.png" + install -D -m644 ../xmms.48.png "${pkgdir}/usr/share/pixmaps/xmms48.png" + ln -s /usr/share/pixmaps/xmms48.png "${pkgdir}/usr/share/pixmaps/xmms.png" + + # don't want wmxmms + rm -rf "${pkgdir}/usr/bin/wmxmms" "${pkgdir}/usr/share/xmms" + rm -f "${pkgdir}"/usr/share/man/man1/{gnomexmms.1,wmxmms.1} +} diff --git a/extra/xmms/xmms-1.2.10-crossfade-0.3.9.patch b/extra/xmms/xmms-1.2.10-crossfade-0.3.9.patch new file mode 100644 index 000000000..51c51671c --- /dev/null +++ b/extra/xmms/xmms-1.2.10-crossfade-0.3.9.patch @@ -0,0 +1,101 @@ +diff -ur xmms-1.2.10/xmms/input.c xmms-1.2.10.patched/xmms/input.c +--- xmms-1.2.10/xmms/input.c 2003-08-08 19:10:44.000000000 +0200 ++++ xmms-1.2.10.patched/xmms/input.c 2005-11-25 00:12:36.000000000 +0100 +@@ -285,6 +285,14 @@ + } + } + ++gboolean input_stopped_for_restart = FALSE; /* crossfade */ ++void input_stop_for_restart() /* crossfade */ ++{ ++ input_stopped_for_restart = TRUE; ++ input_stop(); ++ input_stopped_for_restart = FALSE; ++} ++ + void input_stop(void) + { + if (ip_data->playing && get_current_input_plugin()) +diff -ur xmms-1.2.10/xmms/input.h xmms-1.2.10.patched/xmms/input.h +--- xmms-1.2.10/xmms/input.h 2000-02-16 22:05:57.000000000 +0100 ++++ xmms-1.2.10.patched/xmms/input.h 2005-11-25 00:12:36.000000000 +0100 +@@ -34,6 +34,7 @@ + gboolean input_check_file(gchar * filename); + void input_play(char *filename); + void input_stop(void); ++void input_stop_for_restart(void); + void input_pause(void); + int input_get_time(void); + void input_set_eq(int on, float preamp, float *bands); +diff -ur xmms-1.2.10/xmms/main.c xmms-1.2.10.patched/xmms/main.c +--- xmms-1.2.10/xmms/main.c 2004-02-23 21:31:43.000000000 +0100 ++++ xmms-1.2.10.patched/xmms/main.c 2005-11-25 00:12:36.000000000 +0100 +@@ -881,8 +881,10 @@ + mainwin_set_shade(!cfg.player_shaded); + } + ++gboolean is_quitting = FALSE; /* crossfade */ + void mainwin_quit_cb(void) + { ++ is_quitting = TRUE; /* crossfade */ + input_stop(); + gtk_widget_hide(equalizerwin); + gtk_widget_hide(playlistwin); +@@ -1523,7 +1525,8 @@ + int *pos; + + if (get_input_playing()) +- input_stop(); ++ input_stop_for_restart(); ++ + pos = gtk_clist_get_row_data(clist, GPOINTER_TO_INT(clist->selection->data)); + playlist_set_position(*pos); + playlist_play(); +diff -ur xmms-1.2.10/xmms/playlist.c xmms-1.2.10.patched/xmms/playlist.c +--- xmms-1.2.10/xmms/playlist.c 2004-02-23 21:31:43.000000000 +0100 ++++ xmms-1.2.10.patched/xmms/playlist.c 2005-11-25 00:12:36.000000000 +0100 +@@ -124,7 +124,7 @@ + if (get_input_playing()) + { + PL_UNLOCK(); +- input_stop(); ++ input_stop_for_restart(); + PL_LOCK(); + *restart_playing = TRUE; + } +@@ -570,7 +570,7 @@ + } + + if (get_input_playing()) +- input_stop(); ++ input_stop_for_restart(); + + vis_clear_data(mainwin_vis); + vis_clear_data(playlistwin_vis); +@@ -668,7 +668,7 @@ + { + /* We need to stop before changing playlist_position */ + PL_UNLOCK(); +- input_stop(); ++ input_stop_for_restart(); + PL_LOCK(); + restart_playing = TRUE; + } +@@ -723,7 +723,7 @@ + { + /* We need to stop before changing playlist_position */ + PL_UNLOCK(); +- input_stop(); ++ input_stop_for_restart(); + PL_LOCK(); + restart_playing = TRUE; + } +@@ -852,7 +852,7 @@ + { + /* We need to stop before changing playlist_position */ + PL_UNLOCK(); +- input_stop(); ++ input_stop_for_restart(); + PL_LOCK(); + restart_playing = TRUE; + } diff --git a/extra/xmms/xmms-1.2.10-fonts.patch b/extra/xmms/xmms-1.2.10-fonts.patch new file mode 100644 index 000000000..87cd9a8ee --- /dev/null +++ b/extra/xmms/xmms-1.2.10-fonts.patch @@ -0,0 +1,24 @@ +--- xmms-1.2.10/xmms/main.c.fonts 2004-08-10 22:16:06.000000000 +0200 ++++ xmms-1.2.10/xmms/main.c 2004-08-12 11:49:17.905598843 +0200 +@@ -351,7 +351,8 @@ + cfg.no_playlist_advance = FALSE; + cfg.smooth_title_scroll = TRUE; + cfg.random_skin_on_play = FALSE; +- cfg.mainwin_use_xfont = FALSE; ++ cfg.mainwin_use_xfont = TRUE; ++ cfg.use_fontsets = TRUE; + cfg.use_pl_metadata = TRUE; + + cfg.playlist_x = 295; +@@ -499,9 +500,9 @@ + cfg.mainwin_font = NULL; + } + if (cfg.playlist_font == NULL) +- cfg.playlist_font = g_strdup("-adobe-helvetica-bold-r-*-*-10-*"); ++ cfg.playlist_font = g_strdup("-*-helvetica-bold-r-*-*-10-*,*"); + if (cfg.mainwin_font == NULL) +- cfg.mainwin_font = g_strdup("-adobe-helvetica-medium-r-*-*-8-*"); ++ cfg.mainwin_font = g_strdup("-*-helvetica-medium-r-*-*-8-*,*"); + if (cfg.gentitle_format == NULL) + cfg.gentitle_format = g_strdup("%p - %t"); + if (cfg.outputplugin == NULL) diff --git a/extra/xmms/xmms-1.2.10-recode-id3.patch b/extra/xmms/xmms-1.2.10-recode-id3.patch new file mode 100644 index 000000000..6bd4ecf1c --- /dev/null +++ b/extra/xmms/xmms-1.2.10-recode-id3.patch @@ -0,0 +1,11 @@ +--- xmms/playlist.c.orig 2005-03-05 17:26:11.685992552 +0200 ++++ xmms/playlist.c 2005-03-05 17:28:01.524294592 +0200 +@@ -1341,7 +1341,7 @@ + + filename = g_strdup(entry->filename); + +- if (entry->title == NULL && entry->length == -1) ++ if (entry->title == NULL) + { + if (playlist_get_info_entry(entry)&&(entry->title)) { + title = xmms_charset_recode_id3(entry->title,0,NULL); diff --git a/extra/xmms/xmms-1.2.11-3dse.patch b/extra/xmms/xmms-1.2.11-3dse.patch new file mode 100644 index 000000000..099bf23b1 --- /dev/null +++ b/extra/xmms/xmms-1.2.11-3dse.patch @@ -0,0 +1,503 @@ +--- xmms-1.2.11/Output/OSS/OSS.h.3dse 2003-06-11 20:44:17.000000000 +0200 ++++ xmms-1.2.11/Output/OSS/OSS.h 2007-11-18 20:51:57.000000000 +0100 +@@ -48,6 +48,11 @@ + # define IS_BIG_ENDIAN FALSE + #endif + ++#define AWE_3DSE 0x90 ++#define MIXER_BASE_DEFAULT 0x220 ++#define MIXER_REG_OFFSET 4 ++#define MIXER_DATA_OFFSET 5 ++ + extern OutputPlugin op; + + typedef struct +@@ -59,6 +64,8 @@ typedef struct + gboolean use_master; + gboolean use_alt_audio_device, use_alt_mixer_device; + gchar *alt_audio_device, *alt_mixer_device; ++ gint stereo; ++ gboolean hardware_access; + } + OSSConfig; + +@@ -82,6 +89,12 @@ int oss_get_output_time(void); + int oss_get_written_time(void); + void oss_set_audio_params(void); + ++int oss_set_3dse(int stat); ++int oss_get_3dse(void); ++void oss_hw_set_3dse(int stat); ++int oss_hw_get_3dse(void); ++int initHardwareAccess (); ++ + void oss_free_convert_buffer(void); + int (*oss_get_convert_func(int output, int input))(void **, int); + int (*oss_get_stereo_convert_func(int output, int input))(void **, int, int); +--- xmms-1.2.11/Output/OSS/configure.c.3dse 2005-05-15 02:01:20.000000000 +0200 ++++ xmms-1.2.11/Output/OSS/configure.c 2007-11-18 20:51:57.000000000 +0100 +@@ -24,6 +24,10 @@ static GtkWidget *mixer_usemaster_check, + static GtkWidget *adevice_use_alt_check, *audio_alt_device_entry; + static GtkWidget *mdevice_use_alt_check, *mixer_alt_device_entry; + static gint audio_device, mixer_device; ++static GtkWidget *stereo_check_button, *stereo_frame, *stereo_box; ++static GtkWidget *stereo_label, *stereo_align_button, *stereo_align_label; ++static GtkWidget *save3dse_check_button, *stereo_table, *hw_check_button; ++ + + static void configure_win_ok_cb(GtkWidget * w, gpointer data) + { +@@ -69,6 +73,8 @@ static void configure_win_ok_cb(GtkWidge + xmms_cfg_write_string(cfgfile, "OSS", "alt_audio_device", oss_cfg.alt_audio_device); + xmms_cfg_write_boolean(cfgfile, "OSS", "use_alt_mixer_device", oss_cfg.use_alt_mixer_device); + xmms_cfg_write_string(cfgfile, "OSS", "alt_mixer_device", oss_cfg.alt_mixer_device); ++ xmms_cfg_write_int(cfgfile, "OSS", "stereo", oss_cfg.stereo); ++ xmms_cfg_write_boolean(cfgfile, "OSS", "hardware", oss_cfg.hardware_access); + xmms_cfg_write_default_file(cfgfile); + xmms_cfg_free(cfgfile); + +@@ -85,6 +91,98 @@ static void configure_win_mixer_dev_cb(G + mixer_device = device; + } + ++static void stereo_check_button_cb(GtkWidget * widget, gpointer data) ++{ ++ if (GTK_TOGGLE_BUTTON(widget)->active) ++ { ++ if (oss_cfg.stereo != -1) ++ oss_cfg.stereo = 1; ++ if (oss_cfg.hardware_access) ++ oss_hw_set_3dse(1); ++ else ++ oss_set_3dse(1); ++ } ++ else ++ { ++ if (oss_cfg.stereo != -1) ++ oss_cfg.stereo = 0; ++ if (oss_cfg.hardware_access) ++ oss_hw_set_3dse(0); ++ else ++ oss_set_3dse(0); ++ } ++} ++ ++static void save3dse_check_button_cb(GtkWidget * widget, gpointer data) ++{ ++ if (GTK_TOGGLE_BUTTON(widget)->active) ++ { ++ if (GTK_TOGGLE_BUTTON(data)->active) ++ oss_cfg.stereo = 1; ++ else ++ oss_cfg.stereo = 0; ++ } ++ else ++ { ++ oss_cfg.stereo = -1; ++ } ++} ++ ++void warning_dialog(void) ++{ ++ GtkWidget *dialog_window, *button, *label; ++ dialog_window = gtk_dialog_new(); ++ gtk_window_set_title(GTK_WINDOW(dialog_window), ++ "WARNING: DIRECT ACCESS"); ++ gtk_window_set_policy(GTK_WINDOW(dialog_window), FALSE, FALSE, TRUE); ++ gtk_window_set_position(GTK_WINDOW(dialog_window), GTK_WIN_POS_MOUSE); ++ button = gtk_button_new_with_label("Dismiss"); ++ gtk_signal_connect_object(GTK_OBJECT(button), "clicked", ++ GTK_SIGNAL_FUNC(gtk_widget_destroy), (gpointer)dialog_window); ++ gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog_window)->action_area), ++ button, TRUE, FALSE, 0); ++ gtk_widget_show(button); ++ label = gtk_label_new( ++ "Direct hardware access can cause damage to your sound card.\n" ++ "Only use this option when you are using OSS drivers that\n" ++ "doesn't support the SND_MIXER_3DSE ioctl.\n" ++ "USE THIS OPTION AT YOUR OWN RISK !!!\n" ++ "You can use the environment variable \"BLASTER\" to manual\n" ++ "set the port of the mixer of your sound card. Only use this\n" ++ "option when you really know the mixer address. The default\n" ++ "value is 0x220. Example:\n" ++ " BLASTER=M230 ; export BLASTER\n" ++ "SETTING THE WRONG BLASTER ENVIRONMENT CAN\n" ++ "CAUSE YOUR SYSTEM TO CRASH AND CAN CAUSE\n" ++ "PERMANENT DAMAGE !!!"); ++ gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT); ++ gtk_misc_set_padding(GTK_MISC(label), 10, 10); ++ gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog_window)->vbox), ++ label, TRUE, TRUE, 0); ++ gtk_widget_show(label); ++ gtk_grab_add(dialog_window); ++ GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); ++ gtk_widget_grab_default(button); ++ gtk_widget_show(dialog_window); ++} ++ ++static void hw_check_button_cb(GtkWidget * widget, gpointer data) ++{ ++ if (GTK_TOGGLE_BUTTON(widget)->active) ++ { ++ if (oss_cfg.hardware_access == 0) ++ warning_dialog(); ++ oss_cfg.hardware_access = 1; ++ initHardwareAccess (); ++ gtk_widget_set_sensitive(stereo_check_button, TRUE); ++ gtk_widget_set_sensitive(save3dse_check_button, TRUE); ++ } ++ else ++ { ++ oss_cfg.hardware_access = 0; ++ } ++} ++ + static void audio_device_toggled(GtkToggleButton * widget, gpointer data) + { + gboolean use_alt_audio_device = gtk_toggle_button_get_active(widget); +@@ -148,10 +246,38 @@ static void scan_devices(gchar * type, G + } + else + { +- item = gtk_menu_item_new_with_label(_("Default")); +- gtk_signal_connect(GTK_OBJECT(item), "activate", sigfunc, (gpointer) 0); +- gtk_widget_show(item); +- gtk_menu_append(GTK_MENU(menu), item); ++#ifdef SOUND_MIXER_INFO ++ int i, fd; ++ gchar *dev_name; ++ mixer_info info; ++ for (i = 0; i < 10; i++) { ++ if (i) ++ dev_name = g_strdup_printf ("/dev/mixer%d", i); ++ else ++ dev_name = g_strdup_printf ("/dev/mixer"); ++ if ((fd = open (dev_name, O_RDONLY)) != -1) { ++ if (ioctl (fd, SOUND_MIXER_INFO, &info) != -1) { ++ if (!index) ++ temp = g_strdup_printf ("Default (%s)", info.name); ++ else ++ temp = g_strdup_printf ("%s", info.name); ++ item = gtk_menu_item_new_with_label (temp); ++ g_free (temp); ++ gtk_signal_connect(GTK_OBJECT(item), "activate", sigfunc, (gpointer) index++); ++ gtk_widget_show(item); ++ gtk_menu_append(GTK_MENU(menu), item); ++ } ++ close(fd); ++ } ++ g_free(dev_name); ++ } ++#endif ++ if (!index) { ++ item = gtk_menu_item_new_with_label(_("Default")); ++ gtk_signal_connect(GTK_OBJECT(item), "activate", sigfunc, (gpointer) 0); ++ gtk_widget_show(item); ++ gtk_menu_append(GTK_MENU(menu), item); ++ } + } + gtk_option_menu_set_menu(GTK_OPTION_MENU(option_menu), menu); + } +@@ -300,6 +426,69 @@ void oss_configure(void) + gtk_table_attach_defaults(GTK_TABLE(mixer_table), mixer_usemaster_check, 0, 1, 0, 1); + gtk_notebook_append_page(GTK_NOTEBOOK(notebook), mixer_frame, gtk_label_new(_("Mixer"))); + ++ stereo_frame = gtk_frame_new("3D Stereo Enhancement:"); ++ gtk_container_set_border_width(GTK_CONTAINER(stereo_frame), 5); ++ gtk_widget_show(stereo_frame); ++ stereo_box = gtk_vbox_new(FALSE, 0); ++ gtk_widget_show(stereo_box); ++ stereo_table = gtk_table_new(3, 1, FALSE); ++ gtk_widget_show(stereo_table); ++ stereo_check_button = gtk_check_button_new_with_label("3D Stereo Enhancement"); ++ gtk_signal_connect(GTK_OBJECT(stereo_check_button), "toggled", ++ GTK_SIGNAL_FUNC(stereo_check_button_cb), NULL); ++ save3dse_check_button = gtk_check_button_new_with_label("Save 3DSE setting"); ++ gtk_signal_connect(GTK_OBJECT(save3dse_check_button), "toggled", ++ GTK_SIGNAL_FUNC(save3dse_check_button_cb), stereo_check_button); ++ hw_check_button = gtk_check_button_new_with_label("Direct hardware access"); ++ gtk_signal_connect(GTK_OBJECT(hw_check_button), "toggled", ++ GTK_SIGNAL_FUNC(hw_check_button_cb), hw_check_button); ++ if (oss_cfg.stereo != -1) ++ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(save3dse_check_button), TRUE); ++ if (oss_cfg.hardware_access) ++ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(hw_check_button), TRUE); ++ if (getuid () != 0 || geteuid () != 0) ++ gtk_widget_set_sensitive(hw_check_button, FALSE); ++ switch(oss_get_3dse()) ++ { ++ case 1: ++ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(stereo_check_button), TRUE); ++ case 0: ++ gtk_widget_set_sensitive(hw_check_button, FALSE); ++ oss_cfg.hardware_access = FALSE; ++ break; ++ case -1: ++ if (!oss_cfg.hardware_access) ++ { ++ gtk_widget_set_sensitive(stereo_check_button, FALSE); ++ gtk_widget_set_sensitive(save3dse_check_button, FALSE); ++ } ++ else ++ if(oss_hw_get_3dse()) ++ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(stereo_check_button), TRUE); ++ break; ++ } ++ gtk_table_attach_defaults(GTK_TABLE(stereo_table), stereo_check_button, 0, 1, 0, 1); ++ gtk_widget_show(stereo_check_button); ++ gtk_table_attach_defaults(GTK_TABLE(stereo_table), save3dse_check_button, 0, 1, 1, 2); ++ gtk_widget_show(save3dse_check_button); ++ gtk_table_attach_defaults(GTK_TABLE(stereo_table), hw_check_button, 0, 1, 2, 3); ++ gtk_widget_show(hw_check_button); ++ stereo_align_button = gtk_alignment_new(0.2, 0.5, 0, 0); ++ gtk_container_add(GTK_CONTAINER(stereo_align_button), stereo_table); ++ gtk_widget_show(stereo_align_button); ++ stereo_label = gtk_label_new("Please note that not all sound cards support this feature.\n" ++ "Supported: SoundBlaster 16, ViBRA, AWE32/64."); ++ gtk_label_set_justify(GTK_LABEL(stereo_label), GTK_JUSTIFY_LEFT); ++ gtk_misc_set_padding(GTK_MISC(stereo_label), 5, 5); ++ gtk_widget_show(stereo_label); ++ stereo_align_label = gtk_alignment_new(0, 0, 0, 0); ++ gtk_container_add(GTK_CONTAINER(stereo_align_label), stereo_label); ++ gtk_widget_show(stereo_align_label); ++ gtk_box_pack_end(GTK_BOX(stereo_box), stereo_align_label, FALSE, FALSE, 0); ++ gtk_box_pack_end(GTK_BOX(stereo_box), stereo_align_button, TRUE, FALSE, 0); ++ gtk_container_add(GTK_CONTAINER(stereo_frame), stereo_box); ++ gtk_notebook_append_page(GTK_NOTEBOOK(notebook), stereo_frame, gtk_label_new("3DSE")); ++ + bbox = gtk_hbutton_box_new(); + gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_END); + gtk_button_box_set_spacing(GTK_BUTTON_BOX(bbox), 5); +@@ -317,4 +506,5 @@ void oss_configure(void) + gtk_box_pack_start(GTK_BOX(bbox), cancel, TRUE, TRUE, 0); + + gtk_widget_show_all(configure_win); ++ gtk_notebook_set_page(GTK_NOTEBOOK(notebook), 0); + } +--- xmms-1.2.11/Output/OSS/init.c.3dse 2001-03-08 06:49:47.000000000 +0100 ++++ xmms-1.2.11/Output/OSS/init.c 2007-11-18 20:51:57.000000000 +0100 +@@ -33,6 +33,8 @@ void oss_init(void) + oss_cfg.use_alt_audio_device = FALSE; + oss_cfg.alt_audio_device = NULL; + oss_cfg.use_master=0; ++ oss_cfg.stereo = -1; /* = 3dse setting not saved */ ++ oss_cfg.hardware_access = FALSE; + + if ((cfgfile = xmms_cfg_open_default_file())) + { +@@ -45,6 +47,32 @@ void oss_init(void) + xmms_cfg_read_string(cfgfile, "OSS", "alt_audio_device", &oss_cfg.alt_audio_device); + xmms_cfg_read_boolean(cfgfile, "OSS", "use_alt_mixer_device", &oss_cfg.use_alt_mixer_device); + xmms_cfg_read_string(cfgfile, "OSS", "alt_mixer_device", &oss_cfg.alt_mixer_device); ++ xmms_cfg_read_int(cfgfile, "OSS", "stereo", &oss_cfg.stereo); ++ xmms_cfg_read_boolean(cfgfile, "OSS", "hardware", &oss_cfg.hardware_access); + xmms_cfg_free(cfgfile); + } ++ if (oss_cfg.hardware_access) ++ if (initHardwareAccess() == -1) ++ oss_cfg.hardware_access = FALSE; ++ ++ if (oss_cfg.hardware_access) ++ switch(oss_cfg.stereo) ++ { ++ case 0: ++ oss_hw_set_3dse(0); ++ break; ++ case 1: ++ oss_hw_set_3dse(1); ++ break; ++ } ++ else ++ switch(oss_cfg.stereo) ++ { ++ case 0: ++ oss_set_3dse(0); ++ break; ++ case 1: ++ oss_set_3dse(1); ++ break; ++ } + } +--- xmms-1.2.11/Output/OSS/mixer.c.3dse 2001-06-16 15:30:35.000000000 +0200 ++++ xmms-1.2.11/Output/OSS/mixer.c 2007-11-18 20:51:57.000000000 +0100 +@@ -32,6 +32,10 @@ static char* get_mixer_device(void) + return name; + } + ++#include ++ ++static int mixer_reg = 0, mixer_data = 0; ++ + void oss_get_volume(int *l, int *r) + { + int fd, v, cmd, devs; +@@ -64,6 +68,156 @@ void oss_get_volume(int *l, int *r) + } + } + ++int oss_set_3dse(int stat) ++{ ++ int fd; ++ gchar *devname; ++ ++ if ((stat != 0) && (stat != 1)) ++ return -1; ++ ++ if (oss_cfg.mixer_device > 0) ++ devname = g_strdup_printf("/dev/mixer%d", oss_cfg.mixer_device); ++ else ++ devname = g_strdup("/dev/mixer"); ++ fd = open(devname, O_RDONLY); ++ g_free(devname); ++ ++ if (fd != -1) ++ { ++ if (ioctl(fd, SOUND_MIXER_3DSE, &stat) < 0) ++ { ++ close(fd); ++ return -1; ++ } ++ else ++ { ++ close(fd); ++ return stat; ++ } ++ } ++ return -1; ++} ++ ++int oss_get_3dse(void) ++{ ++ int fd, test_stat; ++ gchar *devname; ++ ++ if (oss_cfg.mixer_device > 0) ++ devname = g_strdup_printf("/dev/mixer%d", oss_cfg.mixer_device); ++ else ++ devname = g_strdup("/dev/mixer"); ++ fd = open(devname, O_RDONLY); ++ g_free(devname); ++ ++ if (fd != -1) ++ { ++ test_stat = 2; /* code 2 will request status */ ++ if (ioctl(fd, SOUND_MIXER_3DSE, &test_stat) < 0) ++ { ++ close(fd); ++ return -1; ++ } ++ else ++ { ++ close(fd); ++ return test_stat; ++ } ++ } ++ return -1; ++} ++ ++static void check_legal_mixer () ++{ ++ if (!mixer_reg || !mixer_data) ++ { ++ fprintf(stderr, "Illegal mixer settings...\n"); ++ exit(1); ++ } ++} ++ ++void oss_hw_set_3dse(int stat) ++{ ++ unsigned char b; ++ check_legal_mixer (); ++ switch(stat) ++ { ++ case 1: ++ outb(AWE_3DSE, mixer_reg); ++ b = inb(mixer_data); ++ b |= 1; ++ outb(b, mixer_data); ++ break; ++ case 0: ++ outb(AWE_3DSE, mixer_reg); ++ b = inb(mixer_data); ++ b &= 0xff - 1; ++ outb(b, mixer_data); ++ break; ++ } ++} ++ ++int oss_hw_get_3dse(void) ++{ ++ unsigned char b; ++ check_legal_mixer (); ++ outb(AWE_3DSE, mixer_reg); ++ b = inb(mixer_data); ++ return (b & 1); ++} ++ ++int initHardwareAccess () ++{ ++ char *blasterEnv, *Aptr, *Mptr; ++ int tmp, mixer_base = 0; ++ ++ if ((blasterEnv = getenv ("BLASTER"))) ++ { ++ Aptr = blasterEnv; ++ while ((Aptr = strchr(Aptr, 'A'))) ++ if ((tmp = strtol(++Aptr, &Aptr, 16))) ++ mixer_base = tmp; ++ Mptr = blasterEnv; ++ while ((Mptr = strchr(Mptr, 'M'))) ++ if ((tmp = strtol(++Mptr, &Mptr, 16))) ++ mixer_base = tmp; ++ } ++ if (!mixer_base) ++ { ++ mixer_base = MIXER_BASE_DEFAULT; ++ } ++ else ++ { ++ switch (mixer_base) ++ { ++ case 0x210: ++ case 0x220: ++ case 0x230: ++ case 0x240: ++ case 0x250: ++ case 0x260: ++ case 0x280: ++ break; ++ default: ++ fprintf (stderr, "Illegal mixer base.\n"); ++ exit (1); ++ } ++ } ++ mixer_reg = mixer_base + MIXER_REG_OFFSET; ++ mixer_data = mixer_base + MIXER_DATA_OFFSET; ++ if (getuid () == 0 && geteuid () == 0) ++ { ++ ioperm (mixer_reg, 1, 1); ++ ioperm (mixer_data, 1, 1); ++ return 0; ++ } ++ else ++ { ++ return -1; ++ } ++} ++ + void oss_set_volume(int l, int r) + { + int fd, v, cmd, devs; +--- xmms-1.2.11/Output/OSS/soundcard.h.3dse 2003-06-11 23:01:12.000000000 +0200 ++++ xmms-1.2.11/Output/OSS/soundcard.h 2007-11-18 20:51:57.000000000 +0100 +@@ -1151,8 +1151,8 @@ typedef unsigned char mixer_record[128]; + /* + * Two ioctls for special souncard function (OSS/Free only) + */ +-#define SOUND_MIXER_AGC _SIOWR('M', 103, int) +-#define SOUND_MIXER_3DSE _SIOWR('M', 104, int) ++#define SOUND_MIXER_AGC __SIOWR('M', 103, int) ++#define SOUND_MIXER_3DSE __SIOWR('M', 104, int) + /* + * The SOUND_MIXER_PRIVATE# commands can be redefined by low level drivers. + * These features can be used when accessing device specific features. diff --git a/extra/xmms/xmms-1.2.11-CVE-2007-0653.0654.patch b/extra/xmms/xmms-1.2.11-CVE-2007-0653.0654.patch new file mode 100644 index 000000000..5fa977254 --- /dev/null +++ b/extra/xmms/xmms-1.2.11-CVE-2007-0653.0654.patch @@ -0,0 +1,43 @@ +--- xmms-1.2.11/xmms/bmp.c.CVE-2007-0653.0654 2006-07-16 15:40:04.000000000 +0200 ++++ xmms-1.2.11/xmms/bmp.c 2007-11-18 21:23:11.000000000 +0100 +@@ -19,6 +19,12 @@ + */ + #include "xmms.h" + ++#if HAVE_STDINT_H ++#include ++#elif !defined(UINT32_MAX) ++#define UINT32_MAX 0xffffffffU ++#endif ++ + struct rgb_quad + { + guchar rgbBlue; +@@ -183,7 +189,7 @@ GdkPixmap *read_bmp(gchar * filename) + } + else if (bitcount != 24 && bitcount != 16 && bitcount != 32) + { +- gint ncols, i; ++ guint32 ncols, i; + + ncols = offset - headSize - 14; + if (headSize == 12) +@@ -201,9 +207,17 @@ GdkPixmap *read_bmp(gchar * filename) + } + } + fseek(file, offset, SEEK_SET); ++ /* verify buffer size */ ++ if (!h || !w || ++ w > (((UINT32_MAX - 3) / 3) / h) || ++ h > (((UINT32_MAX - 3) / 3) / w)) { ++ g_warning("read_bmp(): width(%u)*height(%u) too large", w, h); ++ fclose(file); ++ return NULL; ++ } ++ data = g_malloc0((w * 3 * h) + 3); /* +3 is just for safety */ + buffer = g_malloc(imgsize); + fread(buffer, imgsize, 1, file); +- data = g_malloc0((w * 3 * h) + 3); /* +3 is just for safety */ + + if (bitcount == 1) + read_1b_rgb(buffer, imgsize, data, w, h, rgb_quads); diff --git a/extra/xmms/xmms-1.2.11-fix-http-title-mpg123.patch b/extra/xmms/xmms-1.2.11-fix-http-title-mpg123.patch new file mode 100644 index 000000000..55c06a756 --- /dev/null +++ b/extra/xmms/xmms-1.2.11-fix-http-title-mpg123.patch @@ -0,0 +1,10 @@ +--- xmms-1.2.11/Input/mpg123/common.c~ 2007-11-18 20:37:41.000000000 +0100 ++++ xmms-1.2.11/Input/mpg123/common.c 2007-11-18 20:40:10.000000000 +0100 +@@ -274,6 +274,7 @@ static gboolean read_id3v2_tag(unsigned + char *songname = mpg123_title; + mpg123_title = + mpg123_format_song_title(tag, mpg123_filename); ++ if (filept) + mpg123_ip.set_info(mpg123_title, mpg123_length, + mpg123_bitrate * 1000, + mpg123_frequency, mpg123_stereo); diff --git a/extra/xmms/xmms-fix.diff b/extra/xmms/xmms-fix.diff new file mode 100644 index 000000000..a810aa20c --- /dev/null +++ b/extra/xmms/xmms-fix.diff @@ -0,0 +1,11 @@ +--- xmms-1.2.10+cvs20060429/xmms/util.c.orig 2006-11-05 12:29:59.000000000 +0800 ++++ xmms-1.2.10+cvs20060429/xmms/util.c 2006-11-05 12:30:01.000000000 +0800 +@@ -175,7 +175,7 @@ GdkImage *create_dblsize_image(GdkImage + * This needs to be optimized + */ + +- dblimg = gdk_image_new(GDK_IMAGE_NORMAL, gdk_visual_get_best(), img->width << 1, img->height << 1); ++ dblimg = gdk_image_new(GDK_IMAGE_NORMAL, gdk_visual_get_best_with_depth(img->depth), img->width << 1, img->height << 1); + if (dblimg->bpp == 1) + { + register guint8 *srcptr, *ptr, *ptr2, pix; diff --git a/extra/xmms/xmms-menu.patch b/extra/xmms/xmms-menu.patch new file mode 100644 index 000000000..39304f9fc --- /dev/null +++ b/extra/xmms/xmms-menu.patch @@ -0,0 +1,35 @@ +--- xmms/xmms.desktop 2002-02-11 23:15:56.000000000 +0000 ++++ xmms.desktop 2006-02-25 14:21:03.000000000 +0000 +@@ -1,21 +1,16 @@ + [Desktop Entry] + Name=XMMS + Comment=X Multimedia System +-comment[az]=X Multimedya Sistemi +-comment[ca]=Sistema Multimèdia per a X +-comment[cs]=Multimediální pøehrávaè +-comment[es]=Sistema Multimedia para X +-comment[gl]=Sistema Multimedia para X +-comment[hr]=X Multimedijski Sustav +-comment[nn]=X Multimedia-system +-comment[pt_BR]=X Multimedia System +-comment[ro]=X MultiMedia Sistem +-comment[th]=ÃкºÁÑŵÔÁÕà´Õº¹ X +-comment[tr]=X Multimedya Sistem +-comment[zh_TW]=X ¦h´CÅé¨t²Î +-Encoding=Legacy-Mixed ++Comment[es]=Sistema Multimedia para X ++Comment[gl]=Sistema Multimedia para X ++Comment[hr]=X Multimedijski Sustav ++Comment[pt_BR]=X Multimedia System ++Comment[ro]=X MultiMedia Sistem ++Comment[tr]=X Multimedya Sistem ++Encoding=UTF-8 + Exec=xmms +-Icon=xmms_mini.xpm +-MimeType=audio/x-scpls;audio/x-mpegurl;audio/mpegurl;audio/mp3;audio/x-mp3;audio/mpeg;audio/x-mpeg;audio/x-wav;application/x-ogg +-Terminal=0 ++Icon=xmms + Type=Application ++Categories=Application;AudioVideo; ++MimeType=audio/x-scpls;audio/x-mpegurl;audio/mpegurl;audio/mp3;audio/x-mp3;audio/mpeg;audio/x-mpeg;audio/x-wav;application/x-ogg ++Terminal=false diff --git a/extra/xmms/xmms.16.png b/extra/xmms/xmms.16.png new file mode 100644 index 0000000000000000000000000000000000000000..c7f1a768b793ee7160288b9627ebebaccea7314a GIT binary patch literal 1497 zcmV;~1t$85P)SC>-@beI`t_9? znoJcHm6ec6rBbOBym&D-HafbJcj!=SYiB3eY*kfVUEuXTdK3siAn^C!em_W3B$7<# z_==H{zy3<4z-+Fr?&yHU#l=NYgnRe;`yGxPakWa9SKQtXHd|$7R~L+r4-5nX;Pnm- z`TYQq$ihO7uTp_b2J&=zZmz1zZda?7O0^o=+YcUWX#u}K5*Z%{kH_Qjcveqru~;k? z3miS#)z#YzZui57fdF_sfBfO~f+)sfq6q1;D#7Oq z20b1KheM(1Y2J!(I24LRV0JbV@%ccl*6WLk0F+9ZY$ZRLgx7B_od$V#cXxMBkKJBS zke4S(aN)w$t9^YiI{M<#dJE6$ez^j@JbU27tP6xMc-Mo407FaC1cYpE; zIGum~847{f+}&+9Ln4t#h+?+81pzKxIDh`qC1`5ewaaRS#>U3R#zr`M_RN`c=U{p| z5($T)u+U)0WT2zt)TuptptZHHZ})CcycV!`@7}!!4uH+p)@HN8l`G$V`|x3|qOPtZ zN9yWeaPa4!vj&uxCzHYE&6Snw*F#6g2Ok_e1{D?c^~J?dQDHI}jk$P(p{&ecfc^Uq z9<*BF(xr$G#Cuv^-fMkBFmqX zD5g@m`I3^7k_{U`r<2JxZUmoiYRcz>{{H*-fBZ2QcmDi0-<&%KPN&o9bb{jd-+%i} zp#ZH`qlredO%)76K|x_*ULNe))znm84o{v84!YerzYv7{e7PK+K7I1!pMT)pcdM%O zdPpRqQBj1VB0qyu9pZ zvu)d!EjxBVOG{gu#R4-kv$N4C=yY1GRtx_EUPYih#fxLi00000NkvXXu0mjf#xLfF literal 0 HcmV?d00001 diff --git a/extra/xmms/xmms.32.png b/extra/xmms/xmms.32.png new file mode 100644 index 0000000000000000000000000000000000000000..1800ea571d7a0bbf4d44b41bb1cfd600f7795d42 GIT binary patch literal 3477 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 literal 0 HcmV?d00001 diff --git a/extra/xmms/xmms.48.png b/extra/xmms/xmms.48.png new file mode 100644 index 0000000000000000000000000000000000000000..999cb831ad96d2e7577bd38afdc400ac193bfd4d GIT binary patch literal 5925 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 literal 0 HcmV?d00001 diff --git a/extra/xmms/xmms.install b/extra/xmms/xmms.install new file mode 100644 index 000000000..e111ef946 --- /dev/null +++ b/extra/xmms/xmms.install @@ -0,0 +1,11 @@ +post_install() { + update-desktop-database -q +} + +post_upgrade() { + post_install +} + +post_remove() { + post_install +}