diff options
author | Max Horn | 2007-02-28 14:48:26 +0000 |
---|---|---|
committer | Max Horn | 2007-02-28 14:48:26 +0000 |
commit | 8c8abca6f80fc63b5c11fa43319cdf56b4845660 (patch) | |
tree | ec031a874e67c92d3640824c2ee9816b5b6cab90 /engines/scumm/imuse_digi | |
parent | dea688d0f5303e552bff8ff22798719d92ed53c1 (diff) | |
download | scummvm-rg350-8c8abca6f80fc63b5c11fa43319cdf56b4845660.tar.gz scummvm-rg350-8c8abca6f80fc63b5c11fa43319cdf56b4845660.tar.bz2 scummvm-rg350-8c8abca6f80fc63b5c11fa43319cdf56b4845660.zip |
Changed the AppendableAudioStream code to use a queue of buffers, instead of a fixed size wrap-around memory buffer (this reduces memory usage in some cases by 500-700k, while actually being more flexible)
svn-id: r25909
Diffstat (limited to 'engines/scumm/imuse_digi')
-rw-r--r-- | engines/scumm/imuse_digi/dimuse.cpp | 9 | ||||
-rw-r--r-- | engines/scumm/imuse_digi/dimuse_sndmgr.cpp | 4 | ||||
-rw-r--r-- | engines/scumm/imuse_digi/dimuse_track.cpp | 6 |
3 files changed, 8 insertions, 11 deletions
diff --git a/engines/scumm/imuse_digi/dimuse.cpp b/engines/scumm/imuse_digi/dimuse.cpp index 7e70268b12..c249dd57a9 100644 --- a/engines/scumm/imuse_digi/dimuse.cpp +++ b/engines/scumm/imuse_digi/dimuse.cpp @@ -188,9 +188,8 @@ void IMuseDigital::saveOrLoad(Serializer *ser) { track->mixerFlags |= Audio::Mixer::FLAG_LITTLE_ENDIAN; #endif - int32 streamBufferSize = track->iteration; track->stream2 = NULL; - track->stream = Audio::makeAppendableAudioStream(freq, track->mixerFlags, streamBufferSize); + track->stream = Audio::makeAppendableAudioStream(freq, track->mixerFlags); const int pan = (track->pan != 64) ? 2 * track->pan - 127 : 0; const int vol = track->vol / 1000; @@ -324,10 +323,10 @@ void IMuseDigital::callback() { if (_mixer->isReady()) { _mixer->setChannelVolume(track->handle, vol); _mixer->setChannelBalance(track->handle, pan); - track->stream->append(data, result); + track->stream->queueBuffer(data, result); track->regionOffset += result; - } - free(data); + } else + delete[] data; if (_sound->isEndOfRegion(track->soundHandle, track->curRegion)) { switchToNextRegion(track); diff --git a/engines/scumm/imuse_digi/dimuse_sndmgr.cpp b/engines/scumm/imuse_digi/dimuse_sndmgr.cpp index 2b88f37b17..5c7fa5b613 100644 --- a/engines/scumm/imuse_digi/dimuse_sndmgr.cpp +++ b/engines/scumm/imuse_digi/dimuse_sndmgr.cpp @@ -583,11 +583,11 @@ int32 ImuseDigiSndMgr::getDataFromRegion(soundStruct *soundHandle, int region, b if ((soundHandle->bundle) && (!soundHandle->compressed)) { size = soundHandle->bundle->decompressSampleByCurIndex(start + offset, size, buf, header_size, header_outside); } else if (soundHandle->resPtr) { - *buf = (byte *)malloc(size); + *buf = new byte[size]; assert(*buf); memcpy(*buf, soundHandle->resPtr + start + offset + header_size, size); } else if ((soundHandle->bundle) && (soundHandle->compressed)) { - *buf = (byte *)malloc(size); + *buf = new byte[size]; assert(*buf); char fileName[24]; sprintf(fileName, "%s_reg%03d", soundHandle->name, region); diff --git a/engines/scumm/imuse_digi/dimuse_track.cpp b/engines/scumm/imuse_digi/dimuse_track.cpp index 37ae22f47f..6acb2a0318 100644 --- a/engines/scumm/imuse_digi/dimuse_track.cpp +++ b/engines/scumm/imuse_digi/dimuse_track.cpp @@ -176,9 +176,8 @@ void IMuseDigital::startSound(int soundId, const char *soundName, int soundType, type = Audio::Mixer::kMusicSoundType; // setup 1 second stream wrapped buffer - int32 streamBufferSize = track->iteration; track->stream2 = NULL; - track->stream = Audio::makeAppendableAudioStream(freq, track->mixerFlags, streamBufferSize); + track->stream = Audio::makeAppendableAudioStream(freq, track->mixerFlags); _mixer->playInputStream(type, &track->handle, track->stream, -1, vol, pan, false); track->started = true; } @@ -356,8 +355,7 @@ IMuseDigital::Track *IMuseDigital::cloneToFadeOutTrack(Track *track, int fadeDel type = Audio::Mixer::kMusicSoundType; // setup 1 second stream wrapped buffer - int32 streamBufferSize = fadeTrack->iteration; - fadeTrack->stream = Audio::makeAppendableAudioStream(_sound->getFreq(fadeTrack->soundHandle), fadeTrack->mixerFlags, streamBufferSize); + fadeTrack->stream = Audio::makeAppendableAudioStream(_sound->getFreq(fadeTrack->soundHandle), fadeTrack->mixerFlags); _mixer->playInputStream(type, &fadeTrack->handle, fadeTrack->stream, -1, fadeTrack->vol / 1000, fadeTrack->pan, false); fadeTrack->started = true; fadeTrack->used = true; |