[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