[Scummvm-cvs-logs] CVS: scummvm/scumm/smush saud_channel.cpp,1.23,1.24 smush_mixer.cpp,1.30,1.31 smush_player.cpp,1.109,1.110 smush_player.h,1.24,1.25

Eugene Sandulenko sev at users.sourceforge.net
Mon Feb 2 14:43:10 CET 2004


Update of /cvsroot/scummvm/scummvm/scumm/smush
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv22922/scumm/smush

Modified Files:
	saud_channel.cpp smush_mixer.cpp smush_player.cpp 
	smush_player.h 
Log Message:
Fixed most bugs, so only cosmetic visual things left.

o Support transparency for characters. Needed for cockpit rendering
o Fixed bug in NUT renderer which drawed transparent characters garbled 
o Fixed long-standing (and outstanding) bug with SAUD error
o Previous fix fixed music in some cases (scene transitions)
o Fixed bug with palette being reset when smush video is rewind
o Made debug level for insane adjustable at compile time (maybe I will remove it later)


Index: saud_channel.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/smush/saud_channel.cpp,v
retrieving revision 1.23
retrieving revision 1.24
diff -u -d -r1.23 -r1.24
--- saud_channel.cpp	30 Jan 2004 17:30:06 -0000	1.23
+++ saud_channel.cpp	2 Feb 2004 22:40:20 -0000	1.24
@@ -75,7 +75,7 @@
 			} else
 				return false;
 			break;
-		case TYPE_SDAT: 
+		case TYPE_SDAT:
 			_inData = true;
 			_dataSize = size;
 			offset += 8;
@@ -103,7 +103,7 @@
 	} else if (_inData) {
 		if (_dataSize < _tbufferSize) {
 			int32 offset = _dataSize;
-			while (handleSubTags(offset));
+			while (handleSubTags(offset)) ;
 			_sbufferSize = _dataSize;
 			_sbuffer = _tbuffer;
 			if (offset < _tbufferSize) {
@@ -171,12 +171,17 @@
 }
 
 SaudChannel::~SaudChannel() {
+	_dataSize = 0;
+	_tbufferSize = 0;
+	_sbufferSize = 0;
+	_markReached = true;
 	if (_tbuffer)
 		delete []_tbuffer;
 	if (_sbuffer) {
-		warning("this should never happen !!!! (_sbuffer not NULL here)");
+		// _sbuffer can be not empty here with insane when it seeks in video
 		delete []_sbuffer;
 	}
+	_sbuffer = 0;
 }
 
 bool SaudChannel::isTerminated() const {

Index: smush_mixer.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/smush/smush_mixer.cpp,v
retrieving revision 1.30
retrieving revision 1.31
diff -u -d -r1.30 -r1.31
--- smush_mixer.cpp	29 Jan 2004 18:15:27 -0000	1.30
+++ smush_mixer.cpp	2 Feb 2004 22:40:20 -0000	1.31
@@ -139,6 +139,7 @@
 			delete _channels[i].chan;
 			_channels[i].id = -1;
 			_channels[i].chan = NULL;
+			_mixer->endStream(_channels[i].handle);
 		}
 	}
 	return true;

Index: smush_player.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/smush/smush_player.cpp,v
retrieving revision 1.109
retrieving revision 1.110
diff -u -d -r1.109 -r1.110
--- smush_player.cpp	31 Jan 2004 12:28:38 -0000	1.109
+++ smush_player.cpp	2 Feb 2004 22:40:20 -0000	1.110
@@ -236,6 +236,7 @@
 	_speed = speed;
 	_insanity = false;
 	_middleAudio = false;
+	_skipPalette = false;
 }
 
 SmushPlayer::~SmushPlayer() {
@@ -657,6 +658,9 @@
 	checkBlock(b, TYPE_NPAL, 0x300);
 	debug(6, "SmushPlayer::handleNewPalette()");
 
+	if (_skipPalette)
+		return;
+
 	readPalette(_pal, b);
 	setPalette(_pal);
 }
@@ -786,7 +790,6 @@
 		delete sub;
 	}
 
-	// FIXME: Check either parameters are valid
 	if (_insanity) {
 		_vm->_insane->procPostRendering(_dst, 0, 0, 0, _frame, _nbframes-1);
 	}
@@ -808,8 +811,10 @@
 	_version = b.getWord();
 	_nbframes = b.getWord();
 	b.getWord();
-	readPalette(_pal, b);
-	setPalette(_pal);
+	if (!_skipPalette) {
+		readPalette(_pal, b);
+		setPalette(_pal);
+	}
 }
 
 void SmushPlayer::setupAnim(const char *file, const char *directory) {
@@ -972,9 +977,14 @@
 }
 
 void SmushPlayer::seekSan(const char *file, const char *directory, int32 pos, int32 contFrame) {
+	if(_smixer)
+		_smixer->stop();
+
 	if (file) {
-		if (_base)
+		if (_base) {
+			_base->seek(0, FileChunk::seek_end);
 			delete _base;
+		}
 
 		_base = new FileChunk(file, directory);
 		// In this case we need to get palette and number of frames
@@ -986,8 +996,11 @@
 		}
 		if (pos >= 8)
 			pos -= 8;
+
+		_skipPalette = false;
 	} else {
 		_base->reinit(pos);
+		_skipPalette = true;
 	}
 
 	if (pos != 8 && pos) {

Index: smush_player.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/smush/smush_player.h,v
retrieving revision 1.24
retrieving revision 1.25
diff -u -d -r1.24 -r1.25
--- smush_player.h	26 Jan 2004 22:44:47 -0000	1.24
+++ smush_player.h	2 Feb 2004 22:40:20 -0000	1.25
@@ -68,6 +68,7 @@
 	bool _updateNeeded;
 	bool _insanity;
 	bool _middleAudio;
+	bool _skipPalette;
 
 public:
 	SmushPlayer(ScummEngine_v6 *scumm, int speed);





More information about the Scummvm-git-logs mailing list