[Scummvm-cvs-logs] SF.net SVN: scummvm: [28082] scummvm/trunk/engines/saga/music.cpp
thebluegr at users.sourceforge.net
thebluegr at users.sourceforge.net
Sun Jul 15 05:13:15 CEST 2007
Revision: 28082
http://scummvm.svn.sourceforge.net/scummvm/?rev=28082&view=rev
Author: thebluegr
Date: 2007-07-14 20:13:15 -0700 (Sat, 14 Jul 2007)
Log Message:
-----------
ITE: Music looping works now with compressed digital music. However, there's still a small pause when a track restarts
Modified Paths:
--------------
scummvm/trunk/engines/saga/music.cpp
Modified: scummvm/trunk/engines/saga/music.cpp
===================================================================
--- scummvm/trunk/engines/saga/music.cpp 2007-07-15 00:41:31 UTC (rev 28081)
+++ scummvm/trunk/engines/saga/music.cpp 2007-07-15 03:13:15 UTC (rev 28082)
@@ -148,10 +148,6 @@
}
int DigitalMusicInputStream::readBuffer(int16 *buffer, const int numSamples) {
- // TODO/FIXME: Add looping support for compressed digital music - remove this once it's done
- // Currently, an illegal read is made, leading to a crash. Therefore, it's disabled for now
- if (_compressedStream != NULL) _looping = false;
-
if (!_looping && _compressedStream != NULL)
return _compressedStream->readBuffer(buffer, numSamples);
@@ -161,20 +157,27 @@
if (_compressedStream != NULL) {
len = _compressedStream->readBuffer(buffer, numSamples);
if (len < numSamples) {
+ // FIXME: When a looping compressed track finishes and before it restarts, there's a slight pause.
+ // This might be caused by the time it takes to reset the compressed stream
+
+ // Skip to the beginning of the track in the data file
+ _filePos = _startPos;
+ _file->seek(_filePos, SEEK_SET);
+ // Reset the compressed stream
delete _compressedStream;
createCompressedStream();
- //_file->seek(_startPos, SEEK_SET);
- //_pos = 0;
+ len = _compressedStream->readBuffer(buffer, numSamples);
}
+ samples += len;
} else {
len = MIN(numSamples - samples, (int) (_bufferEnd - _pos));
memcpy(buffer, _pos, len * 2);
+ buffer += len;
+ _pos += len;
+ samples += len;
+ if (_pos >= _bufferEnd)
+ refill();
}
- buffer += len;
- _pos += len;
- samples += len;
- if (_pos >= _bufferEnd)
- refill();
}
return samples;
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Scummvm-git-logs
mailing list