aboutsummaryrefslogtreecommitdiff
path: root/engines/toon/audio.cpp
diff options
context:
space:
mode:
authorDavid Turner2010-11-10 06:22:18 +0000
committerDavid Turner2010-11-10 06:22:18 +0000
commit52ecbd4305d2f728ea8db11dab28e9a56c9dcb6e (patch)
treec8d08f83e8014acfe70ac4f4798a8856d7e21624 /engines/toon/audio.cpp
parent7ad677afc8ad3768a8c903afed5881403e1a026d (diff)
downloadscummvm-rg350-52ecbd4305d2f728ea8db11dab28e9a56c9dcb6e.tar.gz
scummvm-rg350-52ecbd4305d2f728ea8db11dab28e9a56c9dcb6e.tar.bz2
scummvm-rg350-52ecbd4305d2f728ea8db11dab28e9a56c9dcb6e.zip
TOON: Even more corrections to close memory leaks.
These corrections close a number of leaks in the Toon engine reported by running Valgrind with --leak-check=full option, but a few still remain. svn-id: r54185
Diffstat (limited to 'engines/toon/audio.cpp')
-rw-r--r--engines/toon/audio.cpp26
1 files changed, 12 insertions, 14 deletions
diff --git a/engines/toon/audio.cpp b/engines/toon/audio.cpp
index 592d1a7388..3fba7d6cd8 100644
--- a/engines/toon/audio.cpp
+++ b/engines/toon/audio.cpp
@@ -44,10 +44,10 @@ static int ADPCM_table[89] = {
AudioManager::AudioManager(ToonEngine *vm, Audio::Mixer *mixer) : _vm(vm), _mixer(mixer) {
for (int32 i = 0; i < 16; i++)
- _channels[i] = 0;
+ _channels[i] = NULL;
for (int32 i = 0; i < 4; i++)
- _audioPacks[i] = 0;
+ _audioPacks[i] = NULL;
for (int32 i = 0; i < 4; i++) {
_ambientSFXs[i]._delay = 0;
@@ -90,7 +90,7 @@ void AudioManager::removeInstance(AudioStreamInstance *inst) {
for (int32 i = 0; i < 16; i++) {
if (inst == _channels[i])
- _channels[i] = 0;
+ _channels[i] = NULL;
}
}
@@ -130,9 +130,7 @@ void AudioManager::playMusic(Common::String dir, Common::String music) {
_currentMusicChannel = 0;
}
-
- //if (!_channels[_currentMusicChannel])
- // delete _channels[_currentMusicChannel];
+ delete _channels[_currentMusicChannel];
_channels[_currentMusicChannel] = new AudioStreamInstance(this, _mixer, srs, true);
_channels[_currentMusicChannel]->setVolume(_musicMuted ? 0 : 255);
_channels[_currentMusicChannel]->play(true, Audio::Mixer::kMusicSoundType);
@@ -159,6 +157,7 @@ void AudioManager::playVoice(int32 id, bool genericVoice) {
else
stream = _audioPacks[1]->getStream(id);
+ delete _channels[2];
_channels[2] = new AudioStreamInstance(this, _mixer, stream);
_channels[2]->play(false, Audio::Mixer::kSpeechSoundType);
_channels[2]->setVolume(_voiceMuted ? 0 : 255);
@@ -240,10 +239,10 @@ void AudioManager::stopMusic() {
AudioStreamInstance::AudioStreamInstance(AudioManager *man, Audio::Mixer *mixer, Common::SeekableReadStream *stream , bool looping) {
_compBufferSize = 0;
- _buffer = 0;
+ _buffer = NULL;
_bufferMaxSize = 0;
_mixer = mixer;
- _compBuffer = 0;
+ _compBuffer = NULL;
_bufferOffset = 0;
_lastADPCMval1 = 0;
_lastADPCMval2 = 0;
@@ -269,6 +268,9 @@ AudioStreamInstance::AudioStreamInstance(AudioManager *man, Audio::Mixer *mixer,
}
AudioStreamInstance::~AudioStreamInstance() {
+ delete[] _buffer;
+ delete[] _compBuffer;
+
if (_man)
_man->removeInstance(this);
}
@@ -319,15 +321,13 @@ bool AudioStreamInstance::readPacket() {
_file->readSint32LE();
if (numCompressedBytes > _compBufferSize) {
- if (_compBuffer)
- delete[] _compBuffer;
+ delete[] _compBuffer;
_compBufferSize = numCompressedBytes;
_compBuffer = new uint8[_compBufferSize];
}
if (numDecompressedBytes > _bufferMaxSize) {
- if (_buffer)
- delete [] _buffer;
+ delete [] _buffer;
_bufferMaxSize = numDecompressedBytes;
_buffer = new int16[numDecompressedBytes];
}
@@ -450,9 +450,7 @@ void AudioStreamInstance::handleFade(int32 numSamples) {
_musicAttenuation = 1000;
}
-
_mixer->setChannelVolume(_handle, finalVolume * _musicAttenuation / 1000);
-
}
void AudioStreamInstance::stop(bool fade /*= false*/) {