aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorMax Horn2006-10-28 00:04:50 +0000
committerMax Horn2006-10-28 00:04:50 +0000
commitd90762c430d9ee20ca4137d324aac5dc8308fdd6 (patch)
treea3b54e9f1c538a42900fbc61f4d1d054f35a5c57 /engines
parenta6fee09adf6687d434d566b292f23fa9ca064c21 (diff)
downloadscummvm-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.h8
-rw-r--r--engines/scumm/smush/saud_channel.cpp7
-rw-r--r--engines/scumm/smush/smush_mixer.cpp4
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;