aboutsummaryrefslogtreecommitdiff
path: root/scumm/smush/imuse_channel.cpp
diff options
context:
space:
mode:
authorMax Horn2003-12-25 14:03:04 +0000
committerMax Horn2003-12-25 14:03:04 +0000
commite274286952c329180b6de5b8b04d495101bc3116 (patch)
treee4d518af4f2df07f0b45ec016cdb1814d3fce31d /scumm/smush/imuse_channel.cpp
parent964b34e7218d7c6c297e0b3af19625319a0f7f50 (diff)
downloadscummvm-rg350-e274286952c329180b6de5b8b04d495101bc3116.tar.gz
scummvm-rg350-e274286952c329180b6de5b8b04d495101bc3116.tar.bz2
scummvm-rg350-e274286952c329180b6de5b8b04d495101bc3116.zip
cleanup (TODO: reduce code duplication)
svn-id: r11909
Diffstat (limited to 'scumm/smush/imuse_channel.cpp')
-rw-r--r--scumm/smush/imuse_channel.cpp18
1 files changed, 10 insertions, 8 deletions
diff --git a/scumm/smush/imuse_channel.cpp b/scumm/smush/imuse_channel.cpp
index 2c6762008c..3a6ccc843d 100644
--- a/scumm/smush/imuse_channel.cpp
+++ b/scumm/smush/imuse_channel.cpp
@@ -185,27 +185,29 @@ void ImuseChannel::decode() {
_tbufferSize += remaining_size;
}
}
+
+ // FIXME: Code duplication! See decode12BitsSample() in scumm/imuse_digi.cpp
+
int loop_size = _sbufferSize / 3;
- int new_size = loop_size * 2;
+ int new_size = loop_size * 4;
byte *keep, *decoded;
uint32 value;
- keep = decoded = new byte[new_size * 2];
+ keep = decoded = new byte[new_size];
assert(keep);
unsigned char * source = _sbuffer;
- while (loop_size--) {
+
+ while (loop_size--) {
byte v1 = *source++;
byte v2 = *source++;
byte v3 = *source++;
value = ((((v2 & 0x0f) << 8) | v1) << 4) - 0x8000;
- *decoded++ = (byte)((value >> 8) & 0xff);
- *decoded++ = (byte)(value & 0xff);
+ WRITE_BE_UINT16(decoded, value); decoded += 2;
value = ((((v2 & 0xf0) << 4) | v3) << 4) - 0x8000;
- *decoded++ = (byte)((value >> 8) & 0xff);
- *decoded++ = (byte)(value & 0xff);
+ WRITE_BE_UINT16(decoded, value); decoded += 2;
}
delete []_sbuffer;
_sbuffer = (byte *)keep;
- _sbufferSize = new_size * sizeof(int16);
+ _sbufferSize = new_size;
}
bool ImuseChannel::handleSubTags(int32 &offset) {