diff options
author | Max Horn | 2006-10-27 22:49:31 +0000 |
---|---|---|
committer | Max Horn | 2006-10-27 22:49:31 +0000 |
commit | 2b2be1a18d595f4b4697b4ff577f182a3926e12e (patch) | |
tree | 10b71127e91a1ade65d23b7acfc6482cd2c2c7ae /engines/scumm/smush/imuse_channel.cpp | |
parent | a4a83df8a1ab78cd964e6b1004cfe0425fbeadf5 (diff) | |
download | scummvm-rg350-2b2be1a18d595f4b4697b4ff577f182a3926e12e.tar.gz scummvm-rg350-2b2be1a18d595f4b4697b4ff577f182a3926e12e.tar.bz2 scummvm-rg350-2b2be1a18d595f4b4697b4ff577f182a3926e12e.zip |
SCUMM: Unified some more SMUSH audio channel code
svn-id: r24538
Diffstat (limited to 'engines/scumm/smush/imuse_channel.cpp')
-rw-r--r-- | engines/scumm/smush/imuse_channel.cpp | 80 |
1 files changed, 12 insertions, 68 deletions
diff --git a/engines/scumm/smush/imuse_channel.cpp b/engines/scumm/smush/imuse_channel.cpp index aca8bf6d4a..d05192eadd 100644 --- a/engines/scumm/smush/imuse_channel.cpp +++ b/engines/scumm/smush/imuse_channel.cpp @@ -21,7 +21,9 @@ */ #include "common/stdafx.h" -#include "scumm/scumm.h" +#include "common/endian.h" + +#include "scumm/scumm.h" // For DEBUG_SMUSH #include "scumm/util.h" #include "scumm/smush/channel.h" #include "scumm/smush/chunk.h" @@ -93,7 +95,14 @@ bool ImuseChannel::appendData(Chunk &b, int32 size) { b.read(_tbuffer, size); } } - return processBuffer(); + + processBuffer(); + + _srbufferSize = _sbufferSize; + if (_sbuffer && _bitsize == 12) + decode(); + + return true; } bool ImuseChannel::handleFormat(Chunk &src) { @@ -237,72 +246,7 @@ bool ImuseChannel::handleSubTags(int32 &offset) { return false; } -bool ImuseChannel::processBuffer() { - assert(_tbuffer != 0); - assert(_tbufferSize != 0); - assert(_sbuffer == 0); - assert(_sbufferSize == 0); - - if (_inData) { - if (_dataSize < _tbufferSize) { - int32 offset = _dataSize; - while (handleSubTags(offset)) - ; - _sbufferSize = _dataSize; - _sbuffer = _tbuffer; - if (offset < _tbufferSize) { - int new_size = _tbufferSize - offset; - _tbuffer = new byte[new_size]; - if (!_tbuffer) - error("imuse_channel failed to allocate memory"); - memcpy(_tbuffer, _sbuffer + offset, new_size); - _tbufferSize = new_size; - } else { - _tbuffer = 0; - _tbufferSize = 0; - } - if (_sbufferSize == 0) { - delete []_sbuffer; - _sbuffer = 0; - } - } else { - _sbufferSize = _tbufferSize; - _sbuffer = _tbuffer; - _tbufferSize = 0; - _tbuffer = 0; - } - } else { - int32 offset = 0; - while (handleSubTags(offset)) - ; - if (_inData) { - _sbufferSize = _tbufferSize - offset; - assert(_sbufferSize); - _sbuffer = new byte[_sbufferSize]; - if (!_sbuffer) - error("imuse_channel failed to allocate memory"); - memcpy(_sbuffer, _tbuffer + offset, _sbufferSize); - delete []_tbuffer; - _tbuffer = 0; - _tbufferSize = 0; - } else { - if (offset) { - byte * old = _tbuffer; - int32 new_size = _tbufferSize - offset; - _tbuffer = new byte[new_size]; - if (!_tbuffer) error("imuse_channel failed to allocate memory"); - memcpy(_tbuffer, old + offset, new_size); - _tbufferSize = new_size; - delete []old; - } - } - } - _srbufferSize = _sbufferSize; - if (_sbuffer && _bitsize == 12) decode(); - return true; -} - -int32 ImuseChannel::availableSoundData(void) const { +int32 ImuseChannel::getAvailableSoundDataSize(void) const { int32 ret = _sbufferSize; if (_channels == 2) ret /= 2; if (_bitsize > 8) ret /= 2; |