[Scummvm-cvs-logs] SF.net SVN: scummvm: [24263] scummvm/trunk/engines/scumm
aquadran at users.sourceforge.net
aquadran at users.sourceforge.net
Tue Oct 10 14:16:39 CEST 2006
Revision: 24263
http://svn.sourceforge.net/scummvm/?rev=24263&view=rev
Author: aquadran
Date: 2006-10-10 05:16:21 -0700 (Tue, 10 Oct 2006)
Log Message:
-----------
now SmushPlayer is class created once same as SmushMixer while scumm engine creation. this allow finish play smush audio track finished to the end instead immediately stopped as it was happen before
Modified Paths:
--------------
scummvm/trunk/engines/scumm/insane/insane.cpp
scummvm/trunk/engines/scumm/insane/insane_scenes.cpp
scummvm/trunk/engines/scumm/intern.h
scummvm/trunk/engines/scumm/script_v6.cpp
scummvm/trunk/engines/scumm/script_v8.cpp
scummvm/trunk/engines/scumm/scumm.cpp
scummvm/trunk/engines/scumm/smush/smush_player.cpp
scummvm/trunk/engines/scumm/smush/smush_player.h
Modified: scummvm/trunk/engines/scumm/insane/insane.cpp
===================================================================
--- scummvm/trunk/engines/scumm/insane/insane.cpp 2006-10-10 12:13:47 UTC (rev 24262)
+++ scummvm/trunk/engines/scumm/insane/insane.cpp 2006-10-10 12:16:21 UTC (rev 24263)
@@ -620,7 +620,7 @@
smush_setupSanFromStart(filename, 0, -1, -1, 0);
}
- _player->play(filename, offset, startFrame);
+ _player->play(filename, _speed, offset, startFrame);
}
void Insane::smush_warpMouse(int x, int y, int buttons) {
Modified: scummvm/trunk/engines/scumm/insane/insane_scenes.cpp
===================================================================
--- scummvm/trunk/engines/scumm/insane/insane_scenes.cpp 2006-10-10 12:13:47 UTC (rev 24262)
+++ scummvm/trunk/engines/scumm/insane/insane_scenes.cpp 2006-10-10 12:16:21 UTC (rev 24263)
@@ -36,7 +36,7 @@
void Insane::runScene(int arraynum) {
_insaneIsRunning = true;
- _player = new SmushPlayer(_vm, _speed);
+ _player = _vm->_splayer;
_player->insanity(true);
_numberArray = arraynum;
@@ -170,8 +170,6 @@
}
// insane_unlock(); // FIXME
_vm->_sound->stopAllSounds(); // IMUSE_StopAllSounds();
-
- delete _player;
}
int Insane::initScene(int sceneId) {
Modified: scummvm/trunk/engines/scumm/intern.h
===================================================================
--- scummvm/trunk/engines/scumm/intern.h 2006-10-10 12:13:47 UTC (rev 24262)
+++ scummvm/trunk/engines/scumm/intern.h 2006-10-10 12:16:21 UTC (rev 24263)
@@ -30,6 +30,7 @@
class Insane;
class SmushMixer;
+class SmushPlayer;
// This is to help devices with small memory (PDA, smartphones, ...)
// to save abit of memory used by opcode names in the Scumm engine.
@@ -598,6 +599,7 @@
bool _insaneRunning; // Used by IMuseDigital::flushTracks()
SmushMixer *_smixer;
+ SmushPlayer *_splayer;
public:
ScummEngine_v6(OSystem *syst, const DetectorResult &dr);
Modified: scummvm/trunk/engines/scumm/script_v6.cpp
===================================================================
--- scummvm/trunk/engines/scumm/script_v6.cpp 2006-10-10 12:13:47 UTC (rev 24262)
+++ scummvm/trunk/engines/scumm/script_v6.cpp 2006-10-10 12:16:21 UTC (rev 24263)
@@ -2526,15 +2526,12 @@
if (strcmp((char *)getStringAddressVar(VAR_VIDEONAME), "sq3.san") == 0)
_smushFrameRate = 14;
- SmushPlayer *sp = new SmushPlayer((ScummEngine_v7 *)this, _smushFrameRate);
-
// Correct incorrect smush filename in Macintosh FT demo
if ((_game.id == GID_FT) && (_game.features & GF_DEMO) && (_game.platform == Common::kPlatformMacintosh) &&
(strcmp((char *)getStringAddressVar(VAR_VIDEONAME), "jumpgorge.san") == 0))
- sp->play("jumpgorg.san");
+ _splayer->play("jumpgorg.san", _smushFrameRate);
else
- sp->play((char *)getStringAddressVar(VAR_VIDEONAME));
- delete sp;
+ _splayer->play((char *)getStringAddressVar(VAR_VIDEONAME), _smushFrameRate);
if (_game.id == GID_DIG) {
_disableFadeInEffect = true;
Modified: scummvm/trunk/engines/scumm/script_v8.cpp
===================================================================
--- scummvm/trunk/engines/scumm/script_v8.cpp 2006-10-10 12:13:47 UTC (rev 24262)
+++ scummvm/trunk/engines/scumm/script_v8.cpp 2006-10-10 12:16:21 UTC (rev 24263)
@@ -1176,9 +1176,7 @@
void ScummEngine_v8::o8_startVideo() {
int len = resStrLen(_scriptPointer);
- SmushPlayer *sp = new SmushPlayer(this, 12);
- sp->play((const char*)_scriptPointer);
- delete sp;
+ _splayer->play((const char*)_scriptPointer, 12);
_scriptPointer += len + 1;
}
Modified: scummvm/trunk/engines/scumm/scumm.cpp
===================================================================
--- scummvm/trunk/engines/scumm/scumm.cpp 2006-10-10 12:13:47 UTC (rev 24262)
+++ scummvm/trunk/engines/scumm/scumm.cpp 2006-10-10 12:16:21 UTC (rev 24263)
@@ -42,6 +42,7 @@
#include "scumm/imuse/imuse.h"
#include "scumm/imuse_digi/dimuse.h"
#include "scumm/smush/smush_mixer.h"
+#include "scumm/smush/smush_player.h"
#include "scumm/insane/insane.h"
#include "scumm/intern.h"
#include "scumm/he/animation_he.h"
@@ -779,6 +780,7 @@
_smushActive = false;
_insaneRunning = false;
_smixer = NULL;
+ _splayer = NULL;
_existLanguageFile = false;
_languageBuffer = NULL;
@@ -791,6 +793,10 @@
_smixer->stop();
delete _smixer;
}
+ if (_splayer) {
+ _splayer->release();
+ delete _splayer;
+ }
free(_languageBuffer);
free(_languageIndex);
@@ -1107,6 +1113,8 @@
_insane = 0;
_smixer = new SmushMixer(_mixer);
+
+ _splayer = new SmushPlayer(this);
}
#endif
Modified: scummvm/trunk/engines/scumm/smush/smush_player.cpp
===================================================================
--- scummvm/trunk/engines/scumm/smush/smush_player.cpp 2006-10-10 12:13:47 UTC (rev 24262)
+++ scummvm/trunk/engines/scumm/smush/smush_player.cpp 2006-10-10 12:16:21 UTC (rev 24263)
@@ -235,11 +235,11 @@
#endif
}
-SmushPlayer::SmushPlayer(ScummEngine_v7 *scumm, int speed) {
+SmushPlayer::SmushPlayer(ScummEngine_v7 *scumm) {
_vm = scumm;
_version = -1;
_nbframes = 0;
- _smixer = 0;
+ _smixer = NULL;
_strings = NULL;
_sf[0] = NULL;
_sf[1] = NULL;
@@ -261,7 +261,7 @@
_IACTpos = 0;
_soundFrequency = 22050;
_initDone = false;
- _speed = speed;
+ _speed = -1;
_insanity = false;
_middleAudio = false;
_skipPalette = false;
@@ -278,12 +278,13 @@
}
SmushPlayer::~SmushPlayer() {
- release();
}
-void SmushPlayer::init() {
+void SmushPlayer::init(int32 speed) {
_frame = 0;
+ _speed = speed;
_alreadyInit = false;
+ _endOfFile = false;
_vm->_smushVideoShouldFinish = false;
_vm->_smushActive = true;
@@ -302,6 +303,8 @@
_vm->virtscr[0].pitch = _vm->virtscr[0].w;
_vm->_gdi->_numStrips = _vm->virtscr[0].w / 8;
+ _vm->_mixer->stopHandle(_compressedFileSoundHandle);
+ _vm->_mixer->stopHandle(_IACTchannel);
_vm->_smixer->stop();
Common::g_timer->installTimerProc(&timerCallback, 1000000 / _speed, this);
@@ -340,9 +343,6 @@
free(_frameBuffer);
_frameBuffer = NULL;
- _vm->_mixer->stopHandle(_compressedFileSoundHandle);
-
- _vm->_mixer->stopHandle(_IACTchannel);
_IACTstream = NULL;
_vm->_smushActive = false;
@@ -1115,6 +1115,7 @@
assert(_base);
if (_base->eof()) {
_vm->_smushVideoShouldFinish = true;
+ _endOfFile = true;
return;
}
@@ -1273,7 +1274,7 @@
#endif
}
-void SmushPlayer::play(const char *filename, int32 offset, int32 startFrame) {
+void SmushPlayer::play(const char *filename, int32 speed, int32 offset, int32 startFrame) {
// Verify the specified file exists
ScummFile f;
@@ -1299,7 +1300,7 @@
_base = 0;
setupAnim(filename);
- init();
+ init(speed);
for (;;) {
if (_warpNeeded) {
@@ -1345,12 +1346,14 @@
_inTimerCount = 0;
#endif
}
- if (_vm->_quit || _vm->_saveLoadFlag) {
+ if (_endOfFile)
+ break;
+ if (_vm->_quit || _vm->_saveLoadFlag || _vm->_smushVideoShouldFinish) {
_smixer->stop();
+ _vm->_mixer->stopHandle(_compressedFileSoundHandle);
+ _vm->_mixer->stopHandle(_IACTchannel);
break;
}
- if (_vm->_smushVideoShouldFinish || _vm->_quit || _vm->_saveLoadFlag)
- break;
_vm->_system->delayMillis(10);
}
Modified: scummvm/trunk/engines/scumm/smush/smush_player.h
===================================================================
--- scummvm/trunk/engines/scumm/smush/smush_player.h 2006-10-10 12:13:47 UTC (rev 24262)
+++ scummvm/trunk/engines/scumm/smush/smush_player.h 2006-10-10 12:16:21 UTC (rev 24263)
@@ -73,6 +73,7 @@
bool _initDone;
int _speed;
bool _outputSound;
+ bool _endOfFile;
byte *_dst;
bool _updateNeeded;
@@ -94,10 +95,11 @@
Common::Mutex _mutex;
public:
- SmushPlayer(ScummEngine_v7 *scumm, int speed);
+ SmushPlayer(ScummEngine_v7 *scumm);
~SmushPlayer();
- void play(const char *filename, int32 offset = 0, int32 startFrame = 0);
+ void play(const char *filename, int32 speed, int32 offset = 0, int32 startFrame = 0);
+ void release();
void warpMouse(int x, int y, int buttons);
protected:
@@ -115,8 +117,7 @@
private:
void parseNextFrame();
- void init();
- void release();
+ void init(int32 spped);
void setupAnim(const char *file);
void updateScreen();
void tryCmpFile(const char *filename);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Scummvm-git-logs
mailing list