Mercurial > hg > xmms-sid
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;