[Scummvm-cvs-logs] CVS: scummvm/scumm/smush player.cpp,1.35,1.36 player.h,1.11,1.12

Pawel Kolodziejski aquadran at users.sourceforge.net
Sun Jan 19 12:29:01 CET 2003


Update of /cvsroot/scummvm/scummvm/scumm/smush
In directory sc8-pr-cvs1:/tmp/cvs-serv31840

Modified Files:
	player.cpp player.h 
Log Message:
implemented missing smush opcodes - STOR and FTCH

Index: player.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/smush/player.cpp,v
retrieving revision 1.35
retrieving revision 1.36
diff -u -d -r1.35 -r1.36
--- player.cpp	19 Jan 2003 19:40:40 -0000	1.35
+++ player.cpp	19 Jan 2003 20:28:16 -0000	1.36
@@ -202,7 +202,9 @@
 							_voices(true),
 							_curBuffer(0),
 							_IACTchannel(-1),
-							_IACTpos(0) {
+							_IACTpos(0),
+							_storeFrame(false),
+							_frameBuffer(NULL) {
 	_fr[0] = _fr[1] = _fr[2] = _fr[3] = _fr[4] = 0;
 	assert(_renderer != 0);
 }
@@ -223,6 +225,10 @@
 	if(_fr[2]) delete _fr[2];
 	if(_fr[3]) delete _fr[3];
 	if(_fr[4]) delete _fr[4];
+
+	if (_frameBuffer != NULL) {
+		free(_frameBuffer);
+	}
 }
 
 void SmushPlayer::checkBlock(const Chunk & b, Chunk::type type_expected, uint32 min_size) {
@@ -288,12 +294,21 @@
 
 void SmushPlayer::handleStore(Chunk & b) {
 	checkBlock(b, TYPE_STOR, 4);
+	_storeFrame = true;
 	debug(6, "SmushPlayer::handleStore()");
 }
 
 void SmushPlayer::handleFetch(Chunk & b) {
 	checkBlock(b, TYPE_FTCH, 6);
 	debug(6, "SmushPlayer::handleFetch()");
+
+	if(_curBuffer == NULL) {
+		_curBuffer = _renderer->lockFrame(_frame);
+	}
+
+	if (_frameBuffer != NULL) {
+		memcpy(_curBuffer, _frameBuffer, _frameSize.getX() * _frameSize.getY());
+	}
 }
 
 void SmushPlayer::handleImuseBuffer(int32 track_id, int32 index, int32 nbframes, int32 size, int32 unk1, int32 track_flags, Chunk & b, int32 bsize) {
@@ -577,6 +592,13 @@
 	assert(_curBuffer);
 	Blitter blit((byte*)_curBuffer, _frameSize, r);
 	codec.decode(blit, b);
+	if (_storeFrame == true) {
+		if (_frameBuffer == NULL) {
+			_frameBuffer = (byte*)malloc(_frameSize.getX() * _frameSize.getY());
+		}
+		memcpy(_frameBuffer, _curBuffer, _frameSize.getX() * _frameSize.getY());
+		_storeFrame = false;
+	}
 }
 
 void SmushPlayer::initSize(const Rect & r, bool always, bool transparent) {

Index: player.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/smush/player.h,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -d -r1.11 -r1.12
--- player.h	19 Jan 2003 10:34:18 -0000	1.11
+++ player.h	19 Jan 2003 20:28:16 -0000	1.12
@@ -73,6 +73,8 @@
 	int32 _IACTchannel;
 	byte _IACToutput[4096];
 	int32 _IACTpos;
+	bool _storeFrame;
+	byte *_frameBuffer;
 
 public:
 	SmushPlayer(Renderer *, bool wait = true, bool output_sound = true);





More information about the Scummvm-git-logs mailing list