diff options
author | Max Horn | 2006-10-28 00:04:50 +0000 |
---|---|---|
committer | Max Horn | 2006-10-28 00:04:50 +0000 |
commit | d90762c430d9ee20ca4137d324aac5dc8308fdd6 (patch) | |
tree | a3b54e9f1c538a42900fbc61f4d1d054f35a5c57 /engines | |
parent | a6fee09adf6687d434d566b292f23fa9ca064c21 (diff) | |
download | scummvm-rg350-d90762c430d9ee20ca4137d324aac5dc8308fdd6.tar.gz scummvm-rg350-d90762c430d9ee20ca4137d324aac5dc8308fdd6.tar.bz2 scummvm-rg350-d90762c430d9ee20ca4137d324aac5dc8308fdd6.zip |
SCUMM: Changed SaudChannel to return 8bit mono data (the mixer will do any necessary conversions for us, no need to waste memory like this); fix SmushMixer to not allocate buffers twice as big as necessary
svn-id: r24541
Diffstat (limited to 'engines')
-rw-r--r-- | engines/scumm/smush/channel.h | 8 | ||||
-rw-r--r-- | engines/scumm/smush/saud_channel.cpp | 7 | ||||
-rw-r--r-- | engines/scumm/smush/smush_mixer.cpp | 4 |
3 files changed, 8 insertions, 11 deletions
diff --git a/engines/scumm/smush/channel.h b/engines/scumm/smush/channel.h index 9f3c4ad31f..633c87a8c4 100644 --- a/engines/scumm/smush/channel.h +++ b/engines/scumm/smush/channel.h @@ -87,12 +87,12 @@ public: bool checkParameters(int32 index, int32 duration, int32 flags, int32 vol1, int32 vol2); bool appendData(Chunk &b, int32 size); int32 getAvailableSoundDataSize() const; - void getSoundData(int16 *sound_buffer, int32 size); - void getSoundData(int8 *sound_buffer, int32 size) { error("8bit request for SAUD channel should never happen"); }; + void getSoundData(int16 *sound_buffer, int32 size) { error("16bit request for SAUD channel should never happen"); }; + void getSoundData(int8 *sound_buffer, int32 size); int32 getRate() { return 22050; } bool getParameters(bool &stereo, bool &is_16bit, int32 &vol, int32 &pan) { - stereo = true; - is_16bit = true; + stereo = false; + is_16bit = false; vol = _volume; pan = _pan; return true; diff --git a/engines/scumm/smush/saud_channel.cpp b/engines/scumm/smush/saud_channel.cpp index 25066f85cf..86ed7811ca 100644 --- a/engines/scumm/smush/saud_channel.cpp +++ b/engines/scumm/smush/saud_channel.cpp @@ -184,11 +184,8 @@ int32 SaudChannel::getAvailableSoundDataSize(void) const { return _sbufferSize; } -void SaudChannel::getSoundData(int16 *snd, int32 size) { - for (int32 i = 0; i < size; i++) { - snd[2 * i] = TO_LE_16(_sbuffer[i] ^ 0x80); - snd[2 * i + 1] = TO_LE_16(_sbuffer[i] ^ 0x80); - } +void SaudChannel::getSoundData(int8 *snd, int32 size) { + memcpy(snd, _sbuffer, size); if (!_keepSize) _dataSize -= size; delete []_sbuffer; diff --git a/engines/scumm/smush/smush_mixer.cpp b/engines/scumm/smush/smush_mixer.cpp index fbf6ee1ad1..ea5d167193 100644 --- a/engines/scumm/smush/smush_mixer.cpp +++ b/engines/scumm/smush/smush_mixer.cpp @@ -113,14 +113,14 @@ bool SmushMixer::handleFrame() { byte flags = stereo ? Audio::Mixer::FLAG_STEREO : 0; if (is_16bit) { - data = malloc(size * (stereo ? 2 : 1) * 4); + data = malloc(size * (stereo ? 4 : 2)); _channels[i].chan->getSoundData((int16 *)data, size); size *= stereo ? 4 : 2; flags |= Audio::Mixer::FLAG_16BITS; } else { - data = malloc(size * (stereo ? 2 : 1) * 2); + data = malloc(size * (stereo ? 2 : 1)); _channels[i].chan->getSoundData((int8 *)data, size); size *= stereo ? 2 : 1; |