changeset 839:29f3c3f29c0d

Finalize libSIDPlay2 vs FP configuration stuff.
author Matti Hamalainen <ccr@tnsp.org>
date Thu, 08 Nov 2012 21:44:27 +0200
parents ae1f6418d093
children c2f79bda623e
files configure.ac src/xmms-sid.c src/xs_config.c src/xs_config.h src/xs_interface.c xmms-sid.glade
diffstat 6 files changed, 66 insertions(+), 32 deletions(-) [+]
line wrap: on
line diff
--- a/configure.ac	Thu Nov 08 21:24:38 2012 +0200
+++ b/configure.ac	Thu Nov 08 21:44:27 2012 +0200
@@ -118,17 +118,17 @@
 
 
 XS_ARG_WITH([sidplayfp], [libSIDPlayFP], [XS_PATH_LIBSIDPLAYFP])
-	if test "x$xs_pkg_sidplayfp_v1" = "xyes"; then
-		AC_DEFINE([HAVE_SIDPLAYFP_V1])
-		xs_have_sidplay2_api="(FP v1.0 (alpha) API)"
-	fi
-fi
 
 if test "x$xs_have_sidplayfp" = "xyes"; then
 	AC_DEFINE([HAVE_SIDPLAYFP])
 	AC_DEFINE([HAVE_HARDSID_BUILDER])
 	AC_DEFINE([HAVE_RESID_BUILDER])
 	AC_DEFINE([HAVE_RESID_FP_BUILDER])
+	if test "x$xs_pkg_sidplayfp_v1" = "xyes"; then
+		AC_DEFINE([HAVE_SIDPLAYFP_V1])
+		xs_have_sidplay2_api="(FP v1.0 (alpha) API)"
+	fi
+fi
 
 xs_have_sidplay2_api=""
 XS_ARG_WITH([sidplay2], [libSIDPlay2], [XS_PATH_LIBSIDPLAY2])
--- a/src/xmms-sid.c	Thu Nov 08 21:24:38 2012 +0200
+++ b/src/xmms-sid.c	Thu Nov 08 21:44:27 2012 +0200
@@ -49,8 +49,8 @@
 #ifdef HAVE_SIDPLAY2
 #  include "xs_sidplay2.h"
 #endif
-#ifdef HAVE_SIDPLAY2
-#  include "xs_sidplay2.h"
+#ifdef HAVE_SIDPLAYFP
+#  include "xs_sidplayfp.h"
 #endif
 
 static XSEngine xs_enginelist[] =
@@ -77,9 +77,9 @@
         xs_sidplay2_flush
     },
 #endif
