changeset 748:d9d769b5dbe2

Remove oversampling support.
author Matti Hamalainen <ccr@tnsp.org>
date Mon, 05 Nov 2012 17:51:08 +0200
parents c8be6b069eec
children 22d0c5631fd2
files src/xmms-sid.c src/xmms-sid.h src/xs_config.c src/xs_config.h src/xs_genui.h src/xs_player.h src/xs_sidplay1.cc src/xs_sidplay2.cc src/xs_support.c src/xs_support.h xmms-sid.glade
diffstat 11 files changed, 10 insertions(+), 278 deletions(-) [+]
line wrap: on
line diff
--- a/src/xmms-sid.c	Mon Nov 05 17:26:43 2012 +0200
+++ b/src/xmms-sid.c	Mon Nov 05 17:51:08 2012 +0200
@@ -105,20 +105,10 @@
     if (xs_cfg.audioFrequency < 8000)
         xs_cfg.audioFrequency = 8000;
 
-    if (xs_cfg.oversampleFactor < XS_MIN_OVERSAMPLE)
-        xs_cfg.oversampleFactor = XS_MIN_OVERSAMPLE;
-    else if (xs_cfg.oversampleFactor > XS_MAX_OVERSAMPLE)
-        xs_cfg.oversampleFactor = XS_MAX_OVERSAMPLE;
-
-    if (xs_cfg.audioChannels != XS_CHN_MONO)
-        xs_cfg.oversampleEnable = FALSE;
-
     xs_status.audioFrequency = xs_cfg.audioFrequency;
     xs_status.audioBitsPerSample = xs_cfg.audioBitsPerSample;
     xs_status.audioChannels = xs_cfg.audioChannels;
     xs_status.audioFormat = -1;
-    xs_status.oversampleEnable = xs_cfg.oversampleEnable;
-    xs_status.oversampleFactor = xs_cfg.oversampleFactor;
 
     /* Try to initialize emulator engine */
     xs_init_emu_engine(&xs_cfg.playerEngine, &xs_status);
@@ -127,7 +117,6 @@
     xs_cfg.audioFrequency = xs_status.audioFrequency;
     xs_cfg.audioBitsPerSample = xs_status.audioBitsPerSample;
     xs_cfg.audioChannels = xs_status.audioChannels;
-    xs_cfg.oversampleEnable = xs_status.oversampleEnable;
 
     XS_MUTEX_UNLOCK(xs_status);
     XS_MUTEX_UNLOCK(xs_cfg);
@@ -243,7 +232,7 @@
     xs_tuneinfo_t *myTune;
     gboolean audioOpen = FALSE, doPlay = FALSE, isFound = FALSE;
     gint audioGot, songLength, i;
-    gchar *audioBuffer = NULL, *oversampleBuffer = NULL, *tmpTitle;
+    gchar *audioBuffer = NULL, *tmpTitle;
 
     (void) argPointer;
 
@@ -263,14 +252,6 @@
         goto xs_err_exit;
     }
 
-    if (myStatus.oversampleEnable) {
-        oversampleBuffer = (gchar *) g_malloc(XS_AUDIOBUF_SIZE * myStatus.oversampleFactor);
-        if (oversampleBuffer == NULL) {
-            xs_error("Couldn't allocate memory for audio oversampling buffer!\n");
-            goto xs_err_exit;
-        }
-    }
-
     /*
      * Main player loop: while not stopped, loop here - play subtunes
      */
