changeset 770:72e58ecb1a2c

Still not working. Urgh.
author Matti Hamalainen <ccr@tnsp.org>
date Tue, 06 Nov 2012 01:28:10 +0200
parents 120d6f247f1b
children 469b341734b2
files src/xs_sidplay2.cc
diffstat 1 files changed, 33 insertions(+), 56 deletions(-) [+]
line wrap: on
line diff
--- a/src/xs_sidplay2.cc	Tue Nov 06 01:27:40 2012 +0200
+++ b/src/xs_sidplay2.cc	Tue Nov 06 01:28:10 2012 +0200
@@ -51,11 +51,9 @@
 class XSSIDPlay2 {
 public:
 #ifdef HAVE_SIDPLAY2_FP
-    sidplay2 *emu;
-    sidbuilder *builder;
+    sidplay2 emu;
 #else
     SidIPtr<ISidplay2> emu;
-    SidLazyIPtr<ISidUnknown> builder;
 #endif
     sid2_config_t config;
     SidTune *tune;
@@ -86,16 +84,10 @@
 
 
 XSSIDPlay2::XSSIDPlay2(void)
-#ifdef HAVE_SIDPLAY2_FP
-:emu(NULL)
-#else
-:emu(sidplay2::create())
-#endif
 {
     tune = NULL;
     buf = NULL;
     bufSize = 0;
-    builder = NULL;    
 }
 
 
@@ -146,20 +138,11 @@
     /* Allocate internal structures */
     engine = new XSSIDPlay2();
     state->internal = engine;
-    if (!engine) return FALSE;
-
-    /* Initialize the engine */
-#ifdef HAVE_SIDPLAY2_FP
-    engine->emu = new sidplay2;
-#endif
-    if (!engine->emu)
-    {
-        xs_error("[SIDPlay2] Could not initialize emulation engine.\n");
+    if (!engine)
         return FALSE;
-    }
 
     /* Get current configuration */
-    engine->config = engine->emu->config();
+    engine->config = engine->emu.config();
 
     /* Configure channels and stuff */
     switch (state->audioChannels)
@@ -277,7 +260,7 @@
 #endif
 
     /* Initialize builder object */
-    XSDEBUG("init builder #%i, maxsids=%i\n", xs_cfg.sid2Builder, (engine->emu->info()).maxsids);
+    XSDEBUG("init builder #%i, maxsids=%i\n", xs_cfg.sid2Builder, (engine->emu.info()).maxsids);
 
     switch (xs_cfg.sid2Builder)
     {
@@ -288,9 +271,9 @@
                 ReSIDfpBuilder *rs = new ReSIDfpBuilder("ReSID builder FP!");
                 if (rs)
                 {
-                    engine->builder = rs;
+                    engine->config.sidEmulation = rs;
                     if (!*rs) return FALSE;
-                    rs->create((engine->emu->info()).maxsids);
+                    rs->create((engine->emu.info()).maxsids);
                     if (!*rs) return FALSE;
 
 /*
@@ -301,12 +284,12 @@
 */
                 }
 #else
-                engine->builder = ReSIDBuilderCreate("ReSID builder");
-                SidLazyIPtr<IReSIDBuilder> rs(engine->builder);
+                engine->config.sidEmulation = ReSIDBuilderCreate("ReSID builder");
+                SidLazyIPtr<IReSIDBuilder> rs(engine->config.sidEmulation);
                 if (rs)
                 {
                     engine->config.sidEmulation = rs->iaggregate();
-                    rs->create((engine->emu->info()).maxsids);
+                    rs->create((engine->emu.info()).maxsids);
                     if (!*rs) return FALSE;
                 }
 #endif
@@ -319,18 +302,18 @@
 #ifdef HAVE_SIDPLAY2_FP
             {
                 HardSIDBuilder *hs = new HardSIDBuilder("HardSID builder (FP)");
-                engine->builder = (sidbuilder *) hs;
+                engine->config.sidEmulation = (sidbuilder *) hs;
                 if (hs)
                 {
 #else
-                engine->builder = HardSIDBuilderCreate("HardSID builder");
-                SidLazyIPtr<IHardSIDBuilder> hs(engine->builder);
+                engine->config.sidEmulation = HardSIDBuilderCreate("HardSID builder");
+                SidLazyIPtr<IHardSIDBuilder> hs(engine->config.sidEmulation);
                 if (hs)
                 {
                     engine->config.sidEmulation = hs->iaggregate();
 #endif
                     /* Builder object created, initialize it */
-                    hs->create((engine->emu->info()).maxsids);
+                    hs->create((engine->emu.info()).maxsids);
                     if (!*hs)
                     {
                         xs_error("hardSID->create() failed.\n");
@@ -346,23 +329,23 @@
             break;
     }
 
-    if (!engine->builder)
+    if (!engine->config.sidEmulation)
     {
         xs_error("[SIDPlay2] Could not initialize SIDBuilder object.\n");
         return FALSE;
     }
 
     // Setup filter
-    engine->builder->filter(xs_cfg.emulateFilters);
-    if (!*(engine->builder))
+    engine->config.sidEmulation->filter(xs_cfg.emulateFilters);
+    if (!*(engine->config.sidEmulation))
     {
         xs_error("builder->filter(%d) failed.\n", xs_cfg.emulateFilters);
         return FALSE;
     }
 
 #ifdef HAVE_SIDPLAY2_FP
-    engine->config.sidEmulation = engine->builder;
-    XSDEBUG("%s\n", engine->builder->credits());
+    engine->config.sidEmulation = engine->config.sidEmulation;
+    XSDEBUG("%s\n", engine->config.sidEmulation->credits());
 #endif
 
     /* Clockspeed settings */
@@ -373,9 +356,6 @@
             break;
 
         default:
-            xs_error("[SIDPlay2] Invalid clockSpeed=%d, falling back to PAL.\n",
-                xs_cfg.clockSpeed);
-
         case XS_CLOCK_PAL:
             engine->config.clockDefault = SID2_CLOCK_PAL;
             xs_cfg.clockSpeed = XS_CLOCK_PAL;
@@ -412,7 +392,7 @@
     engine->config.sidSamples = TRUE;
 
     /* Now set the emulator configuration */
-    if (engine->emu->config(engine->config) < 0)
+    if (engine->emu.config(engine->config) < 0)
     {
         xs_error("[SIDPlay2] Emulator engine configuration failed!\n");
         return FALSE;
@@ -428,26 +408,22 @@
 {
     XSSIDPlay2 *engine = (XSSIDPlay2 *) state->internal;
 
-
-    /* Free internals */
-    if (engine->builder) {
+    if (engine)
+    {
 #ifdef HAVE_SIDPLAY2_FP
-        delete engine->builder;
+        if (engine->config.sidEmulation)
+        {
+            sidbuilder *builder = engine->config.sidEmulation;
+            engine->config.sidEmulation = NULL;
+            engine->emu.config(engine->config);
+            delete builder;
+        }
 #endif
-        engine->builder = NULL;
+
+        delete engine;
     }
 
-#ifdef HAVE_SIDPLAY2_FP
-    if (engine->emu)
-    {
-        delete engine->emu;
-        engine->emu = NULL;
-    }
-#endif
-
     xs_sidplay2_delete(state);
-
-    delete engine;
     state->internal = NULL;
 }
 
@@ -467,8 +443,9 @@
         return FALSE;
     }
 
-    if (engine->emu->load(engine->tune) < 0) {
-        xs_error("[SIDPlay2] emu->load() failed\n");
+    if (engine->emu.load(engine->tune) < 0)
+    {
+        xs_error("[SIDPlay2] emu.load() failed\n");
         return FALSE;
     }