-#ifdef HAVE_SIDPLAY2_FP
+#ifdef HAVE_SIDPLAYFP
     {
-        XS_ENG_SIDPLAY2_FP,
+        XS_ENG_SIDPLAYFP,
         xs_sidplayfp_probe,
         xs_sidplayfp_init, xs_sidplayfp_close,
         xs_sidplayfp_initsong, xs_sidplayfp_fillbuffer,
--- a/src/xs_config.c	Thu Nov 08 21:24:38 2012 +0200
+++ b/src/xs_config.c	Thu Nov 08 21:44:27 2012 +0200
@@ -146,6 +146,7 @@
 
 { 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_BGROUP, CTYPE_INT,      "cfg_emu_sidplayfp",     &xs_cfg.playerEngine,           XS_ENG_SIDPLAYFP },
 { 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 },
@@ -1316,39 +1317,37 @@
 
 void xs_cfg_emu_sidplay2_toggled(GtkToggleButton * togglebutton, gpointer user_data)
 {
-    gboolean isActive = GTK_TOGGLE_BUTTON(togglebutton)->active;
+    gboolean isSP2Active = GTK_TOGGLE_BUTTON(LUW("cfg_emu_sidplay2"))->active,
+             isFPActive = GTK_TOGGLE_BUTTON(LUW("cfg_emu_sidplayfp"))->active,
+             isEither = isSP2Active || isFPActive;
 
+    (void) togglebutton;
     (void) user_data;
 
-    gtk_widget_set_sensitive(LUW("cfg_emu_mem_real"), isActive);
-
-    gtk_widget_set_sensitive(LUW("cfg_sidplay2_frame"), isActive);
+    gtk_widget_set_sensitive(LUW("cfg_emu_mem_real"), isSP2Active);
+    gtk_widget_set_sensitive(LUW("cfg_sidplay2_frame"), isEither);
 
     /* Optimization mode removed from distortion patch */
-#ifdef HAVE_SIDPLAY2_FP
-    gtk_widget_set_sensitive(LUW("cfg_emu_sp2_opt"), isActive);
-#else
-    gtk_widget_set_sensitive(LUW("cfg_emu_sp2_opt"), FALSE);
-#endif
+    gtk_widget_set_sensitive(LUW("cfg_emu_sp2_opt"), isSP2Active);
 
-    gtk_widget_set_sensitive(LUW("cfg_chn_autopan"), !isActive);
+    gtk_widget_set_sensitive(LUW("cfg_chn_autopan"), !isSP2Active);
 
-#ifdef HAVE_RESID_FP_BUILDER
-    gtk_widget_set_sensitive(LUW("cfg_emu_sp2_resid_fp"), isActive);
+#if defined(HAVE_SIDPLAYFP) && defined(HAVE_RESID_FP_BUILDER)
+    gtk_widget_set_sensitive(LUW("cfg_emu_sp2_resid_fp"), isFPActive);
 #else
     gtk_widget_set_sensitive(LUW("cfg_emu_sp2_resid_fp"), FALSE);
 #endif
 
 #ifdef HAVE_RESID_BUILDER
-    gtk_widget_set_sensitive(LUW("cfg_emu_sp2_resid"), isActive);
+    gtk_widget_set_sensitive(LUW("cfg_emu_sp2_resid"), isEither);
 #else
     gtk_widget_set_sensitive(LUW("cfg_emu_sp2_resid"), FALSE);
 #endif
 
 #ifdef HAVE_HARDSID_BUILDER
-    gtk_widget_set_sensitive(LUW("cfg_emu_sp2_hardsid"), isActive);
+    gtk_widget_set_sensitive(LUW("cfg_emu_sp2_hardsid"), isEither);
 #else
-    gtk_widget_set_sensitive(LUW("cfg_emu_sp2_hardsid"), isActive);
+    gtk_widget_set_sensitive(LUW("cfg_emu_sp2_hardsid"), FALSE);
 #endif
 }
 
@@ -1503,7 +1502,7 @@
     gtk_widget_set_sensitive(LUW("cfg_box_filter_sidplay1"), FALSE);
 #endif
 
-#ifndef HAVE_SIDPLAY2
+#if !defined(HAVE_SIDPLAY2) && !defined(HAVE_SIDPLAYFP)
     gtk_widget_set_sensitive(LUW("cfg_emu_sidplay2"), FALSE);
     gtk_widget_set_sensitive(LUW("cfg_box_filter_sidplay2"), FALSE);
 #endif
--- a/src/xs_config.h	Thu Nov 08 21:24:38 2012 +0200
+++ b/src/xs_config.h	Thu Nov 08 21:44:27 2012 +0200
@@ -14,7 +14,7 @@
 enum XS_EMUENGINE {
     XS_ENG_SIDPLAY1 = 1,
     XS_ENG_SIDPLAY2,
-    XS_ENG_SIDPLAY2_FP
+    XS_ENG_SIDPLAYFP
 };
 
 
--- a/src/xs_interface.c	Thu Nov 08 21:24:38 2012 +0200
+++ b/src/xs_interface.c	Thu Nov 08 21:44:27 2012 +0200
@@ -63,6 +63,7 @@
   GSList *emulator_group = NULL;
   GtkWidget *cfg_emu_sidplay1;
   GtkWidget *cfg_emu_sidplay2;
+  GtkWidget *cfg_emu_sidplayfp;
   GtkWidget *cfg_memmode_frame;
   GtkWidget *w_vbox5;
   GSList *memorymode_group = NULL;
@@ -498,7 +499,7 @@
   gtk_container_add (GTK_CONTAINER (cfg_emulib_frame), w_vbox26);
   gtk_container_set_border_width (GTK_CONTAINER (w_vbox26), 2);
 
-  cfg_emu_sidplay1 = gtk_radio_button_new_with_label (emulator_group, _("SIDPlay 1 (frame-based)"));
+  cfg_emu_sidplay1 = gtk_radio_button_new_with_label (emulator_group, _("SIDPlay 1 (frame-based, fast, inaccurate)"));
   emulator_group = gtk_radio_button_group (GTK_RADIO_BUTTON (cfg_emu_sidplay1));
   gtk_widget_set_name (cfg_emu_sidplay1, "cfg_emu_sidplay1");
   gtk_widget_ref (cfg_emu_sidplay1);
@@ -508,7 +509,7 @@
   gtk_box_pack_start (GTK_BOX (w_vbox26), cfg_emu_sidplay1, FALSE, FALSE, 0);
   gtk_tooltips_set_tip (tooltips, cfg_emu_sidplay1, _("Use libSIDPlay 1.x emulation, faster but not so accurate. Good in most cases, though."), NULL);
 
-  cfg_emu_sidplay2 = gtk_radio_button_new_with_label (emulator_group, _("SIDPlay 2/FP (cycle-based)"));
+  cfg_emu_sidplay2 = gtk_radio_button_new_with_label (emulator_group, _("SIDPlay 2 (cycle-based, rather accurate)"));
   emulator_group = gtk_radio_button_group (GTK_RADIO_BUTTON (cfg_emu_sidplay2));
   gtk_widget_set_name (cfg_emu_sidplay2, "cfg_emu_sidplay2");
   gtk_widget_ref (cfg_emu_sidplay2);
@@ -516,7 +517,17 @@
                             (GtkDestroyNotify) gtk_widget_unref);
   gtk_widget_show (cfg_emu_sidplay2);
   gtk_box_pack_start (GTK_BOX (w_vbox26), cfg_emu_sidplay2, FALSE, FALSE, 0);
