[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