[Scummvm-cvs-logs] CVS: scummvm/sound audiostream.cpp,1.24,1.25

Max Horn fingolfin at users.sourceforge.net
Mon Aug 4 17:51:04 CEST 2003


Update of /cvsroot/scummvm/scummvm/sound
In directory sc8-pr-cvs1:/tmp/cvs-serv25655

Modified Files:
	audiostream.cpp 
Log Message:
optimized WrappedMemoryStream::readBuffer (It's almost 3 AM, so I don't trust myself, hence I'll leave this as an #ifdef for now :-)

Index: audiostream.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sound/audiostream.cpp,v
retrieving revision 1.24
retrieving revision 1.25
diff -u -d -r1.24 -r1.25
--- audiostream.cpp	5 Aug 2003 00:31:00 -0000	1.24
+++ audiostream.cpp	5 Aug 2003 00:50:15 -0000	1.25
@@ -72,9 +72,10 @@
 		int samples = 0;
 		while (samples < numSamples && !eosIntern()) {
 			const int len = MIN(numSamples, (_end - _ptr) / (is16Bit ? 2 : 1));
-			for (; samples < len; samples++) {
+			while (samples < len) {
 				*buffer++ = readSample<is16Bit, isUnsigned>(_ptr);
 				_ptr += (is16Bit ? 2 : 1);
+				samples++;
 			}
 			if (_loopPtr && _ptr == _end) {
 				_ptr = _loopPtr;
@@ -143,10 +144,26 @@
 
 template<bool stereo, bool is16Bit, bool isUnsigned>
 int WrappedMemoryStream<stereo, is16Bit, isUnsigned>::readBuffer(int16 *buffer, int numSamples) {
-	int samples;
+	int samples = 0;
+#if 1
+	for (int i = (_pos > _end) ? 0 : 1; i < 2 && samples < numSamples && !eosIntern(); i++) {
+		const byte *endMarker = (i == 0) ? _bufferEnd : _end;
+		const int len = MIN(numSamples, (endMarker - _pos) / (is16Bit ? 2 : 1));
+
+		while (samples < len) {
+			*buffer++ = readSample<is16Bit, isUnsigned>(_pos);
+			_pos += (is16Bit ? 2 : 1);
+			samples++;
+		}
+		// Wrap around?
+		if (_pos >= _bufferEnd)
+			_pos = _pos - (_bufferEnd - _bufferStart);
+	}
+#else
 	for (samples = 0; samples < numSamples && !eosIntern(); samples++) {
 		*buffer++ = readIntern();
 	}
+#endif
 	return samples;
 }
 





More information about the Scummvm-git-logs mailing list