Mercurial > hg > xmms-sid
diff src/xs_player.c @ 726:53a4210889e2
Move engine choosing / initialization code to xs_player.c
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Fri, 12 Jun 2009 18:31:19 +0300 |
parents | |
children | 55eea3fa8868 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/xs_player.c Fri Jun 12 18:31:19 2009 +0300 @@ -0,0 +1,73 @@ +#include "xs_player.h" + +#ifdef HAVE_SIDPLAY1 +#include "xs_sidplay1.h" +#endif +#ifdef HAVE_SIDPLAY2 +#include "xs_sidplay2.h" +#endif + + +/* List of emulator engines + */ +static const xs_engine_t 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])); + + +gboolean xs_init_emu_engine(int *configured, xs_status_t *status) +{ + gint engine; + gboolean initialized; + + XSDEBUG("initializing emulator engine #%i...\n", *configured); + + engine = 0; + initialized = FALSE; + while (engine < xs_nenginelist && !initialized) { + if (xs_enginelist[engine].plrIdent == *configured) { + if (xs_enginelist[engine].plrInit(status)) { + initialized = TRUE; + status->sidPlayer = (xs_engine_t *) & xs_enginelist[engine]; + } + } + engine++; + } + + XSDEBUG("init#1: %s, %i\n", initialized ? "OK" : "FAILED", engine); + + engine = 0; + while (engine < xs_nenginelist && !initialized) { + if (xs_enginelist[engine].plrInit(status)) { + initialized = TRUE; + status->sidPlayer = (xs_engine_t *) &xs_enginelist[engine]; + *configured = xs_enginelist[engine].plrIdent; + } else + engine++; + } + + XSDEBUG("init#2: %s, %i\n", initialized ? "OK" : "FAILED", engine); + return initialized; +} +