[Scummvm-cvs-logs] SF.net SVN: scummvm:[48019] scummvm/trunk/test/sound/audiostream.h

lordhoto at users.sourceforge.net lordhoto at users.sourceforge.net
Tue Feb 9 22:52:08 CET 2010


Revision: 48019
          http://scummvm.svn.sourceforge.net/scummvm/?rev=48019&view=rev
Author:   lordhoto
Date:     2010-02-09 21:52:08 +0000 (Tue, 09 Feb 2010)

Log Message:
-----------
Add some additional tests for SubLoopingAudioStream and LoopingAudioStream. (Currently SubLoopingAudioStream tests fail for a reason unknown to me...)

Modified Paths:
--------------
    scummvm/trunk/test/sound/audiostream.h

Modified: scummvm/trunk/test/sound/audiostream.h
===================================================================
--- scummvm/trunk/test/sound/audiostream.h	2010-02-09 21:51:47 UTC (rev 48018)
+++ scummvm/trunk/test/sound/audiostream.h	2010-02-09 21:52:08 UTC (rev 48019)
@@ -101,51 +101,64 @@
 	}
 
 public:
-	void test_looping_audio_stream_mono_fixed_iter() {
+	void test_looping_audio_stream_mono_11025_fixed_iter() {
+		testLoopingAudioStreamFixedIter(11025, false);
+	}
+
+	void test_looping_audio_stream_mono_22050_fixed_iter() {
 		testLoopingAudioStreamFixedIter(22050, false);
 	}
 
-	void test_looping_audio_stream_stereo_fixed_iter() {
+	void test_looping_audio_stream_stereo_11025_fixed_iter() {
+		testLoopingAudioStreamFixedIter(11025, true);
+	}
+
+	void test_looping_audio_stream_stereo_22050_fixed_iter() {
 		testLoopingAudioStreamFixedIter(22050, true);
 	}
 
 private:
-	void testSubLoopingAudioStreamFixedIter(const int sampleRate, const bool isStereo) {
+	void testSubLoopingAudioStreamFixedIter(const int sampleRate, const bool isStereo, const int time, const int loopEndTime) {
 		const int secondLength = sampleRate * (isStereo ? 2 : 1);
-		const Audio::Timestamp loopStart(500, 1000), loopEnd(1000, 1000);
-		const int32 loopOffset = Audio::convertTimeToStreamPos(loopStart, sampleRate, isStereo).totalNumberOfFrames();
-		const int32 loopIteration = Audio::convertTimeToStreamPos((loopEnd - loopStart), sampleRate, isStereo).totalNumberOfFrames();
 
+		const Audio::Timestamp loopStart(500, 1000), loopEnd(loopEndTime * 1000, 1000);
+
+		const int32 loopStartPos = Audio::convertTimeToStreamPos(loopStart, sampleRate, isStereo).totalNumberOfFrames();
+		const int32 loopEndPos = Audio::convertTimeToStreamPos(loopEnd, sampleRate, isStereo).totalNumberOfFrames();
+
+		const int32 loopIteration = loopEndPos - loopStartPos;
+
 		int16 *sine = 0;
-		Audio::SeekableAudioStream *s = createSineStream<int16>(sampleRate, 3, &sine, false, isStereo);
+		Audio::SeekableAudioStream *s = createSineStream<int16>(sampleRate, time, &sine, false, isStereo);
 		Audio::SubLoopingAudioStream *loop = new Audio::SubLoopingAudioStream(s, 5, loopStart, loopEnd);
 
-		int16 *buffer = new int16[secondLength * 2];
+		const int32 bufferLen = MAX<int32>(loopIteration * 3, loopEndPos);
+		int16 *buffer = new int16[bufferLen];
 
 		// Check parameters
 		TS_ASSERT_EQUALS(loop->isStereo(), isStereo);
 		TS_ASSERT_EQUALS(loop->getRate(), sampleRate);
 		TS_ASSERT_EQUALS(loop->endOfData(), false);
 
-		// Read one sceond (this is the non-looped part + one iteration)
-		TS_ASSERT_EQUALS(loop->readBuffer(buffer, secondLength), secondLength);
-		TS_ASSERT_EQUALS(memcmp(buffer, sine, secondLength * sizeof(int16)), 0);
+		// Read the non-looped part + one iteration
+		TS_ASSERT_EQUALS(loop->readBuffer(buffer, loopEndPos), loopEndPos);
+		TS_ASSERT_EQUALS(memcmp(buffer, sine, loopEndPos * sizeof(int16)), 0);
 		TS_ASSERT_EQUALS(loop->endOfData(), false);
 
 		// We should have one full iteration now
 
 		// Read another loop iteration
 		TS_ASSERT_EQUALS(loop->readBuffer(buffer, loopIteration), loopIteration);
-		TS_ASSERT_EQUALS(memcmp(buffer, sine + loopOffset, loopIteration * sizeof(int16)), 0);
+		TS_ASSERT_EQUALS(memcmp(buffer, sine + loopStartPos, loopIteration * sizeof(int16)), 0);
 		TS_ASSERT_EQUALS(loop->endOfData(), false);
 
 		// We should have two full iterations now
 
 		// Read three loop iterations at once
 		TS_ASSERT_EQUALS(loop->readBuffer(buffer, loopIteration * 3), loopIteration * 3);
-		TS_ASSERT_EQUALS(memcmp(buffer + loopIteration * 0, sine + loopOffset, loopIteration * sizeof(int16)), 0);
-		TS_ASSERT_EQUALS(memcmp(buffer + loopIteration * 1, sine + loopOffset, loopIteration * sizeof(int16)), 0);
-		TS_ASSERT_EQUALS(memcmp(buffer + loopIteration * 2, sine + loopOffset, loopIteration * sizeof(int16)), 0);
+		TS_ASSERT_EQUALS(memcmp(buffer + loopIteration * 0, sine + loopStartPos, loopIteration * sizeof(int16)), 0);
+		TS_ASSERT_EQUALS(memcmp(buffer + loopIteration * 1, sine + loopStartPos, loopIteration * sizeof(int16)), 0);
+		TS_ASSERT_EQUALS(memcmp(buffer + loopIteration * 2, sine + loopStartPos, loopIteration * sizeof(int16)), 0);
 		TS_ASSERT_EQUALS(loop->endOfData(), true);
 
 		// We should have five full iterations now, thus the stream should be done
@@ -161,12 +174,36 @@
 	}
 
 public:
-	void test_sub_looping_audio_stream_mono_fixed_iter() {
-		testSubLoopingAudioStreamFixedIter(22050, false);
+	void test_sub_looping_audio_stream_mono_11025_mid_fixed_iter() {
+		testSubLoopingAudioStreamFixedIter(11025, false, 2, 1);
 	}
 
-	void test_sub_looping_audio_stream_stereo_fixed_iter() {
-		testSubLoopingAudioStreamFixedIter(22050, true);
+	void test_sub_looping_audio_stream_mono_22050_mid_fixed_iter() {
+		testSubLoopingAudioStreamFixedIter(22050, false, 2, 1);
 	}
+
+	void test_sub_looping_audio_stream_stereo_11025_mid_fixed_iter() {
+		testSubLoopingAudioStreamFixedIter(11025, true, 2, 1);
+	}
+
+	void test_sub_looping_audio_stream_stereo_22050_mid_fixed_iter() {
+		testSubLoopingAudioStreamFixedIter(22050, true, 2, 1);
+	}
+
+	void test_sub_looping_audio_stream_mono_11025_end_fixed_iter() {
+		testSubLoopingAudioStreamFixedIter(11025, false, 2, 2);
+	}
+
+	void test_sub_looping_audio_stream_mono_22050_end_fixed_iter() {
+		testSubLoopingAudioStreamFixedIter(22050, false, 2, 2);
+	}
+
+	void test_sub_looping_audio_stream_stereo_11025_end_fixed_iter() {
+		testSubLoopingAudioStreamFixedIter(11025, true, 2, 2);
+	}
+
+	void test_sub_looping_audio_stream_stereo_22050_end_fixed_iter() {
+		testSubLoopingAudioStreamFixedIter(22050, true, 2, 2);
+	}
 };
 


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