[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