[Scummvm-cvs-logs] SF.net SVN: scummvm:[39149] scummvm/trunk/engines/sci/sfx/player/polled.cpp

fingolfin at users.sourceforge.net fingolfin at users.sourceforge.net
Fri Mar 6 08:25:15 CET 2009


Revision: 39149
          http://scummvm.svn.sourceforge.net/scummvm/?rev=39149&view=rev
Author:   fingolfin
Date:     2009-03-06 07:25:15 +0000 (Fri, 06 Mar 2009)

Log Message:
-----------
SCI: Restructured PolledPlayerAudioStream::readBuffer a bit

Modified Paths:
--------------
    scummvm/trunk/engines/sci/sfx/player/polled.cpp

Modified: scummvm/trunk/engines/sci/sfx/player/polled.cpp
===================================================================
--- scummvm/trunk/engines/sci/sfx/player/polled.cpp	2009-03-06 07:25:06 UTC (rev 39148)
+++ scummvm/trunk/engines/sci/sfx/player/polled.cpp	2009-03-06 07:25:15 UTC (rev 39149)
@@ -149,15 +149,14 @@
 	// timestamp could be adjusted for pauses in sound processing. And it would
 	// be synced for all audio streams.
 	Audio::Timestamp timestamp(g_system->getMillis(), _conf.rate);
+	_time = timestamp;
 
-	int channels, frames_req;
+	const int channels = _conf.stereo == SFX_PCM_MONO ? 1 : 2;
+	const int frames_req = numSamples / channels;
 	int frames_recv = 0;
 
-	_time = timestamp;
-	channels = _conf.stereo == SFX_PCM_MONO ? 1 : 2;
-	frames_req = numSamples / channels;
-
 	while (frames_req != frames_recv) {
+		int frames = 0;
 		int frames_left = frames_req - frames_recv;
 		byte *buf_pos = ((byte *)buffer) + frames_recv * channels * 2;
 
@@ -165,35 +164,26 @@
 			queryTimestamp();
 
 		if (_mode == FEED_MODE_IDLE) {
-			memset(buf_pos, 0, frames_left * channels * 2);
-
-			_time = _time.addFrames(frames_left);
-			break;
-		}
-
-		if (_gap) {
-			int frames = _gap;
-
-			if (frames > frames_left)
-				frames = frames_left;
-
+			frames = frames_left;
 			memset(buf_pos, 0, frames * channels * 2);
 
+		} else if (_gap) {
+			frames = MIN(_gap, frames_left);
 			_gap -= frames;
-			frames_recv += frames;
-			_time = _time.addFrames(frames);
+			memset(buf_pos, 0, frames * channels * 2);
+
 		} else {
-			int frames = ppf_poll(channels * ((_conf.format & SFX_PCM_FORMAT_16) ? 2 : 1), buf_pos, frames_left);
+			frames = ppf_poll(channels * ((_conf.format & SFX_PCM_FORMAT_16) ? 2 : 1), buf_pos, frames_left);
 
 			if (_conf.format == SFX_PCM_FORMAT_U8)
 				U8_to_S16(buf_pos, frames * channels);
 
-			frames_recv += frames;
-			_time = _time.addFrames(frames);
-
 			if (frames < frames_left)
-				queryTimestamp();
+				_mode = FEED_MODE_IDLE;
 		}
+
+		frames_recv += frames;
+		_time = _time.addFrames(frames);
 	}
 
 	return numSamples;


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