[Scummvm-cvs-logs] CVS: scummvm/sword1 music.cpp,1.33,1.34 music.h,1.13,1.14

Robert Göffringmann lavosspawn at users.sourceforge.net
Fri Dec 10 10:59:08 CET 2004


Update of /cvsroot/scummvm/scummvm/sword1
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv6111/sword1

Modified Files:
	music.cpp music.h 
Log Message:
unify pc/palm sourcecode

Index: music.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sword1/music.cpp,v
retrieving revision 1.33
retrieving revision 1.34
diff -u -d -r1.33 -r1.34
--- music.cpp	10 Dec 2004 15:11:53 -0000	1.33
+++ music.cpp	10 Dec 2004 18:26:08 -0000	1.34
@@ -27,6 +27,8 @@
 #include "sound/mp3.h"
 #include "sound/vorbis.h"
 
+#define SMP_BUFSIZE 8192
+
 namespace Sword1 {
 
 WaveAudioStream *makeWaveStream(File *source, uint32 size) {
@@ -38,6 +40,7 @@
 	uint8 wavHeader[WAVEHEADERSIZE];
 
 	_sourceFile = source;
+	_sampleBuf = (uint8*)malloc(SMP_BUFSIZE);
 	_sourceFile->incRef();
 	if (_sourceFile->isOpen()) {
 		_sourceFile->read(wavHeader, WAVEHEADERSIZE);
@@ -58,41 +61,32 @@
 }
 
 WaveAudioStream::~WaveAudioStream(void) {
+	free(_sampleBuf);
 	_sourceFile->decRef();
 }
 
 int WaveAudioStream::readBuffer(int16 *buffer, const int numSamples) {
 	int samples = ((int)_samplesLeft < numSamples) ? (int)_samplesLeft : numSamples;
+	int retVal = samples;
 
-#ifdef __PALM_OS__
-	int cnt = samples;
-	int size = (_bitsPerSample == 16 ? samples * 2 : samples);
-	void *sound = malloc(size);
-	
-	_sourceFile->read(sound, size);
-
-	if (_bitsPerSample == 16) {
-		int16 *src = (int16 *)sound;
-		while(cnt--)
-			*buffer++ = (int16)READ_LE_UINT16(src++);
-
-	} else {
-		int8 *src = (int8 *)sound;
-		while(cnt--)
-			*buffer++ = (int16)*src++ << 8;
+	while (samples > 0) {
+		int readBytes = (samples * (_bitsPerSample >> 3) > SMP_BUFSIZE) ? SMP_BUFSIZE : samples * (_bitsPerSample >> 3);
+		_sourceFile->read(_sampleBuf, readBytes);
+		if (_bitsPerSample == 16) {
+			readBytes >>= 1;
+			samples -= readBytes;
+			int16 *src = (int16*)_sampleBuf;
+			while (readBytes--)
+				*buffer++ = (int16)READ_LE_UINT16(src++);
+		} else {
+			samples -= readBytes;
+			int8 *src = (int8*)_sampleBuf;
+			while (readBytes--)
+				*buffer++ = (int16)*src++ << 8;
+		}
 	}
-
-	free(sound);
-#else
-	if (_bitsPerSample == 16)
-		for (int cnt = 0; cnt < samples; cnt++)
-			*buffer++ = (int16)_sourceFile->readUint16LE();
-	else
-		for (int cnt = 0; cnt < samples; cnt++)
-			*buffer++ = (int16)_sourceFile->readByte() << 8;
-#endif
-	_samplesLeft -= samples;
-	return samples;
+	_samplesLeft -= retVal;
+	return retVal;
 }
 
 bool WaveAudioStream::endOfData(void) const {

Index: music.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sword1/music.h,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -d -r1.13 -r1.14
--- music.h	27 Nov 2004 16:18:25 -0000	1.13
+++ music.h	10 Dec 2004 18:26:08 -0000	1.14
@@ -53,6 +53,7 @@
 	virtual int getRate(void) const { return _rate; };
 private:
 	File	*_sourceFile;
+	uint8	*_sampleBuf;
 	uint32	 _rate;
 	bool	 _isStereo;
 	uint32   _samplesLeft;





More information about the Scummvm-git-logs mailing list