# HG changeset patch # User Matti Hamalainen # Date 1352158090 -7200 # Node ID 72e58ecb1a2c91b0cafbe5a57b0acb6eb2869924 # Parent 120d6f247f1b9541493ad4951b2c55c5cd0af994 Still not working. Urgh. diff -r 120d6f247f1b -r 72e58ecb1a2c src/xs_sidplay2.cc --- 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 emu; - SidLazyIPtr 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 rs(engine->builder); + engine->config.sidEmulation = ReSIDBuilderCreate("ReSID builder"); + SidLazyIPtr 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 hs(engine->builder); + engine->config.sidEmulation = HardSIDBuilderCreate("HardSID builder"); + SidLazyIPtr 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; }