diff options
author | Matthew Hoops | 2011-08-25 11:16:58 -0400 |
---|---|---|
committer | Matthew Hoops | 2011-08-25 11:16:58 -0400 |
commit | 9a79a336aa5427e8b52683bd39088a2c557245db (patch) | |
tree | a684d3a70f56771b209fa93b55f53cf3b71b82b3 /audio/decoders | |
parent | 64d2e2db118984201068406c8470ec70158fa5ff (diff) | |
download | scummvm-rg350-9a79a336aa5427e8b52683bd39088a2c557245db.tar.gz scummvm-rg350-9a79a336aa5427e8b52683bd39088a2c557245db.tar.bz2 scummvm-rg350-9a79a336aa5427e8b52683bd39088a2c557245db.zip |
AUDIO: Don't abuse rewind() for looping in XA
Thanks to LordHoto for pointing out my stupidity :P
Diffstat (limited to 'audio/decoders')
-rw-r--r-- | audio/decoders/xa.cpp | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/audio/decoders/xa.cpp b/audio/decoders/xa.cpp index ab7fd66481..818cd2df59 100644 --- a/audio/decoders/xa.cpp +++ b/audio/decoders/xa.cpp @@ -41,6 +41,8 @@ private: Common::SeekableReadStream *_stream; DisposeAfterUse::Flag _disposeAfterUse; + void seekToPos(uint pos); + byte _predictor; double _samples[28]; byte _samplesRemaining; @@ -100,7 +102,7 @@ int XAStream::readBuffer(int16 *buffer, const int numSamples) { byte flags = _stream->readByte(); if (flags == 3) { // Loop - rewind(); + seekToPos(_loopPoint); continue; } else if (flags == 6) { // Set loop point @@ -143,13 +145,16 @@ int XAStream::readBuffer(int16 *buffer, const int numSamples) { } bool XAStream::rewind() { - _stream->seek(_loopPoint); + seekToPos(0); + return true; +} + +void XAStream::seekToPos(uint pos) { + _stream->seek(pos); _samplesRemaining = 0; _predictor = 0; _s1 = _s2 = 0.0; _endOfData = false; - - return true; } RewindableAudioStream *makeXAStream(Common::SeekableReadStream *stream, int rate, DisposeAfterUse::Flag disposeAfterUse) { |