smush: update sync
svn-id: r4727
This commit is contained in:
parent
b6091fd7c5
commit
c6559e1ebd
2 changed files with 54 additions and 31 deletions
61
insane.cpp
61
insane.cpp
|
@ -31,8 +31,6 @@
|
|||
#include "scumm.h"
|
||||
#include "smush.h"
|
||||
|
||||
#define MAX_STREAMER 10
|
||||
|
||||
static SmushPlayer * h_sp;
|
||||
|
||||
SmushPlayer::SmushPlayer(Scumm * parent) {
|
||||
|
@ -597,14 +595,10 @@ void SmushPlayer::parseIACT() {
|
|||
debug(3, "trk %d: iMUSE play part, len 0x%x rate %d remain 0x%x",
|
||||
trk, bpos, _imusRate[idx], _imusSubSize[idx]);
|
||||
|
||||
if (new_mixer) {
|
||||
g_mixer->play_stream(NULL, idx, buf, bpos, _imusRate[idx], flags);
|
||||
} else {
|
||||
g_mixer->append(idx, buf, bpos, _imusRate[idx], flags);
|
||||
}
|
||||
|
||||
/* FIXME: append with re-used idx may cause problems
|
||||
with signed/unsigned issues */
|
||||
_imusBuf[idx] = buf;
|
||||
_imusFinalSize[idx] = bpos;
|
||||
_imusFlags[idx] = flags;
|
||||
_imusNewMixer[idx] = new_mixer;
|
||||
|
||||
break;
|
||||
default:
|
||||
|
@ -1254,13 +1248,9 @@ void SmushPlayer::parsePSAD() { // FIXME: Needs to append to a sound buffer
|
|||
|
||||
debug(3, "trk %d: SDAT part len 0x%x rate %d", trk, sublen, _strkRate[idx]);
|
||||
|
||||
if (new_mixer) {
|
||||
g_mixer->play_stream(NULL, idx, buf, sublen, _strkRate[idx],
|
||||
SoundMixer::FLAG_UNSIGNED | SoundMixer::FLAG_AUTOFREE);
|
||||
} else {
|
||||
g_mixer->append(idx, buf, sublen,
|
||||
_strkRate[idx], SoundMixer::FLAG_UNSIGNED | SoundMixer::FLAG_AUTOFREE);
|
||||
}
|
||||
_strkBuf[idx] = buf;
|
||||
_strkFinalSize[idx] = sublen;
|
||||
_strkNewMixer[idx] = new_mixer;
|
||||
break;
|
||||
case 'SMRK':
|
||||
_psadTrk[idx] = 0;
|
||||
|
@ -1377,7 +1367,7 @@ void SmushPlayer::init() {
|
|||
loadTres();
|
||||
loadFonts();
|
||||
}
|
||||
_scumm->_timer->installProcedure(&smush_handler, 83);
|
||||
_scumm->_timer->installProcedure(&smush_handler, 75);
|
||||
}
|
||||
|
||||
void SmushPlayer::deinit() {
|
||||
|
@ -1423,6 +1413,7 @@ void SmushPlayer::update() {
|
|||
|
||||
void SmushPlayer::startVideo(short int arg, byte *videoFile) {
|
||||
int32 frameIndex = 0;
|
||||
int32 idx;
|
||||
|
||||
_in = NULL;
|
||||
_paletteChanged = false;
|
||||
|
@ -1467,6 +1458,35 @@ void SmushPlayer::startVideo(short int arg, byte *videoFile) {
|
|||
parseTag();
|
||||
frameIndex++;
|
||||
|
||||
do {
|
||||
_scumm->waitForTimer(1);
|
||||
} while (_lock);
|
||||
_lock = true;
|
||||
|
||||
if (_scumm->_gameId == GID_DIG) {
|
||||
for (idx = 0; idx < MAX_STREAMER; idx++) {
|
||||
if (_imusTrk[idx] != 0) {
|
||||
if (_imusNewMixer[idx]) {
|
||||
g_mixer->play_stream(NULL, idx, _imusBuf[idx], _imusFinalSize[idx], _imusRate[idx], _imusFlags[idx]);
|
||||
} else {
|
||||
g_mixer->append(idx, _imusBuf[idx], _imusFinalSize[idx], _imusRate[idx], _imusFlags[idx]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (_scumm->_gameId == GID_FT) {
|
||||
for (idx = 0; idx < MAX_STREAMER; idx++) {
|
||||
if (_psadTrk[idx] != 0) {
|
||||
if (_strkNewMixer) {
|
||||
g_mixer->play_stream(NULL, idx, _strkBuf[idx], _strkFinalSize[idx], _strkRate[idx], SoundMixer::FLAG_UNSIGNED | SoundMixer::FLAG_AUTOFREE);
|
||||
} else {
|
||||
g_mixer->append(idx, _strkBuf[idx], _strkFinalSize[idx], _strkRate[idx], SoundMixer::FLAG_UNSIGNED | SoundMixer::FLAG_AUTOFREE);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (_paletteChanged) {
|
||||
_paletteChanged = false;
|
||||
setPalette();
|
||||
|
@ -1478,11 +1498,6 @@ void SmushPlayer::startVideo(short int arg, byte *videoFile) {
|
|||
_scumm->_system->update_screen();
|
||||
}
|
||||
|
||||
do {
|
||||
_scumm->waitForTimer(10);
|
||||
} while (_lock);
|
||||
_lock = true;
|
||||
|
||||
_scumm->processKbd();
|
||||
|
||||
} while (!_scumm->videoFinished);
|
||||
|
|
24
smush.h
24
smush.h
|
@ -21,6 +21,7 @@
|
|||
*/
|
||||
|
||||
#define SP_MAX_FONTS 5
|
||||
#define MAX_STREAMER 10
|
||||
|
||||
class SmushPlayer {
|
||||
|
||||
|
@ -72,16 +73,23 @@ struct CodecData {
|
|||
int32 _mixerNum;
|
||||
|
||||
// PSAD: Full Throttle audio
|
||||
uint32 _saudSize[8], _saudSubSize[8];
|
||||
uint32 _psadTrk[8], _strkRate[8];
|
||||
uint32 _saudSubTag[8];
|
||||
uint32 _saudSize[MAX_STREAMER], _saudSubSize[MAX_STREAMER];
|
||||
uint32 _psadTrk[MAX_STREAMER], _strkRate[MAX_STREAMER];
|
||||
uint32 _saudSubTag[MAX_STREAMER];
|
||||
uint32 _strkFinalSize[MAX_STREAMER];
|
||||
bool _strkNewMixer[MAX_STREAMER];
|
||||
byte * _strkBuf[MAX_STREAMER];
|
||||
|
||||
// IACT: The Dig audio
|
||||
uint32 _imusSize[8], _imusSubSize[8];
|
||||
uint32 _imusTrk[8], _imusRate[8], _imusChan[8];
|
||||
uint32 _imusSubTag[8];
|
||||
byte _imusData[8][3];
|
||||
uint32 _imusPos[8], _imusCodec[8];
|
||||
uint32 _imusSize[MAX_STREAMER], _imusSubSize[MAX_STREAMER];
|
||||
uint32 _imusTrk[MAX_STREAMER], _imusRate[MAX_STREAMER], _imusChan[MAX_STREAMER];
|
||||
uint32 _imusSubTag[MAX_STREAMER];
|
||||
byte _imusData[MAX_STREAMER][3];
|
||||
uint32 _imusPos[MAX_STREAMER], _imusCodec[MAX_STREAMER];
|
||||
uint32 _imusFinalSize[MAX_STREAMER];
|
||||
byte _imusFlags[MAX_STREAMER];
|
||||
byte * _imusBuf[MAX_STREAMER];
|
||||
bool _imusNewMixer[MAX_STREAMER];
|
||||
|
||||
// Codec37
|
||||
PersistentCodecData37 pcd37;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue