aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
Diffstat (limited to 'engines')
-rw-r--r--engines/saga/music.cpp6
-rw-r--r--engines/saga/music.h4
-rw-r--r--engines/saga/rscfile.cpp2
3 files changed, 9 insertions, 3 deletions
diff --git a/engines/saga/music.cpp b/engines/saga/music.cpp
index e352818ee6..921c1a9f1a 100644
--- a/engines/saga/music.cpp
+++ b/engines/saga/music.cpp
@@ -305,6 +305,8 @@ Music::Music(SagaEngine *vm, Audio::Mixer *mixer, MidiDriver *driver, int enable
_songTable = 0;
_track = NULL;
+
+ _midiMusicData = NULL;
}
Music::~Music() {
@@ -316,6 +318,7 @@ Music::~Music() {
delete smfParser;
free(_songTable);
+ free(_midiMusicData);
}
void Music::musicVolumeGaugeCallback(void *refCon) {
@@ -432,7 +435,6 @@ void Music::play(uint32 resourceId, MusicFlags flags) {
flags = MUSIC_NORMAL;
}
- // FIXME: Is resource_data ever freed?
// Load MIDI/XMI resource data
if (_vm->getGameType() == GType_ITE) {
@@ -506,6 +508,8 @@ void Music::play(uint32 resourceId, MusicFlags flags) {
_player->setLoop(false);
_player->playMusic();
+ free(_midiMusicData);
+ _midiMusicData = resourceData;
}
void Music::pause(void) {
diff --git a/engines/saga/music.h b/engines/saga/music.h
index 377a5bf1d8..a276896dac 100644
--- a/engines/saga/music.h
+++ b/engines/saga/music.h
@@ -92,7 +92,7 @@ protected:
byte *_musicData;
uint16 *_buf;
- uint32 _musicDataSize;
+ size_t _musicDataSize;
};
class Music {
@@ -139,6 +139,8 @@ private:
DigitalTrackInfo *_track;
+ byte *_midiMusicData;
+
static void musicVolumeGaugeCallback(void *refCon);
void musicVolumeGauge(void);
};
diff --git a/engines/saga/rscfile.cpp b/engines/saga/rscfile.cpp
index 24d1262d56..8b2a5d7e7f 100644
--- a/engines/saga/rscfile.cpp
+++ b/engines/saga/rscfile.cpp
@@ -313,7 +313,7 @@ bool Resource::loadContext(ResourceContext *context) {
subjectResourceData->offset = resourceData->offset;
subjectResourceData->size = resourceData->size;
}
-
+ free(tableBuffer);
}
//process external patch files