diff options
-rw-r--r-- | sword2/driver/d_sound.cpp | 42 | ||||
-rw-r--r-- | sword2/resman.cpp | 2 | ||||
-rw-r--r-- | sword2/sound.cpp | 13 | ||||
-rw-r--r-- | sword2/sound.h | 2 |
4 files changed, 31 insertions, 28 deletions
diff --git a/sword2/driver/d_sound.cpp b/sword2/driver/d_sound.cpp index 26495047d4..22e3bf1453 100644 --- a/sword2/driver/d_sound.cpp +++ b/sword2/driver/d_sound.cpp @@ -43,7 +43,7 @@ namespace Sword2 { static AudioStream *makeCLUStream(Common::File *fp, int size); static AudioStream *getAudioStream(SoundFileHandle *fh, const char *base, int cd, uint32 id, uint32 *numSamples) { - if (!fh->file->isOpen()) { + if (!fh->file.isOpen()) { struct { const char *ext; int mode; @@ -82,13 +82,13 @@ static AudioStream *getAudioStream(SoundFileHandle *fh, const char *base, int cd if (soundMode == 0) return NULL; - fh->file->open(filename); + fh->file.open(filename); fh->fileType = soundMode; - if (!fh->file->isOpen()) { + if (!fh->file.isOpen()) { warning("Very strange fopen error"); return NULL; } - if (fh->fileSize != fh->file->size()) { + if (fh->fileSize != fh->file.size()) { if (fh->idxTab) { free(fh->idxTab); fh->idxTab = NULL; @@ -99,19 +99,19 @@ static AudioStream *getAudioStream(SoundFileHandle *fh, const char *base, int cd uint32 entrySize = (fh->fileType == kCLUMode) ? 2 : 3; if (!fh->idxTab) { - fh->file->seek(0); - fh->idxLen = fh->file->readUint32LE(); - fh->file->seek(entrySize * 4); + fh->file.seek(0); + fh->idxLen = fh->file.readUint32LE(); + fh->file.seek(entrySize * 4); fh->idxTab = (uint32*)malloc(fh->idxLen * 3 * sizeof(uint32)); for (uint32 cnt = 0; cnt < fh->idxLen; cnt++) { - fh->idxTab[cnt * 3 + 0] = fh->file->readUint32LE(); - fh->idxTab[cnt * 3 + 1] = fh->file->readUint32LE(); + fh->idxTab[cnt * 3 + 0] = fh->file.readUint32LE(); + fh->idxTab[cnt * 3 + 1] = fh->file.readUint32LE(); if (fh->fileType == kCLUMode) { fh->idxTab[cnt * 3 + 2] = fh->idxTab[cnt * 3 + 1]; fh->idxTab[cnt * 3 + 1]--; } else - fh->idxTab[cnt * 3 + 2] = fh->file->readUint32LE(); + fh->idxTab[cnt * 3 + 2] = fh->file.readUint32LE(); } } @@ -123,26 +123,26 @@ static AudioStream *getAudioStream(SoundFileHandle *fh, const char *base, int cd *numSamples = len; if (!pos || !len) { - fh->file->close(); + fh->file.close(); return NULL; } - fh->file->seek(pos, SEEK_SET); + fh->file.seek(pos, SEEK_SET); switch (fh->fileType) { case kCLUMode: - return makeCLUStream(fh->file, enc_len); + return makeCLUStream(&fh->file, enc_len); #ifdef USE_MAD case kMP3Mode: - return makeMP3Stream(fh->file, enc_len); + return makeMP3Stream(&fh->file, enc_len); #endif #ifdef USE_VORBIS case kVorbisMode: - return makeVorbisStream(fh->file, enc_len); + return makeVorbisStream(&fh->file, enc_len); #endif #ifdef USE_FLAC case kFlacMode: - return makeFlacStream(fh->file, enc_len); + return makeFlacStream(&fh->file, enc_len); #endif default: return NULL; @@ -461,8 +461,8 @@ int Sound::readBuffer(int16 *buffer, const int numSamples) { } for (i = 0; i < MAXMUS; i++) { - if (!inUse[i] && !_musicFile[i].inUse && _musicFile[i].file->isOpen()) - _musicFile[i].file->close(); + if (!inUse[i] && !_musicFile[i].inUse && _musicFile[i].file.isOpen()) + _musicFile[i].file.close(); } return numSamples; @@ -470,7 +470,7 @@ int Sound::readBuffer(int16 *buffer, const int numSamples) { bool Sound::endOfData() const { for (int i = 0; i < MAXMUS; i++) { - if (_musicFile[i].file->isOpen()) + if (_musicFile[i].file.isOpen()) return false; } @@ -727,13 +727,13 @@ uint32 Sound::preFetchCompSpeech(uint32 speechId, uint16 **buf) { *buf = (uint16 *)malloc(bufferSize); if (!*buf) { delete input; - fh->file->close(); + fh->file.close(); return 0; } uint32 readSamples = input->readBuffer((int16 *)*buf, numSamples); - fh->file->close(); + fh->file.close(); delete input; return 2 * readSamples; diff --git a/sword2/resman.cpp b/sword2/resman.cpp index dfb6d1690e..8269f54c4a 100644 --- a/sword2/resman.cpp +++ b/sword2/resman.cpp @@ -189,6 +189,8 @@ ResourceManager::~ResourceManager() { _vm->_memory->memFree(res->ptr); res = res->next; } + for (int i = 0; i < _totalClusters; i++) + free(_resFiles[i].entryTab); free(_resList); free(_resConvTable); } diff --git a/sword2/sound.cpp b/sword2/sound.cpp index 0b673cb64f..de53400d42 100644 --- a/sword2/sound.cpp +++ b/sword2/sound.cpp @@ -53,14 +53,12 @@ Sound::Sound(Sword2Engine *vm) { for (i = 0; i < MAXMUS; i++) { _music[i] = NULL; - _musicFile[i].file = new Common::File; _musicFile[i].idxTab = NULL; _musicFile[i].idxLen = 0; _musicFile[i].fileSize = 0; _musicFile[i].fileType = 0; _musicFile[i].inUse = false; - _speechFile[i].file = new Common::File; _speechFile[i].idxTab = NULL; _speechFile[i].idxLen = 0; _speechFile[i].fileSize = 0; @@ -96,10 +94,13 @@ Sound::~Sound() { free(_mixBuffer); for (int i = 0; i < MAXMUS; i++) { - if (_musicFile[i].file->isOpen()) - _musicFile[i].file->close(); - if (_speechFile[i].file->isOpen()) - _speechFile[i].file->close(); + if (_musicFile[i].file.isOpen()) + _musicFile[i].file.close(); + if (_speechFile[i].file.isOpen()) + _speechFile[i].file.close(); + + free(_musicFile[i].idxTab); + free(_speechFile[i].idxTab); } } diff --git a/sword2/sound.h b/sword2/sound.h index 05ff4a43b7..60e31946bd 100644 --- a/sword2/sound.h +++ b/sword2/sound.h @@ -109,7 +109,7 @@ public: }; struct SoundFileHandle { - Common::File *file; + Common::File file; uint32 *idxTab; uint32 idxLen; uint32 fileSize; |