comparison 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
comparison
equal deleted inserted replaced
786:0f8723dabc78 787:8f0d11865742
39 #include "xs_glade.h" 39 #include "xs_glade.h"
40 #include "xs_player.h" 40 #include "xs_player.h"
41 #include "xs_slsup.h" 41 #include "xs_slsup.h"
42 42
43 43
44 /* 44 /* List of emulator engines
45 * Global variables 45 */
46 #ifdef HAVE_SIDPLAY1
47 #include "xs_sidplay1.h"
48 #endif
49 #ifdef HAVE_SIDPLAY2
50 #include "xs_sidplay2.h"
51 #endif
52
53 static XSEngine xs_enginelist[] =
54 {
55 #ifdef HAVE_SIDPLAY1
56 {
57 XS_ENG_SIDPLAY1,
58 xs_sidplay1_probe,
59 xs_sidplay1_init, xs_sidplay1_close,
60 xs_sidplay1_initsong, xs_sidplay1_fillbuffer,
61 xs_sidplay1_load, xs_sidplay1_delete,
62 xs_sidplay1_getinfo, xs_sidplay1_updateinfo,
63 NULL
64 },
65 #endif
66 #ifdef HAVE_SIDPLAY2
67 {
68 XS_ENG_SIDPLAY2,
69 xs_sidplay2_probe,
70 xs_sidplay2_init, xs_sidplay2_close,
71 xs_sidplay2_initsong, xs_sidplay2_fillbuffer,
72 xs_sidplay2_load, xs_sidplay2_delete,
73 xs_sidplay2_getinfo, xs_sidplay2_updateinfo,
74 xs_sidplay2_flush
75 },
76 #endif
77 };
78
79 static const gint xs_nenginelist = sizeof(xs_enginelist) / sizeof(xs_enginelist[0]);
80
81
82 /* Global variables
46 */ 83 */
47 XSEngineState xs_status; 84 XSEngineState xs_status;
48 XS_MUTEX(xs_status); 85 XS_MUTEX(xs_status);
49 static XS_THREAD_T xs_decode_thread; 86 static XS_THREAD_T xs_decode_thread;
50 87
54 91
55 void xs_subctrl_close(void); 92 void xs_subctrl_close(void);
56 void xs_subctrl_update(void); 93 void xs_subctrl_update(void);
57 94
58 95
59 /* 96 /* Error messages
60 * Error messages
61 */ 97 */
62 void xs_error(const char *fmt, ...) 98 void xs_error(const char *fmt, ...)
63 { 99 {
64 va_list ap; 100 va_list ap;
65 fprintf(stderr, "XMMS-SID: "); 101 fprintf(stderr, "XMMS-SID: ");
85 /* 121 /*
86 * Initialization functions 122 * Initialization functions
87 */ 123 */
88 void xs_reinit(void) 124 void xs_reinit(void)
89 { 125 {
126 gint engine;
127 gboolean initialized = FALSE;
128
90 /* Stop playing, if we are */ 129 /* Stop playing, if we are */
91 XS_MUTEX_LOCK(xs_status); 130 XS_MUTEX_LOCK(xs_status);
92 if (xs_status.isPlaying) { 131 if (xs_status.isPlaying) {
93 XS_MUTEX_UNLOCK(xs_status); 132 XS_MUTEX_UNLOCK(xs_status);
94 xs_stop(); 133 xs_stop();
109 xs_status.audioBitsPerSample = xs_cfg.audioBitsPerSample; 148 xs_status.audioBitsPerSample = xs_cfg.audioBitsPerSample;
110 xs_status.audioChannels = xs_cfg.audioChannels; 149 xs_status.audioChannels = xs_cfg.audioChannels;
111 xs_status.audioFormat = -1; 150 xs_status.audioFormat = -1;
112 151
113 /* Try to initialize emulator engine */ 152 /* Try to initialize emulator engine */
114 if (!xs_init_emu_engine(&xs_cfg.playerEngine, &xs_status)) 153 XSDEBUG("initializing emulator engine #%i...\n", xs_cfg.playerEngine);
115 xs_error("Could not initialize any emulator engine!\n"); 154
155 for (engine = 0; engine < xs_nenginelist && !initialized; engine++)
156 {
157 if (xs_enginelist[engine].plrIdent == xs_cfg.playerEngine &&
158 xs_enginelist[engine].plrInit(&xs_status))
159 {
160 initialized = TRUE;
161 xs_status.engine = &xs_enginelist[engine];
162 }
163 }
164
165 XSDEBUG("init#1: %s, %i\n", initialized ? "OK" : "FAILED", xs_cfg.playerEngine);
116 166
117 /* Get settings back, in case the chosen emulator backend changed them */ 167 /* Get settings back, in case the chosen emulator backend changed them */
118 xs_cfg.audioFrequency = xs_status.audioFrequency; 168 xs_cfg.audioFrequency = xs_status.audioFrequency;
119 xs_cfg.audioBitsPerSample = xs_status.audioBitsPerSample; 169 xs_cfg.audioBitsPerSample = xs_status.audioBitsPerSample;
120 xs_cfg.audioChannels = xs_status.audioChannels; 170 xs_cfg.audioChannels = xs_status.audioChannels;