Mercurial > hg > xmms-sid
comparison src/xs_sidplayfp.cpp @ 847:5b93bd8c7814
Cleanups, adjust backend configuration sequences, more error checking,
improved debug output.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Thu, 08 Nov 2012 22:44:36 +0200 |
parents | ae1f6418d093 |
children | 2663b1ac9ce6 |
comparison
equal
deleted
inserted
replaced
846:7b11ba6fc4cc | 847:5b93bd8c7814 |
---|---|
128 else | 128 else |
129 return FALSE; | 129 return FALSE; |
130 } | 130 } |
131 | 131 |
132 | 132 |
133 /* Initialize SIDPlay2 | 133 /* Initialize SIDPlayFP |
134 */ | 134 */ |
135 gboolean xs_sidplayfp_init(XSEngineState * state) | 135 gboolean xs_sidplayfp_init(XSEngineState * state) |
136 { | 136 { |
137 XSSIDPlayFP *engine; | 137 XSSIDPlayFP *engine; |
138 assert(state); | 138 assert(state); |
139 | |
140 XSDEBUG("SIDPlayFP backend initializing.\n"); | |
139 | 141 |
140 /* Allocate internal structures */ | 142 /* Allocate internal structures */ |
141 engine = new XSSIDPlayFP(); | 143 engine = new XSSIDPlayFP(); |
142 state->internal = engine; | 144 state->internal = engine; |
143 if (!engine) | 145 if (!engine) |
144 return FALSE; | 146 return FALSE; |
145 | 147 |
146 /* Get current configuration */ | 148 /* Get current configuration */ |
149 XSDEBUG("SIDPlayFP emulation configuration\n"); | |
147 engine->config = engine->emu.config(); | 150 engine->config = engine->emu.config(); |
148 | 151 |
149 /* Configure channels and stuff */ | 152 /* Configure channels and stuff */ |
150 engine->config.playback = (state->audioChannels == XS_CHN_MONO) ? sid2_mono : sid2_stereo; | 153 engine->config.playback = (state->audioChannels == XS_CHN_MONO) ? sid2_mono : sid2_stereo; |
151 | 154 |
152 /* Audio parameters sanity checking and setup */ | 155 /* Audio parameters sanity checking and setup */ |
153 state->audioBitsPerSample = XS_RES_16BIT; | 156 state->audioBitsPerSample = XS_RES_16BIT; |
154 engine->config.samplingMethod = SID2_RESAMPLE_INTERPOLATE; | 157 engine->config.samplingMethod = SID2_RESAMPLE_INTERPOLATE; |
155 engine->config.frequency = state->audioFrequency; | 158 engine->config.frequency = state->audioFrequency; |
156 | 159 |
160 /* Clockspeed settings */ | |
161 switch (xs_cfg.clockSpeed) | |
162 { | |
163 case XS_CLOCK_NTSC: | |
164 engine->config.clockDefault = SID2_CLOCK_NTSC; | |
165 break; | |
166 | |
167 default: | |
168 case XS_CLOCK_PAL: | |
169 engine->config.clockDefault = SID2_CLOCK_PAL; | |
170 xs_cfg.clockSpeed = XS_CLOCK_PAL; | |
171 break; | |
172 } | |
173 | |
174 | |
175 /* Configure rest of the emulation */ | |
176 engine->config.sidDefault = xs_cfg.mos8580 ? SID2_MOS8580 : SID2_MOS6581; | |
177 engine->config.clockForced = xs_cfg.forceSpeed; | |
178 | |
179 #ifndef HAVE_SIDPLAYFP_V1 | |
180 engine->config.sidSamples = TRUE; | |
181 engine->config.sidModel = xs_cfg.forceModel ? engine->config.sidDefault : SID2_MODEL_CORRECT; | |
182 engine->config.clockSpeed = xs_cfg.forceSpeed ? engine->config.clockDefault : SID2_CLOCK_CORRECT; | |
183 #endif | |
184 | |
157 /* Initialize builder object */ | 185 /* Initialize builder object */ |
158 XSDEBUG("init builder #%i, maxsids=%i\n", xs_cfg.sid2Builder, (engine->emu.info()).maxsids); | 186 XSDEBUG("init builder #%i, maxsids=%i\n", xs_cfg.sid2Builder, (engine->emu.info()).maxsids); |
159 | 187 |
160 switch (xs_cfg.sid2Builder) | 188 switch (xs_cfg.sid2Builder) |
161 { | 189 { |
190 #if 0 | |
162 #ifdef HAVE_RESID_BUILDER | 191 #ifdef HAVE_RESID_BUILDER |
163 case XS_BLD_RESID: | 192 case XS_BLD_RESID: |
164 { | 193 { |
165 ReSIDBuilder *rs = new ReSIDBuilder("ReSID builder"); | 194 ReSIDBuilder *rs = new ReSIDBuilder("ReSID builder"); |
166 #ifdef HAVE_SIDPLAYFP_V1 | 195 #ifdef HAVE_SIDPLAYFP_V1 |
167 if (rs && rs->getStatus()) | 196 if (rs && rs->getStatus()) |
168 { | 197 { |
169 } | 198 } |
170 #else | 199 #else |
171 if (rs) | 200 if (rs && *rs) |
172 { | 201 { |
173 engine->config.sidEmulation = rs; | 202 engine->config.sidEmulation = rs; |
174 if (!*rs) return FALSE; | 203 if (!(*rs)) return FALSE; |
175 rs->create((engine->emu.info()).maxsids); | 204 rs->create((engine->emu.info()).maxsids); |
176 if (!*rs) return FALSE; | 205 if (!(*rs)) return FALSE; |
177 rs->bias(0.0f); | 206 rs->bias(0.0f); |
178 } | 207 } |
179 #endif // HAVE_SIDPLAYFP_V1 | 208 #endif // HAVE_SIDPLAYFP_V1 |
180 } | 209 } |
181 break; | 210 break; |
182 #endif // HAVE_RESID_BUILDER | 211 #endif // HAVE_RESID_BUILDER |
183 | 212 #endif |
184 | 213 |
185 #ifdef HAVE_RESID_FP_BUILDER | 214 #ifdef HAVE_RESID_FP_BUILDER |
186 case XS_BLD_RESID_FP: | 215 case XS_BLD_RESID_FP: |
187 { | 216 { |
188 ReSIDfpBuilder *rs = new ReSIDfpBuilder("ReSID builder FP!"); | 217 ReSIDfpBuilder *rs = new ReSIDfpBuilder("ReSID builder FP!"); |
189 if (rs) | 218 if (rs && *rs) |
190 { | 219 { |
191 engine->config.sidEmulation = rs; | 220 engine->config.sidEmulation = rs; |
192 if (!*rs) return FALSE; | 221 if (!(*rs)) return FALSE; |
193 rs->create((engine->emu.info()).maxsids); | 222 rs->create((engine->emu.info()).maxsids); |
194 if (!*rs) return FALSE; | 223 if (!(*rs)) return FALSE; |
195 | 224 |
196 rs->filter6581Curve(0.0); | 225 rs->filter6581Curve(0.0); |
197 rs->filter8580Curve(0.0); | 226 rs->filter8580Curve(0.0); |
198 } | 227 } |
199 } | 228 } |
217 } | 246 } |
218 break; | 247 break; |
219 #endif | 248 #endif |
220 | 249 |
221 default: | 250 default: |
222 xs_error("[SIDPlay2] Invalid or unsupported builder selected.\n"); | 251 xs_error("[SIDPlayFP] Invalid or unsupported builder selected.\n"); |
223 break; | 252 return FALSE; |
224 } | 253 } |
225 | 254 |
226 if (!engine->config.sidEmulation) | 255 if (!engine->config.sidEmulation) |
227 { | 256 { |
228 xs_error("[SIDPlay2] Could not initialize SIDBuilder object.\n"); | 257 xs_error("[SIDPlayFP] Could not initialize SIDBuilder object.\n"); |
229 return FALSE; | 258 return FALSE; |
230 } | 259 } |
231 | 260 |
232 // Setup filter | 261 // Setup filter |
233 engine->config.sidEmulation->filter(xs_cfg.emulateFilters); | 262 engine->config.sidEmulation->filter(xs_cfg.emulateFilters); |
237 return FALSE; | 266 return FALSE; |
238 } | 267 } |
239 | 268 |
240 XSDEBUG("%s\n", engine->config.sidEmulation->credits()); | 269 XSDEBUG("%s\n", engine->config.sidEmulation->credits()); |
241 | 270 |
242 /* Clockspeed settings */ | |
243 switch (xs_cfg.clockSpeed) | |
244 { | |
245 case XS_CLOCK_NTSC: | |
246 engine->config.clockDefault = SID2_CLOCK_NTSC; | |
247 break; | |
248 | |
249 default: | |
250 case XS_CLOCK_PAL: | |
251 engine->config.clockDefault = SID2_CLOCK_PAL; | |
252 xs_cfg.clockSpeed = XS_CLOCK_PAL; | |
253 break; | |
254 } | |
255 | |
256 | |
257 /* Configure rest of the emulation */ | |
258 engine->config.sidDefault = xs_cfg.mos8580 ? SID2_MOS8580 : SID2_MOS6581; | |
259 engine->config.clockForced = xs_cfg.forceSpeed; | |
260 | |
261 #ifndef HAVE_SIDPLAYFP_V1 | |
262 engine->config.sidSamples = TRUE; | |
263 engine->config.sidModel = xs_cfg.forceModel ? engine->config.sidDefault : SID2_MODEL_CORRECT; | |
264 engine->config.clockSpeed = xs_cfg.forceSpeed ? engine->config.clockDefault : SID2_CLOCK_CORRECT; | |
265 #endif | |
266 | 271 |
267 return TRUE; | 272 return TRUE; |
268 } | 273 } |
269 | 274 |
270 | 275 |
271 /* Close SIDPlay2 engine | 276 /* Close SIDPlayFP engine |
272 */ | 277 */ |
273 void xs_sidplayfp_close(XSEngineState * state) | 278 void xs_sidplayfp_close(XSEngineState * state) |
274 { | 279 { |
275 XSSIDPlayFP *engine = (XSSIDPlayFP *) state->internal; | 280 XSSIDPlayFP *engine = (XSSIDPlayFP *) state->internal; |
281 | |
282 XSDEBUG("SIDPlayFP backend shutdown.\n"); | |
276 | 283 |
277 xs_sidplayfp_delete(state); | 284 xs_sidplayfp_delete(state); |
278 | 285 |
279 if (engine) | 286 if (engine) |
280 { | 287 { |
295 if (!engine) | 302 if (!engine) |
296 return FALSE; | 303 return FALSE; |
297 | 304 |
298 if (!engine->tune.selectSong(state->currSong)) | 305 if (!engine->tune.selectSong(state->currSong)) |
299 { | 306 { |
300 xs_error("[SIDPlay2] tune.selectSong() failed\n"); | 307 xs_error("[SIDPlayFP] tune.selectSong() failed\n"); |
301 return FALSE; | 308 return FALSE; |
302 } | 309 } |
303 | 310 |
304 if (engine->emu.load(&(engine->tune)) < 0) | 311 if (engine->emu.load(&(engine->tune)) < 0) |
305 { | 312 { |
306 xs_error("[SIDPlay2] emu.load() failed\n"); | 313 xs_error("[SIDPlayFP] emu.load() failed\n"); |
307 return FALSE; | 314 return FALSE; |
308 } | 315 } |
309 | 316 |
310 if (engine->emu.config(engine->config) < 0) | 317 if (engine->emu.config(engine->config) < 0) |
311 { | 318 { |
312 xs_error("[SIDPlay2] Emulator engine configuration failed!\n"); | 319 xs_error("[SIDPlayFP] Emulator engine configuration failed!\n"); |
313 return FALSE; | 320 return FALSE; |
314 } | 321 } |
315 | 322 |
316 return TRUE; | 323 return TRUE; |
317 } | 324 } |