[Scummvm-cvs-logs] CVS: scummvm/scumm/smush smush_player.h,1.14,1.15 smush_player.cpp,1.76,1.77
Max Horn
fingolfin at users.sourceforge.net
Sun Dec 21 10:37:02 CET 2003
Update of /cvsroot/scummvm/scummvm/scumm/smush
In directory sc8-pr-cvs1:/tmp/cvs-serv19365/smush
Modified Files:
smush_player.h smush_player.cpp
Log Message:
The rewritten Timer class actually allows us to get rid of several evil hacks in the SMUSH code (which were previously needed to avoid various race conditions/crashes/hangups)
Index: smush_player.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/smush/smush_player.h,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -d -r1.14 -r1.15
--- smush_player.h 8 Dec 2003 04:16:41 -0000 1.14
+++ smush_player.h 21 Dec 2003 18:36:20 -0000 1.15
@@ -69,8 +69,6 @@
bool _updateNeeded;
bool _insanity;
- volatile bool _smushProcessFrame;
-
public:
SmushPlayer(ScummEngine *, int, bool);
~SmushPlayer();
Index: smush_player.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/smush/smush_player.cpp,v
retrieving revision 1.76
retrieving revision 1.77
diff -u -d -r1.76 -r1.77
--- smush_player.cpp 21 Dec 2003 01:17:02 -0000 1.76
+++ smush_player.cpp 21 Dec 2003 18:36:20 -0000 1.77
@@ -205,21 +205,11 @@
return sr;
}
-SmushPlayer *player;
-
void SmushPlayer::timerCallback(void *refCon) {
- ScummEngine *scumm = (ScummEngine *)refCon;
- if (!scumm->_smushPlay)
- return;
-
- player->_smushProcessFrame = true;
- player->parseNextFrame();
- player->_smushProcessFrame = false;
+ ((SmushPlayer *)refCon)->parseNextFrame();
}
SmushPlayer::SmushPlayer(ScummEngine *scumm, int speed, bool subtitles) {
- player = this;
-
_scumm = scumm;
_version = -1;
_nbframes = 0;
@@ -243,7 +233,6 @@
_IACTpos = 0;
_soundFrequency = 22050;
_speed = speed;
- _smushProcessFrame = false;
_insanity = false;
}
@@ -266,19 +255,14 @@
_scumm->setDirtyColors(0, 255);
_smixer->_silentMixer = _scumm->_silentDigitalImuse;
- _scumm->_smushPlay = true;
_dst = _scumm->virtscr[0].screenPtr + _scumm->virtscr[0].xstart;
- _scumm->_timer->installTimerProc(&timerCallback, _speed, _scumm);
+ g_timer->installTimerProc(&timerCallback, _speed, this);
_alreadyInit = false;
}
void SmushPlayer::deinit() {
_scumm->_timer->removeTimerProc(&timerCallback);
- _scumm->_smushPlay = false;
- // In case the timerCallback is active right now, we loop till it finishes.
- // Note: even this still leaves a window for race conditions to occur.
- while (_smushProcessFrame) {}
for (int i = 0; i < 5; i++) {
if (_sf[i]) {
More information about the Scummvm-git-logs
mailing list