[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