diff options
author | Max Horn | 2003-12-25 14:03:04 +0000 |
---|---|---|
committer | Max Horn | 2003-12-25 14:03:04 +0000 |
commit | e274286952c329180b6de5b8b04d495101bc3116 (patch) | |
tree | e4d518af4f2df07f0b45ec016cdb1814d3fce31d /scumm/smush/imuse_channel.cpp | |
parent | 964b34e7218d7c6c297e0b3af19625319a0f7f50 (diff) | |
download | scummvm-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.cpp | 18 |
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) { |