[Scummvm-cvs-logs] SF.net SVN: scummvm: [32323] scummvm/trunk/sound

lordhoto at users.sourceforge.net lordhoto at users.sourceforge.net
Tue May 27 15:28:47 CEST 2008


Revision: 32323
          http://scummvm.svn.sourceforge.net/scummvm/?rev=32323&view=rev
Author:   lordhoto
Date:     2008-05-27 06:28:47 -0700 (Tue, 27 May 2008)

Log Message:
-----------
- Cleanup code for FlacInputStream::getTotalPlayTime
- Reset input stream position in MP3InputStream after calculating total play time

Modified Paths:
--------------
    scummvm/trunk/sound/flac.cpp
    scummvm/trunk/sound/mp3.cpp

Modified: scummvm/trunk/sound/flac.cpp
===================================================================
--- scummvm/trunk/sound/flac.cpp	2008-05-27 13:15:51 UTC (rev 32322)
+++ scummvm/trunk/sound/flac.cpp	2008-05-27 13:28:47 UTC (rev 32323)
@@ -90,7 +90,6 @@
 	bool _disposeAfterUse;
 
 	uint _numLoops;
-	const uint _totalNumLoops;
 
 	::FLAC__SeekableStreamDecoder *_decoder;
 
@@ -103,6 +102,9 @@
 	/** index + 1(!) of the last sample to be played - 0 is end of stream */
 	FLAC__uint64 _lastSample;
 
+	/** total play time */
+	int32 _totalPlayTime;
+
 	/** true if the last sample was decoded from the FLAC-API - there might still be data in the buffer */
 	bool _lastSampleWritten;
 
@@ -142,29 +144,8 @@
 		return _streaminfo.channels == 0 || (_lastSampleWritten && _sampleCache.bufFill == 0);
 	}
 
-	int32 getTotalPlayTime() const {
-		if (!_totalNumLoops)
-			return AudioStream::kUnknownPlayTime;
+	int32 getTotalPlayTime() const { return _totalPlayTime; }
 
-		int32 samples = 0;
-
-		if (!_lastSample) {
-			if (!_streaminfo.total_samples)
-				return AudioStream::kUnknownPlayTime;
-
-			samples = _streaminfo.total_samples - _firstSample;
-		} else {
-			samples = _lastSample - _firstSample - 1;
-		}
-
-		const int32 rate = _streaminfo.sample_rate;
-
-		int32 seconds = samples / rate;
-		int32 milliseconds = (1000 * (samples % rate)) / rate;
-
-		return (seconds * 1000 + milliseconds) * _totalNumLoops;
-	}
-
 	bool isStreamDecoderReady() const { return getStreamDecoderState() == FLAC__STREAM_DECODER_SEARCH_FOR_FRAME_SYNC ; }
 
 protected:
@@ -214,7 +195,6 @@
 		_inStream(inStream),
 		_disposeAfterUse(dispose),
 		_numLoops(numLoops),
-		_totalNumLoops(numLoops),
 		_firstSample(0), _lastSample(0),
 		_outBuffer(NULL), _requestedSamples(0), _lastSampleWritten(false),
 		_methodConvertBuffers(&FlacInputStream::convertBuffersGeneric)
@@ -260,7 +240,28 @@
 			// avoid overflows).
 			_firstSample = (FLAC__uint64)(startTime * (_streaminfo.sample_rate / 1000.0));
 			_lastSample = (FLAC__uint64)(endTime * (_streaminfo.sample_rate / 1000.0));
+
 			if (_firstSample == 0 || seekAbsolute(_firstSample)) {
+				int32 samples = kUnknownPlayTime;
+
+				if (!_lastSample) {
+					if (_streaminfo.total_samples)
+						samples = _streaminfo.total_samples - _firstSample;
+				} else {
+					samples = _lastSample - _firstSample - 1;
+				}
+
+				if (samples != kUnknownPlayTime && samples >= 0 && numLoops) {
+					const int32 rate = _streaminfo.sample_rate;
+
+					int32 seconds = samples / rate;
+					int32 milliseconds = (1000 * (samples % rate)) / rate;
+
+					_totalPlayTime = (seconds * 1000 + milliseconds) * numLoops;
+				} else {
+					_totalPlayTime = kUnknownPlayTime;
+				}
+
 				return; // no error occured
 			}
 		}

Modified: scummvm/trunk/sound/mp3.cpp
===================================================================
--- scummvm/trunk/sound/mp3.cpp	2008-05-27 13:15:51 UTC (rev 32322)
+++ scummvm/trunk/sound/mp3.cpp	2008-05-27 13:28:47 UTC (rev 32323)
@@ -169,11 +169,14 @@
 
 		// Reinit stream
 		_state = MP3_STATE_INIT;
+
+		// Reset the stream data
+		_inStream->seek(0, SEEK_SET);
 	}
 
 	_totalPlayTime = mad_timer_count(length, MAD_UNITS_MILLISECONDS);
 	
-	if (numLoops)
+	if (numLoops && mad_timer_sign(length) >= 0)
 		_totalPlayTime *= numLoops;
 	else
 		_totalPlayTime = kUnknownPlayTime;


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