-  gtk_tooltips_set_tip (tooltips, cfg_emu_sidplay2, _("Use libSIDPlay 2.x emulation, which requires powerful CPU due to more exact emulation."), NULL);
+  gtk_tooltips_set_tip (tooltips, cfg_emu_sidplay2, _("Use libSIDPlay 2.x emulation, which requires powerful CPU due to cycle-exact emulation."), NULL);
+
+  cfg_emu_sidplayfp = gtk_radio_button_new_with_label (emulator_group, _("SIDPlay FP (cycle-exact, very accurate, slow)"));
+  emulator_group = gtk_radio_button_group (GTK_RADIO_BUTTON (cfg_emu_sidplayfp));
+  gtk_widget_set_name (cfg_emu_sidplayfp, "cfg_emu_sidplayfp");
+  gtk_widget_ref (cfg_emu_sidplayfp);
+  gtk_object_set_data_full (GTK_OBJECT (xs_configwin), "cfg_emu_sidplayfp", cfg_emu_sidplayfp,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (cfg_emu_sidplayfp);
+  gtk_box_pack_start (GTK_BOX (w_vbox26), cfg_emu_sidplayfp, FALSE, FALSE, 0);
+  gtk_tooltips_set_tip (tooltips, cfg_emu_sidplayfp, _("Use libSIDPlayFP emulation, requires a high-end system due to accurate simulation of filter and cycle-accurate emulation."), NULL);
 
   cfg_memmode_frame = gtk_frame_new (_("Memory mode:"));
   gtk_widget_set_name (cfg_memmode_frame, "cfg_memmode_frame");
@@ -1603,6 +1614,9 @@
   gtk_signal_connect (GTK_OBJECT (cfg_emu_sidplay2), "toggled",
                       GTK_SIGNAL_FUNC (xs_cfg_emu_sidplay2_toggled),
                       NULL);
+  gtk_signal_connect (GTK_OBJECT (cfg_emu_sidplayfp), "toggled",
+                      GTK_SIGNAL_FUNC (xs_cfg_emu_sidplay2_toggled),
+                      NULL);
   gtk_signal_connect (GTK_OBJECT (cfg_emu_filters), "toggled",
                       GTK_SIGNAL_FUNC (xs_cfg_emu_filters_toggled),
                       NULL);
--- a/xmms-sid.glade	Thu Nov 08 21:24:38 2012 +0200
+++ b/xmms-sid.glade	Thu Nov 08 21:44:27 2012 +0200
@@ -480,7 +480,7 @@
 		<handler>xs_cfg_emu_sidplay1_toggled</handler>
 		<last_modification_time>Mon, 15 Sep 2003 12:12:50 GMT</last_modification_time>
 	      </signal>
-	      <label>SIDPlay 1 (frame-based)</label>
+	      <label>SIDPlay 1 (frame-based, fast, inaccurate)</label>
 	      <active>False</active>
 	      <draw_indicator>True</draw_indicator>
 	      <group>emulator</group>
@@ -494,14 +494,35 @@
 	    <widget>
 	      <class>GtkRadioButton</class>
 	      <name>cfg_emu_sidplay2</name>
-	      <tooltip>Use libSIDPlay 2.x emulation, which requires powerful CPU due to more exact emulation.</tooltip>
+	      <tooltip>Use libSIDPlay 2.x emulation, which requires powerful CPU due to cycle-exact emulation.</tooltip>
 	      <can_focus>True</can_focus>
 	      <signal>
 		<name>toggled</name>
 		<handler>xs_cfg_emu_sidplay2_toggled</handler>
 		<last_modification_time>Mon, 15 Sep 2003 12:13:00 GMT</last_modification_time>
 	      </signal>
-	      <label>SIDPlay 2/FP (cycle-based)</label>
+	      <label>SIDPlay 2 (cycle-based, rather accurate)</label>
+	      <active>False</active>
+	      <draw_indicator>True</draw_indicator>
+	      <group>emulator</group>
+	      <child>
+		<padding>0</padding>
+		<expand>False</expand>
+		<fill>False</fill>
+	      </child>
+	    </widget>
+
+	    <widget>
+	      <class>GtkRadioButton</class>
+	      <name>cfg_emu_sidplayfp</name>
+	      <tooltip>Use libSIDPlayFP emulation, requires a high-end system due to accurate simulation of filter and cycle-accurate emulation.</tooltip>
+	      <can_focus>True</can_focus>
+	      <signal>
+		<name>toggled</name>
+		<handler>xs_cfg_emu_sidplay2_toggled</handler>
+		<last_modification_time>Thu, 08 Nov 2012 19:41:06 GMT</last_modification_time>
+	      </signal>
+	      <label>SIDPlay FP (cycle-exact, very accurate, slow)</label>
 	      <active>False</active>
 	      <draw_indicator>True</draw_indicator>
 	      <group>emulator</group>