@@ -387,29 +368,8 @@
          * Play the subtune
          */
         while (xs_status.isPlaying && myStatus.isPlaying && (xs_status.currSong == myStatus.currSong)) {
-            /* Render audio data */
-            if (myStatus.oversampleEnable) {
-                /* Perform oversampled rendering */
-                audioGot = myStatus.sidPlayer->plrFillBuffer(
-                    &myStatus,
-                    oversampleBuffer,
-                    (XS_AUDIOBUF_SIZE * myStatus.oversampleFactor));
-
-                audioGot /= myStatus.oversampleFactor;
-
-                /* Execute rate-conversion with filtering */
-                if (xs_filter_rateconv(audioBuffer, oversampleBuffer,
-                    myStatus.audioFormat, myStatus.oversampleFactor, audioGot) < 0) {
-                    xs_error("Oversampling rate-conversion pass failed.\n");
-                    XS_MUTEX_LOCK(xs_status);
-                    xs_status.isError = TRUE;
-                    XS_MUTEX_UNLOCK(xs_status);
-                    goto xs_err_exit;
-                }
-            } else {
-                audioGot = myStatus.sidPlayer->plrFillBuffer(
-                    &myStatus, audioBuffer, XS_AUDIOBUF_SIZE);
-            }
+            audioGot = myStatus.sidPlayer->plrFillBuffer(
+                &myStatus, audioBuffer, XS_AUDIOBUF_SIZE);
 
             /* I <3 visualice/haujobb */
             xs_plugin_ip.add_vis_pcm(
@@ -471,7 +431,6 @@
     }
 
     g_free(audioBuffer);
-    g_free(oversampleBuffer);
 
     /* Set playing status to false (stopped), thus when
      * XMMS next calls xs_get_time(), it can return appropriate
--- a/src/xmms-sid.h	Mon Nov 05 17:26:43 2012 +0200
+++ b/src/xmms-sid.h	Mon Nov 05 17:51:08 2012 +0200
@@ -93,11 +93,6 @@
 #define XS_SIDPLAY2_NFPOINTS    (0x800)
 #define XS_SIDPLAY2_FMAX    (24000)
 
-/* Limits for oversampling
- */
-#define XS_MIN_OVERSAMPLE    (2)
-#define XS_MAX_OVERSAMPLE    (8)
-
 
 /* Macros for mutexes and threads. These exist to be able to
  * easily change from pthreads to glib threads, etc, if necessary.
--- a/src/xs_config.c	Mon Nov 05 17:26:43 2012 +0200
+++ b/src/xs_config.c	Mon Nov 05 17:51:08 2012 +0200
@@ -107,9 +107,6 @@
 { CTYPE_INT,    &xs_cfg.sid2OptLevel,           "sid2OptLevel" },
 { CTYPE_INT,    &xs_cfg.sid2NFilterPresets,     "sid2NFilterPresets" },
 
-{ CTYPE_BOOL,   &xs_cfg.oversampleEnable,       "oversampleEnable" },
-{ CTYPE_INT,    &xs_cfg.oversampleFactor,       "oversampleFactor" },
-
 { CTYPE_BOOL,   &xs_cfg.playMaxTimeEnable,      "playMaxTimeEnable" },
 { CTYPE_BOOL,   &xs_cfg.playMaxTimeUnknown,     "playMaxTimeUnknown" },
 { CTYPE_INT,    &xs_cfg.playMaxTime,            "playMaxTime" },
@@ -145,8 +142,6 @@
 { WTYPE_BGROUP, CTYPE_INT,      "cfg_chn_stereo",       &xs_cfg.audioChannels,          XS_CHN_STEREO },
 { WTYPE_BGROUP, CTYPE_INT,      "cfg_chn_autopan",      &xs_cfg.audioChannels,          XS_CHN_AUTOPAN },
 { WTYPE_COMBO,  CTYPE_INT,      "cfg_samplerate",       &xs_cfg.audioFrequency,         XS_AUDIO_FREQ },
-{ WTYPE_BUTTON, CTYPE_BOOL,     "cfg_oversample",       &xs_cfg.oversampleEnable,       0 },
-{ WTYPE_SPIN,   CTYPE_INT,      "cfg_oversample_factor",&xs_cfg.oversampleFactor,       0 },
 
 { 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 },
@@ -256,9 +251,6 @@
 #endif
 #endif
 
-    xs_cfg.oversampleEnable = FALSE;
-    xs_cfg.oversampleFactor = XS_MIN_OVERSAMPLE;
-
     xs_cfg.playMaxTimeEnable = FALSE;
     xs_cfg.playMaxTimeUnknown = FALSE;
     xs_cfg.playMaxTime = 150;
@@ -1278,16 +1270,6 @@
 }
 
 
-void xs_cfg_oversample_toggled(GtkToggleButton * togglebutton, gpointer user_data)
-{
-    gboolean isActive = GTK_TOGGLE_BUTTON(togglebutton)->active;
-
-    (void) user_data;
-
-    gtk_widget_set_sensitive(LUW("cfg_oversample_box"), isActive);
-}
-
-
 void xs_cfg_mintime_enable_toggled(GtkToggleButton * togglebutton, gpointer user_data)
 {
     gboolean isActive = GTK_TOGGLE_BUTTON(togglebutton)->active;
@@ -1451,7 +1433,6 @@
     xs_cfg_emu_filters_toggled(GTK_TOGGLE_BUTTON(LUW("cfg_emu_filters")), NULL);
     xs_cfg_emu_sidplay1_toggled(GTK_TOGGLE_BUTTON(LUW("cfg_emu_sidplay1")), NULL);
     xs_cfg_emu_sidplay2_toggled(GTK_TOGGLE_BUTTON(LUW("cfg_emu_sidplay2")), NULL);
-    xs_cfg_oversample_toggled(GTK_TOGGLE_BUTTON(LUW("cfg_oversample")), NULL);
     xs_cfg_mintime_enable_toggled(GTK_TOGGLE_BUTTON(LUW("cfg_mintime_enable")), NULL);
     xs_cfg_maxtime_enable_toggled(GTK_TOGGLE_BUTTON(LUW("cfg_maxtime_enable")), NULL);
     xs_cfg_sldb_enable_toggled(GTK_TOGGLE_BUTTON(LUW("cfg_sld_enable")), NULL);
--- a/src/xs_config.h	Mon Nov 05 17:26:43 2012 +0200
+++ b/src/xs_config.h	Mon Nov 05 17:51:08 2012 +0200
@@ -97,9 +97,6 @@
     gint        audioChannels;
     gint        audioFrequency;
 
-    gboolean    oversampleEnable;
-    gint        oversampleFactor;   /* Factor of oversampling */
-
     /* Emulation settings */
     gboolean    mos8580;            /* TRUE = 8580, FALSE = 6581 */
     gboolean    forceModel;
--- a/src/xs_genui.h	Mon Nov 05 17:26:43 2012 +0200
+++ b/src/xs_genui.h	Mon Nov 05 17:51:08 2012 +0200
@@ -7,10 +7,6 @@
                                         gpointer         user_data);
 
 void
