diff src/xmms-sid.c @ 787:8f0d11865742

Move some code around, remove xs_player.c
author Matti Hamalainen <ccr@tnsp.org>
date Tue, 06 Nov 2012 15:04:46 +0200
parents cf644ac89b54
children 3012740d014c
line wrap: on
line diff
--- a/src/xmms-sid.c	Tue Nov 06 15:03:58 2012 +0200
+++ b/src/xmms-sid.c	Tue Nov 06 15:04:46 2012 +0200
@@ -41,8 +41,45 @@
 #include "xs_slsup.h"
 
 
-/*
- * Global variables
+/* List of emulator engines
+ */
+#ifdef HAVE_SIDPLAY1
+#include "xs_sidplay1.h"
+#endif
+#ifdef HAVE_SIDPLAY2
+#include "xs_sidplay2.h"
+#endif
+
+static XSEngine xs_enginelist[] =
+{
+#ifdef HAVE_SIDPLAY1
+    {
+        XS_ENG_SIDPLAY1,
+        xs_sidplay1_probe,
+        xs_sidplay1_init, xs_sidplay1_close,
+        xs_sidplay1_initsong, xs_sidplay1_fillbuffer,
+        xs_sidplay1_load, xs_sidplay1_delete,
+        xs_sidplay1_getinfo, xs_sidplay1_updateinfo,
+        NULL
+    },
+#endif
+#ifdef HAVE_SIDPLAY2
+    {
+        XS_ENG_SIDPLAY2,
+        xs_sidplay2_probe,
+        xs_sidplay2_init, xs_sidplay2_close,
+        xs_sidplay2_initsong, xs_sidplay2_fillbuffer,
+        xs_sidplay2_load, xs_sidplay2_delete,
+        xs_sidplay2_getinfo, xs_sidplay2_updateinfo,
+        xs_sidplay2_flush
+    },
+#endif
+};
+
+static const gint xs_nenginelist = sizeof(xs_enginelist) / sizeof(xs_enginelist[0]);
+
+
+/* Global variables
  */
 XSEngineState xs_status;
 XS_MUTEX(xs_status);
@@ -56,8 +93,7 @@
 void        xs_subctrl_update(void);
 
 
-/*
- * Error messages
+/* Error messages
  */
 void xs_error(const char *fmt, ...)
 {
@@ -87,6 +123,9 @@
  */
 void xs_reinit(void)
 {
+    gint engine;
+    gboolean initialized = FALSE;
+
     /* Stop playing, if we are */
     XS_MUTEX_LOCK(xs_status);
     if (xs_status.isPlaying) {
@@ -111,8 +150,19 @@
     xs_status.audioFormat = -1;
 
     /* Try to initialize emulator engine */
-    if (!xs_init_emu_engine(&xs_cfg.playerEngine, &xs_status))
-        xs_error("Could not initialize any emulator engine!\n");
+    XSDEBUG("initializing emulator engine #%i...\n", xs_cfg.playerEngine);
+
+    for (engine = 0; engine < xs_nenginelist && !initialized; engine++)
+    {
+        if (xs_enginelist[engine].plrIdent == xs_cfg.playerEngine &&
+            xs_enginelist[engine].plrInit(&xs_status))
+        {
+            initialized = TRUE;
+            xs_status.engine = &xs_enginelist[engine];
+        }
+    }
+
+    XSDEBUG("init#1: %s, %i\n", initialized ? "OK" : "FAILED", xs_cfg.playerEngine);
 
     /* Get settings back, in case the chosen emulator backend changed them */
     xs_cfg.audioFrequency = xs_status.audioFrequency;