# HG changeset patch # User Matti Hamalainen # Date 1065150665 0 # Node ID ab522ab65c855027485eaefbef5b3d409a2d973e # Parent 3fca0b13a80aaebfce7bd0be48ef33a0894db467 Various fixes and improvements diff -r 3fca0b13a80a -r ab522ab65c85 src/xmms-sid.c --- a/src/xmms-sid.c Fri Sep 19 23:55:01 2003 +0000 +++ b/src/xmms-sid.c Fri Oct 03 03:11:05 2003 +0000 @@ -98,28 +98,10 @@ */ static GtkWidget *xs_ctrlwin = NULL; static pthread_t xs_decode_thread; -static pthread_mutex_t xs_mutex = PTHREAD_MUTEX_INITIALIZER; +static pthread_mutex_t xs_mutex = PTHREAD_MUTEX_INITIALIZER; struct t_xs_cfg xs_cfg; t_xs_status xs_status; -t_xs_player *xs_player; - - -/* - * Create sub-song control window - */ -void xs_ctrlwin_open(void) -{ - /* Create sub-song control window */ - if (xs_ctrlwin != NULL) - { - if (xs_cfg.alwaysRaise) - gdk_window_raise(xs_ctrlwin->window); - return; - } - - xs_ctrlwin = create_xs_ctrlwin(); - gtk_widget_show(xs_ctrlwin); -} +t_xs_player *xs_player = NULL; /* @@ -179,8 +161,6 @@ /* Initialize STIL structures */ -// xs_ctrlwin_open(); - // FIXME FIXME FIx ME XSDEBUG("OK\n"); @@ -200,8 +180,6 @@ xs_player->plrDeleteSID(&xs_status); xs_player->plrClose(&xs_status); - /* Close sub-song control window */ - /* Free allocated memory */ xs_songlen_close(); @@ -216,6 +194,7 @@ gint xs_is_our_file(gchar *pcFileName) { char *pcExt; + assert(xs_player); /* Check the filename */ if (pcFileName == NULL) @@ -295,14 +274,13 @@ /* Get song information for current subtune */ songLength = xs_songlen_get(myStatus.currFileName, myStatus.currSong); -/* xs_plugin_ip.set_info( - myTuneInfo.titleStr, + myStatus.currFileName, (songLength > 0) ? (songLength * 1000) : -1, - 1000 * myTuneInfo.songSpeed, + 1000 * xs_player->plrGetTuneSpeed(&xs_status), audioFreq, audioChannels); -*/ + /* Open the audio output */ if (!xs_plugin_ip.output->open_audio(audioFmt, audioFreq, audioChannels)) @@ -470,14 +448,22 @@ */ void xs_seek(gint iTime) { + if (xs_cfg.subsongControl == XS_SSC_POPUP) + { + /* User wants to use the pop-up */ + } + /* If we have song-position patch, check settings */ #ifdef HAVE_SONG_POSITION - pthread_mutex_lock(&xs_mutex); + if (xs_cfg.subsongControl == XS_SSC_PATCH) + { + pthread_mutex_lock(&xs_mutex); - if ((iTime > 0) && (iTime <= xs_status.nSongs) && xs_status.isPlaying) - xs_status.currSong = iTime; + if ((iTime > 0) && (iTime <= xs_status.nSongs) && xs_status.isPlaying) + xs_status.currSong = iTime; - pthread_mutex_unlock(&xs_mutex); + pthread_mutex_unlock(&xs_mutex); + } #endif } @@ -495,11 +481,14 @@ if (!xs_status.isPlaying) return -1; - /* Obsolete? */ + /* Let's see what we do */ #ifdef HAVE_SONG_POSITION - pthread_mutex_lock(&xs_mutex); - set_song_position(xs_status.currSong, 1, xs_status.nSongs); - pthread_mutex_unlock(&xs_mutex); + if (xs_cfg.subsongControl == XS_SSC_PATCH) + { + pthread_mutex_lock(&xs_mutex); + set_song_position(xs_status.currSong, 1, xs_status.nSongs); + pthread_mutex_unlock(&xs_mutex); + } #endif /* Else, return output time reported by audio output plugin */ diff -r 3fca0b13a80a -r ab522ab65c85 src/xmms-sid.h --- a/src/xmms-sid.h Fri Sep 19 23:55:01 2003 +0000 +++ b/src/xmms-sid.h Fri Oct 03 03:11:05 2003 +0000 @@ -20,8 +20,6 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#define DEBUG - #ifndef XMMS_SID_H #define XMMS_SID_H @@ -34,6 +32,11 @@ #include #include +/* + * Some defines + */ +#define DEBUG /* ... */ +#undef HAVE_HARDSID_BUILDER /* HardSID-support is not working and is untested */ /* * Generals @@ -52,10 +55,18 @@ typedef struct { + gint tuneSpeed; + gint tuneLength; + gchar *titleStr; +} t_xs_tuneinfo; + + +typedef struct { void *player; gboolean isError, isPlaying, allowNext; - gint currSong, nSongs; + gint currSong, nSongs, startSong; gchar *currFileName; + t_xs_tuneinfo subTunes[XS_STIL_MAXENTRY]; } t_xs_status; extern t_xs_status xs_status; diff -r 3fca0b13a80a -r ab522ab65c85 src/xs_config.c --- a/src/xs_config.c Fri Sep 19 23:55:01 2003 +0000 +++ b/src/xs_config.c Fri Oct 03 03:11:05 2003 +0000 @@ -53,7 +53,8 @@ {CTYPE_INT, &xs_cfg.clockSpeed, "clockSpeed"}, {CTYPE_BOOL, &xs_cfg.forceSpeed, "forceSpeed"}, - {CTYPE_INT, &xs_cfg.optimiseLevel, "optimiseLevel"}, + {CTYPE_INT, &xs_cfg.sid2Builder, "sid2Builder"}, + {CTYPE_INT, &xs_cfg.sid2OptLevel, "sid2OptLevel"}, {CTYPE_BOOL, &xs_cfg.oversampleEnable, "oversampleEnable"}, {CTYPE_INT, &xs_cfg.oversampleFactor, "oversampleFactor"}, @@ -68,8 +69,8 @@ {CTYPE_BOOL, &xs_cfg.stilDBEnable, "stilDBEnable"}, {CTYPE_STR, &xs_cfg.stilDBPath, "stilDBPath"}, + {CTYPE_INT, &xs_cfg.subsongControl, "subsongControl"}, {CTYPE_BOOL, &xs_cfg.detectMagic, "detectMagic"}, - {CTYPE_BOOL, &xs_cfg.alwaysRaise, "alwaysRaise"}, {CTYPE_BOOL, &xs_cfg.titleOverride, "titleOverride"}, {CTYPE_STR, &xs_cfg.titleFormat, "titleFormat"}, @@ -94,16 +95,19 @@ { WTYPE_BGROUP, CTYPE_INT, "cfg_emu_sidplay1", &xs_cfg.playerEngine, XS_ENG_SIDPLAY1 }, { WTYPE_BGROUP, CTYPE_INT, "cfg_emu_sidplay2", &xs_cfg.playerEngine, XS_ENG_SIDPLAY2 }, -{ WTYPE_BUTTON, CTYPE_BOOL, "cfg_emu_sidplay2_opt", &xs_cfg.optimiseLevel, 0 }, { WTYPE_BGROUP, CTYPE_INT, "cfg_emu_nanosid", &xs_cfg.playerEngine, XS_ENG_NANOSID }, -{ WTYPE_BUTTON, CTYPE_BOOL, "cfg_emu_mos8580", &xs_cfg.mos8580, 0 }, { WTYPE_BGROUP, CTYPE_INT, "cfg_emu_mem_real", &xs_cfg.memoryMode, XS_MPU_REAL }, { WTYPE_BGROUP, CTYPE_INT, "cfg_emu_mem_banksw", &xs_cfg.memoryMode, XS_MPU_BANK_SWITCHING }, { WTYPE_BGROUP, CTYPE_INT, "cfg_emu_mem_transrom", &xs_cfg.memoryMode, XS_MPU_TRANSPARENT_ROM }, { WTYPE_BGROUP, CTYPE_INT, "cfg_emu_mem_playsid", &xs_cfg.memoryMode, XS_MPU_PLAYSID_ENVIRONMENT }, + +{ WTYPE_BUTTON, CTYPE_BOOL, "cfg_emu_mos8580", &xs_cfg.mos8580, 0 }, { WTYPE_BGROUP, CTYPE_INT, "cfg_emu_clock_ntsc", &xs_cfg.clockSpeed, XS_CLOCK_NTSC }, { WTYPE_BGROUP, CTYPE_INT, "cfg_emu_clock_pal", &xs_cfg.clockSpeed, XS_CLOCK_PAL }, { WTYPE_BUTTON, CTYPE_BOOL, "cfg_emu_clock_force", &xs_cfg.forceSpeed, 0 }, +{ WTYPE_BUTTON, CTYPE_BOOL, "cfg_emu_sidplay2_opt", &xs_cfg.sid2OptLevel, 0 }, +{ WTYPE_BUTTON, CTYPE_BOOL, "cfg_emu_sidplay2_resid",&xs_cfg.sid2Builder, XS_BLD_RESID }, +{ WTYPE_BUTTON, CTYPE_BOOL, "cfg_emu_sidplay2_hardsid",&xs_cfg.sid2Builder, XS_BLD_HARDSID }, { WTYPE_BUTTON, CTYPE_BOOL, "cfg_emu_filters", &xs_cfg.emulateFilters, 0 }, { WTYPE_SCALE, CTYPE_FLOAT, "cfg_emu_filt_fs", &xs_cfg.filterFs, 0 }, @@ -115,15 +119,15 @@ { WTYPE_BUTTON, CTYPE_BOOL, "cfg_maxtime_unknown", &xs_cfg.playMaxTimeUnknown, 0 }, { WTYPE_BUTTON, CTYPE_BOOL, "cfg_sld_enable", &xs_cfg.songlenDBEnable, 0 }, { WTYPE_TEXT, CTYPE_STR, "cfg_sld_dbpath", &xs_cfg.songlenDBPath, 0 }, -{ WTYPE_BUTTON, CTYPE_BOOL, "cfg_silence_enable", &xs_cfg.silenceEnable, 0 }, -{ WTYPE_SPIN, CTYPE_INT, "cfg_silence_min", &xs_cfg.silenceMinTime, 0 }, -{ WTYPE_SPIN, CTYPE_INT, "cfg_silence_max", &xs_cfg.silenceMaxCheck, 0 }, { WTYPE_BUTTON, CTYPE_BOOL, "cfg_stil_enable", &xs_cfg.stilDBEnable, 0 }, { WTYPE_TEXT, CTYPE_STR, "cfg_stil_dbpath", &xs_cfg.stilDBPath, 0 }, +{ WTYPE_BGROUP, CTYPE_INT, "cfg_subsong_none", &xs_cfg.subsongControl, XS_SSC_NONE }, +{ WTYPE_BGROUP, CTYPE_INT, "cfg_subsong_popup", &xs_cfg.subsongControl, XS_SSC_POPUP }, +{ WTYPE_BGROUP, CTYPE_INT, "cfg_subsong_patch", &xs_cfg.subsongControl, XS_SSC_PATCH }, + { WTYPE_BUTTON, CTYPE_BOOL, "cfg_detectmagic", &xs_cfg.detectMagic, 0 }, -{ WTYPE_BUTTON, CTYPE_BOOL, "cfg_alwaysraise", &xs_cfg.alwaysRaise, 0 }, { WTYPE_BUTTON, CTYPE_BOOL, "cfg_ftitle_override", &xs_cfg.titleOverride, 0 }, { WTYPE_TEXT, CTYPE_STR, "cfg_ftitle_format", &xs_cfg.titleFormat, 0 }, @@ -178,7 +182,7 @@ #ifdef HAVE_NANOSID xs_cfg.playerEngine = XS_ENG_NANOSID; #else -#error Something strange is going on here... Please re-configure! +#error This should not happen! No emulator engines found! #endif #endif #endif @@ -186,7 +190,16 @@ xs_cfg.clockSpeed = XS_CLOCK_PAL; xs_cfg.forceSpeed = FALSE; - xs_cfg.optimiseLevel = FALSE; + xs_cfg.sid2OptLevel = FALSE; +#ifdef HAVE_RESID_BUILDER + xs_cfg.sid2Builder = XS_BLD_RESID; +#else +#ifdef HAVE_HARDSID_BUILDER + xs_cfg.sid2Builder = XS_BLD_HARDSID; +#else +#error This should not happen! No reSID or HardSID builder(s) found! +#endif +#endif xs_cfg.oversampleEnable = FALSE; xs_cfg.oversampleFactor = XS_MIN_OVERSAMPLE; @@ -200,8 +213,13 @@ xs_cfg.stilDBEnable = FALSE; xs_strcalloc(&xs_cfg.stilDBPath, "~/C64Music/DOCUMENTS/STIL.txt"); +#ifdef HAVE_SONG_POSITION + xs_cfg.subsongControl = XS_SSC_PATCH; +#else + xs_cfg.subsongControl = XS_SSC_POPUP; +#endif + xs_cfg.detectMagic = FALSE; - xs_cfg.alwaysRaise = TRUE; #ifdef HAVE_XMMSEXTRA xs_cfg.titleOverride = FALSE; @@ -507,40 +525,58 @@ } -void xs_cfg_emu_sidplay1_toggled(GtkToggleButton *togglebutton, gpointer user_data) +void xs_cfg_emu_filters_toggled(GtkToggleButton *togglebutton, gpointer user_data) { -#ifdef HAVE_SIDPLAY1 -#endif } -void xs_cfg_emu_sidplay2_set(gboolean isActive) +void xs_cfg_ftitle_override_toggled(GtkToggleButton *togglebutton, gpointer user_data) { - gtk_widget_set_sensitive(LUW("cfg_emu_sidplay2_opt"), isActive); + gboolean isActive = GTK_TOGGLE_BUTTON(LUW("cfg_ftitle_override"))->active; + + gtk_widget_set_sensitive(LUW("cfg_ftitle_format"), isActive); + gtk_widget_set_sensitive(LUW("cfg_ftitle_desc1"), isActive); + gtk_widget_set_sensitive(LUW("cfg_ftitle_desc2"), isActive); + gtk_widget_set_sensitive(LUW("cfg_ftitle_desc3"), isActive); +} + + +void xs_cfg_emu_sidplay1_toggled(GtkToggleButton *togglebutton, gpointer user_data) +{ +} + + +void xs_cfg_emu_sidplay2_toggled(GtkToggleButton *togglebutton, gpointer user_data) +{ + gboolean isActive = GTK_TOGGLE_BUTTON(LUW("cfg_emu_sidplay2"))->active; gtk_widget_set_sensitive(LUW("cfg_emu_mem_real"), isActive); gtk_widget_set_sensitive(LUW("cfg_oversample_grp"), isActive); gtk_widget_set_sensitive(LUW("cfg_oversample"), isActive); gtk_widget_set_sensitive(LUW("cfg_oversample_factor"), isActive); - gtk_widget_set_sensitive(LUW("cfg_overfilter_average"), isActive); gtk_widget_set_sensitive(LUW("cfg_overfilter_sinc"), isActive); -} + gtk_widget_set_sensitive(LUW("cfg_sidplay2_grp"), isActive); + gtk_widget_set_sensitive(LUW("cfg_emu_sidplay2_opt"), isActive); -void xs_cfg_emu_sidplay2_toggled(GtkToggleButton *togglebutton, gpointer user_data) -{ -#ifdef HAVE_SIDPLAY2 - xs_cfg_emu_sidplay2_set(GTK_TOGGLE_BUTTON(LUW("cfg_emu_sidplay2"))->active); +#ifdef HAVE_RESID_BUILDER + gtk_widget_set_sensitive(LUW("cfg_emu_sidplay2_resid"), isActive); +#else + gtk_widget_set_sensitive(LUW("cfg_emu_sidplay2_resid"), FALSE); +#endif + +#ifdef HAVE_HARDSID_BUILDER + gtk_widget_set_sensitive(LUW("cfg_emu_sidplay2_hardsid"), isActive); +#else + gtk_widget_set_sensitive(LUW("cfg_emu_sidplay2_hardsid"), FALSE); #endif } void xs_cfg_emu_nanosid_toggled(GtkToggleButton *togglebutton, gpointer user_data) { -#ifdef HAVE_NANOSID -#endif } @@ -562,6 +598,7 @@ /* Create the window */ xs_configwin = create_xs_configwin(); + /* Based on selected emulation library, disable options */ #ifndef HAVE_SIDPLAY1 gtk_widget_set_sensitive(LUW("cfg_emu_sidplay1"), FALSE); @@ -569,23 +606,25 @@ #ifndef HAVE_SIDPLAY2 gtk_widget_set_sensitive(LUW("cfg_emu_sidplay2"), FALSE); - xs_cfg_emu_sidplay2_set(FALSE); #endif #ifndef HAVE_NANOSID gtk_widget_set_sensitive(LUW("cfg_emu_nanosid"), FALSE); #endif + /* Other UI options */ +#ifndef HAVE_XMMSEXTRA + gtk_widget_set_sensitive(LUW("cfg_ftitle_override"), FALSE); +#endif + + + /* Update the widget sensitivities */ + xs_cfg_emu_filters_toggled(NULL, NULL); + xs_cfg_ftitle_override_toggled(NULL, NULL); xs_cfg_emu_sidplay1_toggled(NULL, NULL); xs_cfg_emu_sidplay2_toggled(NULL, NULL); xs_cfg_emu_nanosid_toggled(NULL, NULL); - /* Other UI options */ -#ifndef HAVE_XMMSEXTRA - gtk_widget_set_sensitive(LUW("cfg_ftitle_override"), FALSE); - xs_cfg.titleOverride = TRUE; -#endif - /* Set current data to widgets */ for (i = 0; i < xs_widtable_max; i++) diff -r 3fca0b13a80a -r ab522ab65c85 src/xs_config.h --- a/src/xs_config.h Fri Sep 19 23:55:01 2003 +0000 +++ b/src/xs_config.h Fri Oct 03 03:11:05 2003 +0000 @@ -11,12 +11,17 @@ * Configuration structure */ enum XS_EMUENGINE { - XS_ENG_SIDPLAY1, + XS_ENG_SIDPLAY1 = 1, XS_ENG_SIDPLAY2, XS_ENG_NANOSID }; +enum XS_BUILDER { + XS_BLD_RESID = 1, + XS_BLD_HARDSID +}; + enum XS_RESOLUTION { XS_RES_8BIT = 8, XS_RES_16BIT = 16, @@ -50,6 +55,13 @@ }; +enum XS_SSC { + XS_SSC_NONE = 1, + XS_SSC_POPUP, + XS_SSC_PATCH +}; + + extern struct t_xs_cfg { /* General audio settings */ gint fmtBitsPerSample; @@ -66,7 +78,8 @@ gint clockSpeed; /* PAL (50Hz) or NTSC (60Hz) */ gboolean forceSpeed; /* TRUE = force to given clockspeed */ - gboolean optimiseLevel; /* SIDPlay2 emulation optimization */ + gboolean sid2OptLevel; /* SIDPlay2 emulation optimization */ + gint sid2Builder; /* SIDPlay2 "builder" aka SID-emu */ gboolean oversampleEnable; gint oversampleFactor; /* Factor of oversampling */ @@ -87,8 +100,8 @@ gboolean stilDBEnable; gchar *stilDBPath; /* Path to STIL.txt */ + gint subsongControl; gboolean detectMagic; - gboolean alwaysRaise; gboolean titleOverride; /* TRUE if XMMS titles are overriden */ gchar *titleFormat; diff -r 3fca0b13a80a -r ab522ab65c85 src/xs_genui.c --- a/src/xs_genui.c Fri Sep 19 23:55:01 2003 +0000 +++ b/src/xs_genui.c Fri Oct 03 03:11:05 2003 +0000 @@ -43,10 +43,3 @@ -void -xs_cfg_emu_filters_toggled (GtkToggleButton *togglebutton, - gpointer user_data) -{ - -} - diff -r 3fca0b13a80a -r ab522ab65c85 src/xs_genui.h --- a/src/xs_genui.h Fri Sep 19 23:55:01 2003 +0000 +++ b/src/xs_genui.h Fri Oct 03 03:11:05 2003 +0000 @@ -72,3 +72,7 @@ void xs_cfg_emu_filters_toggled (GtkToggleButton *togglebutton, gpointer user_data); + +void +xs_cfg_ftitle_override_toggled (GtkToggleButton *togglebutton, + gpointer user_data); diff -r 3fca0b13a80a -r ab522ab65c85 src/xs_sidplay1.cc --- a/src/xs_sidplay1.cc Fri Sep 19 23:55:01 2003 +0000 +++ b/src/xs_sidplay1.cc Fri Oct 03 03:11:05 2003 +0000 @@ -297,7 +297,7 @@ */ #include "xs_sidplay.h" // Include common function -void xs_sidplay1_getsidinfo(gchar *songFileName, gchar **songTitle, gint *songLength) +void xs_sidplay1_getsidinfo(gchar *songFileName, gchar **songTitle, gint *songLength, gint subSong) { sidTuneInfo tuneInfo; sidTune *testTune; @@ -317,7 +317,12 @@ delete testTune; /* Get titlestring */ - *songTitle = xs_make_filetitle(songFileName, &tuneInfo, tuneInfo.startSong); + if (subSong < 0) + tmpInt = tuneInfo.startSong; + else + tmpInt = subSong; + + *songTitle = xs_make_filetitle(songFileName, &tuneInfo, tmpInt); /* Get song length (in milliseconds), negative if no known length */ tmpInt = xs_songlen_get(songFileName, tuneInfo.startSong); diff -r 3fca0b13a80a -r ab522ab65c85 src/xs_sidplay1.h --- a/src/xs_sidplay1.h Fri Sep 19 23:55:01 2003 +0000 +++ b/src/xs_sidplay1.h Fri Oct 03 03:11:05 2003 +0000 @@ -11,6 +11,6 @@ gboolean xs_sidplay1_loadsid(t_xs_status *, gchar *); void xs_sidplay1_deletesid(t_xs_status *); gint xs_sidplay1_gettunespeed(t_xs_status *); -void xs_sidplay1_getsidinfo(gchar *, gchar **, gint *); +void xs_sidplay1_getsidinfo(gchar *, gchar **, gint *, gint); #endif /* _XS_SIDPLAY1_H */ diff -r 3fca0b13a80a -r ab522ab65c85 src/xs_sidplay2.cc --- a/src/xs_sidplay2.cc Fri Sep 19 23:55:01 2003 +0000 +++ b/src/xs_sidplay2.cc Fri Oct 03 03:11:05 2003 +0000 @@ -100,14 +100,20 @@ FIXME! we need to select builder by configuration! */ #ifdef HAVE_RESID_BUILDER - ReSIDBuilder *tmpb = new ReSIDBuilder("SIDPlay2 suxx and is made by a fag - ReSID builder"); + if (xs_cfg.sid2Builder == XS_BLD_RESID) + { + ReSIDBuilder *tmpb = new ReSIDBuilder("SIDPlay2 suxx and is made by a fag - ReSID builder"); - /* Create the builder -- WHAT IS THIS MEANT FOR??? */ - tmpb->create(myPlayer->currEng->info().maxsids); + /* Create the builder -- WHAT IS THIS MEANT FOR??? */ + tmpb->create(myPlayer->currEng->info().maxsids); - myPlayer->currBuilder = (sidbuilder *) tmpb; + myPlayer->currBuilder = (sidbuilder *) tmpb; + } #endif #ifdef HAVE_HARDSID_BUILDER + if (xs_cfg.sid2Builder == XS_BLD_HARDSID) + { + } #endif if (!myPlayer->currBuilder) @@ -269,7 +275,7 @@ myPlayer->currConfig.precision = xs_cfg.fmtBitsPerSample; myPlayer->currConfig.frequency = xs_cfg.fmtFrequency; myPlayer->currConfig.clockForced = xs_cfg.forceSpeed; - myPlayer->currConfig.optimisation = (xs_cfg.optimiseLevel) ? 1 : 0; + myPlayer->currConfig.optimisation = (xs_cfg.sid2OptLevel) ? 1 : 0; myPlayer->currConfig.sidDefault = myPlayer->currConfig.sidModel = (xs_cfg.mos8580) ? SID2_MOS8580 : SID2_MOS6581; myPlayer->currConfig.sidSamples = TRUE; // FIXME FIX ME, make configurable!