-xs_cfg_oversample_toggled              (GtkToggleButton *togglebutton,
-                                        gpointer         user_data);
-
-void
 xs_cfg_emu_sidplay1_toggled            (GtkToggleButton *togglebutton,
                                         gpointer         user_data);
 
--- a/src/xs_player.h	Mon Nov 05 17:26:43 2012 +0200
+++ b/src/xs_player.h	Mon Nov 05 17:51:08 2012 +0200
@@ -28,13 +28,9 @@
 typedef struct xs_status_t {
     gint        audioFrequency,     /* Audio settings */
                 audioChannels,
-                audioBitsPerSample,
-                oversampleFactor;   /* Factor of oversampling */
+                audioBitsPerSample;
     AFormat     audioFormat;
-    gboolean    oversampleEnable;   /* TRUE after sidEngine initialization,
-                                    if xs_cfg.oversampleEnable == TRUE and
-                                    emulation backend supports oversampling.
-                                    */
+
     void        *sidEngine;         /* SID-emulation internal engine data */
     xs_engine_t *sidPlayer;         /* Selected player engine */
     gboolean    isError,
--- a/src/xs_sidplay1.cc	Mon Nov 05 17:26:43 2012 +0200
+++ b/src/xs_sidplay1.cc	Mon Nov 05 17:51:08 2012 +0200
@@ -158,16 +158,8 @@
     myEngine->currConfig.bitsPerSample = myStatus->audioBitsPerSample;
     tmpFreq = myStatus->audioFrequency;
 
-    if (myStatus->oversampleEnable) {
-        if ((tmpFreq * myStatus->oversampleFactor) > SIDPLAY1_MAX_FREQ) {
-            myStatus->oversampleEnable = FALSE;
-        } else {
-            tmpFreq = (tmpFreq * myStatus->oversampleFactor);
-        }
-    } else {
-        if (tmpFreq > SIDPLAY1_MAX_FREQ)
-            tmpFreq = SIDPLAY1_MAX_FREQ;
-    }
+    if (tmpFreq > SIDPLAY1_MAX_FREQ)
+        tmpFreq = SIDPLAY1_MAX_FREQ;
 
     myEngine->currConfig.frequency = tmpFreq;
 
--- a/src/xs_sidplay2.cc	Mon Nov 05 17:26:43 2012 +0200
+++ b/src/xs_sidplay2.cc	Mon Nov 05 17:51:08 2012 +0200
@@ -123,7 +123,7 @@
  */
 gboolean xs_sidplay2_init(xs_status_t * myStatus)
 {
-    gint tmpFreq, i;
+    gint i;
     xs_sidplay2_t *myEngine;
     sid_filter_t tmpFilter;
     xs_sid_filter_t *f;
@@ -187,19 +187,16 @@
 
 
     /* Audio parameters sanity checking and setup */
-    tmpFreq = myStatus->audioFrequency;
 #ifndef HAVE_SIDPLAY2_FP
     myEngine->currConfig.precision = myStatus->audioBitsPerSample;
 
-    if (myStatus->oversampleEnable)
-        tmpFreq = (tmpFreq * myStatus->oversampleFactor);
-
 #else
     myStatus->audioBitsPerSample = XS_RES_16BIT;
     myEngine->currConfig.samplingMethod = SID2_RESAMPLE_INTERPOLATE;
 #endif
 
-    myEngine->currConfig.frequency = tmpFreq;
+    myEngine->currConfig.frequency = myStatus->audioFrequency;
+
 
     switch (myStatus->audioBitsPerSample) {
     case XS_RES_8BIT:
--- a/src/xs_support.c	Mon Nov 05 17:26:43 2012 +0200
+++ b/src/xs_support.c	Mon Nov 05 17:51:08 2012 +0200
@@ -208,65 +208,3 @@
     while (str[*pos] && isdigit(str[*pos]))
         (*pos)++;
 }
-
-
-/* Let's do some preprocessor magic :) */
-#define XS_FVAR(T, P, K) g ## K ## int ## P *sp_ ## T ## P , *dp_ ## T ## P
-
-#define XS_FILTER1(T, P, K, Q)                            \
-    dataSize /= sizeof(g ## K ## int ## P);                 \
-    sp_ ## T ## P = (g ## K ## int ## P *) srcBuf;                \
-    dp_ ## T ## P = (g ## K ## int ## P *) destBuf;                \
-    while (dataSize-- > 0) {                        \
-        for (tmp = 0, i = 0; i < oversampleFactor; i++)            \
-            tmp += (gint32) ((gint ## P) (*(sp_ ## T ## P ++) Q));    \
-        xs_filter_mbn = (tmp + xs_filter_mbn) / (oversampleFactor + 1);    \
-        *(dp_ ## T ## P ++) = ((g ## K ## int ## P) xs_filter_mbn) Q ;    \
-        }
-
-
-static gint32 xs_filter_mbn = 0;
-
-
-gint xs_filter_rateconv(void *destBuf, void *srcBuf, const AFormat audioFormat,
-            const gint oversampleFactor, const gint bufSize)
-{
-    static gint32 tmp;
-    XS_FVAR(s, 8,);
-    XS_FVAR(u, 8, u);
-    XS_FVAR(s, 16,);
-    XS_FVAR(u, 16, u);
-    gint i;
-    gint dataSize = bufSize;
-
-    if (dataSize <= 0)
-        return dataSize;
-
-    switch (audioFormat) {
-    case FMT_U8:
-        XS_FILTER1(u, 8, u, ^0x80)
-            break;
-
-    case FMT_S8:
-        XS_FILTER1(s, 8,,)
-            break;
-
-
-    case FMT_U16_BE:
-    case FMT_U16_LE:
-    case FMT_U16_NE:
-        XS_FILTER1(u, 16, u, ^0x8000)
-            break;
-
-    case FMT_S16_BE:
-    case FMT_S16_LE:
-    case FMT_S16_NE:
-        XS_FILTER1(s, 16,,)
-            break;
-
-    default:
-        return -1;
-    }
-
-    return 0;
-}
--- a/src/xs_support.h	Mon Nov 05 17:26:43 2012 +0200
+++ b/src/xs_support.h	Mon Nov 05 17:51:08 2012 +0200
@@ -101,14 +101,6 @@
 void    xs_findeol(const gchar *, size_t *);
 void    xs_findnum(const gchar *, size_t *);
 
-/*
-typedef struct {
-} t_xs_filter;
-
-void    xs_filter_init(t_xs_filter *);
-*/
-gint    xs_filter_rateconv(void *, void *, const AFormat, const gint, const gint);
-
 
 #ifdef __cplusplus
 }
--- a/xmms-sid.glade	Mon Nov 05 17:26:43 2012 +0200
+++ b/xmms-sid.glade	Mon Nov 05 17:51:08 2012 +0200
@@ -280,117 +280,6 @@
 	    </widget>
 	  </widget>
 	</widget>
-
-	<widget>
-	  <class>GtkFrame</class>
-	  <name>cfg_oversample_frame</name>
-	  <border_width>4</border_width>
-	  <label>Oversampling:</label>
-	  <label_xalign>0</label_xalign>
-	  <shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type>
-	  <child>
-	    <padding>0</padding>
-	    <expand>False</expand>
-	    <fill>True</fill>
-	  </child>
-
-	  <widget>
-	    <class>GtkVBox</class>
-	    <name>w_vbox27</name>
-	    <border_width>2</border_width>
-	    <homogeneous>False</homogeneous>
-	    <spacing>2</spacing>
-
-	    <widget>
-	      <class>GtkCheckButton</class>
-	      <name>cfg_oversample</name>
-	      <can_focus>True</can_focus>
-	      <signal>
-		<name>toggled</name>
-		<handler>xs_cfg_oversample_toggled</handler>
-		<last_modification_time>Wed, 18 Aug 2004 02:20:35 GMT</last_modification_time>
-	      </signal>
-	      <label>Use oversampling</label>
-	      <active>False</active>
-	      <draw_indicator>True</draw_indicator>
-	      <child>
-		<padding>0</padding>
-		<expand>False</expand>
-		<fill>False</fill>
-	      </child>
-	    </widget>
-
-	    <widget>
-	      <class>GtkHBox</class>
-	      <name>cfg_oversample_box</name>
-	      <border_width>2</border_width>
-	      <homogeneous>False</homogeneous>
-	      <spacing>4</spacing>
-	      <child>
-		<padding>0</padding>
-		<expand>False</expand>
-		<fill>True</fill>
-	      </child>
-
-	      <widget>
-		<class>GtkLabel</class>
-		<name>cfg_oversample_label1</name>
-		<label>Factor:</label>
-		<justify>GTK_JUSTIFY_CENTER</justify>
-		<wrap>False</wrap>
-		<xalign>0.5</xalign>
-		<yalign>0.5</yalign>
-		<xpad>0</xpad>
-		<ypad>0</ypad>
-		<child>
-		  <padding>0</padding>
-		  <expand>False</expand>
-		  <fill>False</fill>
-		</child>
-	      </widget>
-
-	      <widget>
-		<class>GtkSpinButton</class>
-		<name>cfg_oversample_factor</name>
-		<can_focus>True</can_focus>
-		<climb_rate>1</climb_rate>
-		<digits>0</digits>
-		<numeric>False</numeric>
-		<update_policy>GTK_UPDATE_ALWAYS</update_policy>
-		<snap>False</snap>
-		<wrap>False</wrap>
-		<value>2</value>
-		<lower>2</lower>
-		<upper>8</upper>
-		<step>1</step>
-		<page>1</page>
-		<page_size>1</page_size>
-		<child>
-		  <padding>0</padding>
-		  <expand>False</expand>
-		  <fill>True</fill>
-		</child>
-	      </widget>
-
-	      <widget>
-		<class>GtkLabel</class>
-		<name>cfg_oversample_label2</name>
-		<label>Large factors require more CPU-power</label>
-		<justify>GTK_JUSTIFY_CENTER</justify>
-		<wrap>False</wrap>
-		<xalign>0.5</xalign>
-		<yalign>0.5</yalign>
-		<xpad>0</xpad>
-		<ypad>0</ypad>
-		<child>
-		  <padding>0</padding>
-		  <expand>False</expand>
-		  <fill>False</fill>
-		</child>
-	      </widget>
-	    </widget>
-	  </widget>
-	</widget>
       </widget>
 
       <widget>