Mercurial > hg > xmms-sid
comparison src/xs_sidplay2.cc @ 820:778531e968ed
Clean up tune loading.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Wed, 07 Nov 2012 16:08:40 +0200 |
parents | ab3216b1b582 |
children | dea579b6c3b3 |
comparison
equal
deleted
inserted
replaced
819:ab3216b1b582 | 820:778531e968ed |
---|---|
49 | 49 |
50 class XSSIDPlay2 { | 50 class XSSIDPlay2 { |
51 public: | 51 public: |
52 sidplay2 emu; | 52 sidplay2 emu; |
53 sid2_config_t config; | 53 sid2_config_t config; |
54 SidTune *tune; | 54 SidTune tune; |
55 gboolean tuneLoaded; | |
56 | 55 |
57 XSSIDPlay2(void); | 56 XSSIDPlay2(void); |
58 virtual ~XSSIDPlay2(void); | 57 virtual ~XSSIDPlay2(void); |
59 }; | 58 }; |
60 | 59 |
75 # include <sidplay/builders/hardsid.h> | 74 # include <sidplay/builders/hardsid.h> |
76 # endif | 75 # endif |
77 #endif | 76 #endif |
78 | 77 |
79 | 78 |
80 XSSIDPlay2::XSSIDPlay2(void) | 79 XSSIDPlay2::XSSIDPlay2(void) : tune(0) |
81 { | 80 { |
82 tune = NULL; | |
83 tuneLoaded = FALSE; | |
84 } | 81 } |
85 | 82 |
86 | 83 |
87 XSSIDPlay2::~XSSIDPlay2(void) | 84 XSSIDPlay2::~XSSIDPlay2(void) |
88 { | 85 { |
89 if (tuneLoaded) | 86 emu.load(NULL); |
90 emu.load(0); | |
91 | |
92 if (tune) | |
93 delete tune; | |
94 | |
95 tuneLoaded = FALSE; | |
96 } | 87 } |
97 | 88 |
98 | 89 |
99 /* We need to 'export' all this pseudo-C++ crap */ | 90 /* We need to 'export' all this pseudo-C++ crap */ |
100 extern "C" { | 91 extern "C" { |
419 XSSIDPlay2 *engine = (XSSIDPlay2 *) state->internal; | 410 XSSIDPlay2 *engine = (XSSIDPlay2 *) state->internal; |
420 | 411 |
421 if (!engine) | 412 if (!engine) |
422 return FALSE; | 413 return FALSE; |
423 | 414 |
424 if (!engine->tune->selectSong(state->currSong)) | 415 if (!engine->tune.selectSong(state->currSong)) |
425 { | 416 { |
426 xs_error("[SIDPlay2] tune->selectSong() failed\n"); | 417 xs_error("[SIDPlay2] tune.selectSong() failed\n"); |
418 return FALSE; | |
419 } | |
420 | |
421 if (engine->emu.load(&(engine->tune)) < 0) | |
422 { | |
423 xs_error("[SIDPlay2] emu.load() failed\n"); | |
427 return FALSE; | 424 return FALSE; |
428 } | 425 } |
429 | 426 |
430 if (engine->emu.config(engine->config) < 0) | 427 if (engine->emu.config(engine->config) < 0) |
431 { | 428 { |
432 xs_error("[SIDPlay2] Emulator engine configuration failed!\n"); | 429 xs_error("[SIDPlay2] Emulator engine configuration failed!\n"); |
433 return FALSE; | |
434 } | |
435 | |
436 engine->tuneLoaded = TRUE; | |
437 if (engine->emu.load(engine->tune) < 0) | |
438 { | |
439 xs_error("[SIDPlay2] emu.load() failed\n"); | |
440 return FALSE; | 430 return FALSE; |
441 } | 431 } |
442 | 432 |
443 return TRUE; | 433 return TRUE; |
444 } | 434 } |
472 */ | 462 */ |
473 gboolean xs_sidplay2_load(XSEngineState * state, gchar * filename) | 463 gboolean xs_sidplay2_load(XSEngineState * state, gchar * filename) |
474 { | 464 { |
475 XSSIDPlay2 *engine = (XSSIDPlay2 *) state->internal; | 465 XSSIDPlay2 *engine = (XSSIDPlay2 *) state->internal; |
476 | 466 |
477 if (!engine) | 467 if (!engine || !filename) |
478 return FALSE; | 468 return FALSE; |
479 | 469 |
480 if (!(engine->tune = new SidTune(filename))) | 470 engine->tune.load(filename); |
481 return FALSE; | 471 if (!engine->tune) |
482 | 472 { |
483 engine->tuneLoaded = FALSE; | 473 xs_error("Could not load file '%s': %s\n", |
484 | 474 filename, (engine->tune.getInfo()).statusString); |
475 return FALSE; | |
476 } | |
477 | |
485 return TRUE; | 478 return TRUE; |
486 } | 479 } |
487 | 480 |
488 | 481 |
489 /* Delete INTERNAL information | 482 /* Delete INTERNAL information |
490 */ | 483 */ |
491 void xs_sidplay2_delete(XSEngineState * state) | 484 void xs_sidplay2_delete(XSEngineState * state) |
492 { | 485 { |
493 XSSIDPlay2 *engine = (XSSIDPlay2 *) state->internal; | 486 XSSIDPlay2 *engine = (XSSIDPlay2 *) state->internal; |
494 | |
495 if (engine) | |
496 { | |
497 if (engine->tuneLoaded) | |
498 { | |
499 engine->emu.load(0); | |
500 } | |
501 | |
502 delete engine->tune; | |
503 engine->tune = NULL; | |
504 engine->tuneLoaded = FALSE; | |
505 } | |
506 } | 487 } |
507 | 488 |
508 | 489 |
509 /* Hardware backend flushing | 490 /* Hardware backend flushing |
510 */ | 491 */ |