diff options
author | Vladimir Menshakov | 2010-01-07 12:01:33 +0000 |
---|---|---|
committer | Vladimir Menshakov | 2010-01-07 12:01:33 +0000 |
commit | c37e772b8cde4c120064e4854f06d1e113bd7a39 (patch) | |
tree | 42ba1aa646f6b8758b88f5645e937eb14091acae | |
parent | 58aab46f06834db23acbd75747b4df48b11f2a4c (diff) | |
download | scummvm-rg350-c37e772b8cde4c120064e4854f06d1e113bd7a39.tar.gz scummvm-rg350-c37e772b8cde4c120064e4854f06d1e113bd7a39.tar.bz2 scummvm-rg350-c37e772b8cde4c120064e4854f06d1e113bd7a39.zip |
cleaned up player, fixed invalid delete's and memory leaks
svn-id: r47106
-rw-r--r-- | engines/teenagent/music.cpp | 19 | ||||
-rw-r--r-- | engines/teenagent/music.h | 27 |
2 files changed, 21 insertions, 25 deletions
diff --git a/engines/teenagent/music.cpp b/engines/teenagent/music.cpp index 1a0b51a6e8..3e9731049f 100644 --- a/engines/teenagent/music.cpp +++ b/engines/teenagent/music.cpp @@ -51,10 +51,7 @@ bool MusicPlayer::load(int id) { stream->read(header, 4); //check header? - memset(_samples, 0, sizeof(_samples)); - // Load the samples - sampleCount = stream->readByte(); debug(0, "sampleCount = %d", sampleCount); @@ -70,25 +67,15 @@ bool MusicPlayer::load(int id) { if (in == 0) { warning("load: invalid sample %d (0x%02x)", sample, sample); - _samples[sample].data = NULL; - _samples[sample].size = 0; + _samples[sample].clear(); continue; } - byte *sampleData = new byte[sampleSize]; - in->read(sampleData, sampleSize); - - // Convert the sample from signed to unsigned - for (uint32 i = 0; i < sampleSize; i++) - *sampleData ^= 0x80; - - delete _samples[sample].data; - _samples[sample].data = sampleData; - _samples[sample].size = sampleSize; + _samples[sample].resize(sampleSize); + in->read(_samples[sample].data, sampleSize); } // Load the music data - _rows.clear(); Row row; diff --git a/engines/teenagent/music.h b/engines/teenagent/music.h index 5a8caba9d7..56f3db602e 100644 --- a/engines/teenagent/music.h +++ b/engines/teenagent/music.h @@ -54,18 +54,27 @@ protected: } channels[3]; }; - struct { - const byte *data; - uint32 size; + struct Sample { + byte *data; + uint size; + Sample(): data(0), size(0) {} + ~Sample() { delete[] data; } + + void resize(uint s) { + if (s != size) { + delete[] data; + data = new byte[s]; + size = s; + } + } + void clear() { + delete[] data; + data = 0; + size = 0; + } } _samples[256]; byte sampleCount; - struct { - byte volume; - const byte *data; - uint32 size; - } _channels[3]; - Common::Array<Row> _rows; uint _currRow; |