RCS file: /cvsroot/scummvm/scummvm/scumm/smush/smush_player.cpp,v
retrieving revision 1.168
diff -u -d -r1.168 smush_player.cpp
|
|
|
238 | 238 | _base = NULL; |
239 | 239 | _frameBuffer = NULL; |
240 | 240 | _specialBuffer = NULL; |
| 241 | |
| 242 | _seekPos = -1; |
241 | 243 | |
242 | 244 | _skipNext = false; |
243 | 245 | _subtitles = ConfMan.getBool("subtitles"); |
… |
… |
|
368 | 370 | _smixer->addChannel(c); |
369 | 371 | } |
370 | 372 | |
371 | | if ((_middleAudio) && (index != 0)) { |
372 | | c->setParameters(max_frames, flags, vol, pan, index); |
373 | | } else if (index == 0) { |
| 373 | if (_middleAudio || (index == 0)) { |
374 | 374 | c->setParameters(max_frames, flags, vol, pan, index); |
375 | 375 | } else { |
376 | 376 | c->checkParameters(index, max_frames, flags, vol, pan); |
… |
… |
|
982 | 982 | } |
983 | 983 | |
984 | 984 | void SmushPlayer::setupAnim(const char *file) { |
985 | | Chunk *sub; |
986 | 985 | int i; |
987 | 986 | char file_font[11]; |
988 | 987 | |
989 | | _base = new FileChunk(file); |
990 | | sub = _base->subBlock(); |
991 | | checkBlock(*sub, TYPE_AHDR); |
992 | | handleAnimHeader(*sub); |
993 | | |
994 | 988 | if (_insanity) { |
995 | 989 | if (!((_vm->_features & GF_DEMO) && (_vm->_platform == Common::kPlatformPC))) |
996 | 990 | readString("mineroad.trs"); |
… |
… |
|
1027 | 1021 | } else { |
1028 | 1022 | error("SmushPlayer::setupAnim() Unknown font setup for game"); |
1029 | 1023 | } |
1030 | | |
1031 | | delete sub; |
1032 | 1024 | } |
1033 | 1025 | |
1034 | 1026 | void SmushPlayer::parseNextFrame() { |
1035 | 1027 | Common::StackLock lock(_mutex); |
| 1028 | |
| 1029 | Chunk *sub; |
1036 | 1030 | |
1037 | 1031 | if (_vm->_smushPaused) |
1038 | 1032 | return; |
| 1033 | |
| 1034 | if (_seekPos >= 0) { |
| 1035 | if (_smixer) |
| 1036 | _smixer->stop(); |
| 1037 | |
| 1038 | if (_seekFile.size() > 0) { |
| 1039 | if (_base) { |
| 1040 | delete _base; |
| 1041 | } |
| 1042 | _base = new FileChunk(_seekFile); |
| 1043 | |
| 1044 | if (_seekPos > 0) { |
| 1045 | assert(_seekPos > 8); |
| 1046 | // In this case we need to get palette and number of frames |
| 1047 | sub = _base->subBlock(); |
| 1048 | checkBlock(*sub, TYPE_AHDR); |
| 1049 | handleAnimHeader(*sub); |
| 1050 | delete sub; |
| 1051 | |
| 1052 | _middleAudio = true; |
| 1053 | _seekPos -= 8; |
| 1054 | } else { |
| 1055 | // We need this in Full Throttle when entering/leaving |
| 1056 | // the old mine road. |
| 1057 | tryCmpFile(_seekFile.c_str()); |
| 1058 | } |
| 1059 | _skipPalette = false; |
| 1060 | } else { |
| 1061 | _skipPalette = true; |
| 1062 | } |
| 1063 | |
| 1064 | _base->seek(_seekPos, FileChunk::seek_start); |
| 1065 | _frame = _seekFrame; |
| 1066 | |
| 1067 | _seekPos = -1; |
| 1068 | } |
1039 | 1069 | |
| 1070 | assert(_base); |
1040 | 1071 | if (_base->eof()) { |
1041 | 1072 | _vm->_smushVideoShouldFinish = true; |
1042 | 1073 | return; |
1043 | 1074 | } |
1044 | 1075 | |
1045 | | Chunk *sub = _base->subBlock(); |
| 1076 | sub = _base->subBlock(); |
1046 | 1077 | |
1047 | 1078 | switch (sub->getType()) { |
1048 | 1079 | case TYPE_AHDR: // FT INSANE may seek file to the beginning |
… |
… |
|
1153 | 1184 | void SmushPlayer::seekSan(const char *file, int32 pos, int32 contFrame) { |
1154 | 1185 | Common::StackLock lock(_mutex); |
1155 | 1186 | |
1156 | | if (_smixer) |
1157 | | _smixer->stop(); |
1158 | | |
1159 | | if (file) { |
1160 | | if (_base) { |
1161 | | _base->seek(0, FileChunk::seek_end); |
1162 | | delete _base; |
1163 | | } |
1164 | | |
1165 | | _base = new FileChunk(file); |
1166 | | if (pos) { |
1167 | | assert(pos != 8); |
1168 | | // In this case we need to get palette and number of frames |
1169 | | Chunk *sub = _base->subBlock(); |
1170 | | checkBlock(*sub, TYPE_AHDR); |
1171 | | handleAnimHeader(*sub); |
1172 | | delete sub; |
1173 | | |
1174 | | _middleAudio = true; |
1175 | | pos -= 8; |
1176 | | } else { |
1177 | | // We need this in Full Throttle when entering/leaving |
1178 | | // the old mine road. |
1179 | | tryCmpFile(file); |
1180 | | } |
1181 | | _skipPalette = false; |
1182 | | } else { |
1183 | | _skipPalette = true; |
1184 | | } |
1185 | | |
1186 | | _base->seek(pos, FileChunk::seek_start); |
1187 | | |
1188 | | _frame = contFrame; |
| 1187 | _seekFile = file ? file : ""; |
| 1188 | _seekPos = pos; |
| 1189 | _seekFrame = contFrame; |
1189 | 1190 | } |
1190 | 1191 | |
1191 | 1192 | void SmushPlayer::tryCmpFile(const char *filename) { |
… |
… |
|
1198 | 1199 | if (i == NULL) { |
1199 | 1200 | error("invalid filename : %s", filename); |
1200 | 1201 | } |
1201 | | #ifdef USE_MAD |
| 1202 | #if defined(USE_MAD) || defined(USE_VORBIS) |
1202 | 1203 | char fname[260]; |
| 1204 | #endif |
| 1205 | #ifdef USE_MAD |
1203 | 1206 | memcpy(fname, filename, i - filename); |
1204 | 1207 | strcpy(fname + (i - filename), ".mp3"); |
1205 | 1208 | _compressedFile.open(fname); |
… |
… |
|
1234 | 1237 | } |
1235 | 1238 | f.close(); |
1236 | 1239 | |
1237 | | tryCmpFile(filename); |
1238 | | |
1239 | 1240 | _updateNeeded = false; |
1240 | 1241 | _warpNeeded = false; |
1241 | 1242 | _palDirtyMin = 256; |
… |
… |
|
1245 | 1246 | bool oldMouseState = _vm->_system->showMouse(false); |
1246 | 1247 | |
1247 | 1248 | // Load the video |
| 1249 | _seekFile = filename; |
| 1250 | _seekPos = offset; |
| 1251 | _seekFrame = startFrame; |
| 1252 | _base = 0; |
| 1253 | |
1248 | 1254 | setupAnim(filename); |
1249 | 1255 | init(); |
1250 | 1256 | |
1251 | | if (offset) { |
1252 | | _base->seek(offset - 8, FileChunk::seek_start); |
1253 | | _frame = startFrame; |
1254 | | _middleAudio = true; |
1255 | | } |
1256 | | |
1257 | 1257 | for (;;) { |
1258 | 1258 | if (_warpNeeded) { |
1259 | 1259 | _vm->_system->warpMouse(_warpX, _warpY); |
… |
… |
|
1280 | 1280 | _palDirtyMin = 256; |
1281 | 1281 | } |
1282 | 1282 | if (_updateNeeded) { |
1283 | | |
1284 | 1283 | uint32 end_time, start_time; |
1285 | 1284 | |
1286 | 1285 | start_time = _vm->_system->getMillis(); |
RCS file: /cvsroot/scummvm/scummvm/scumm/smush/smush_player.h,v
retrieving revision 1.50
diff -u -d -r1.50 smush_player.h
|
|
|
51 | 51 | byte *_frameBuffer; |
52 | 52 | byte *_specialBuffer; |
53 | 53 | |
| 54 | Common::String _seekFile; |
| 55 | int32 _seekPos; |
| 56 | int32 _seekFrame; |
| 57 | |
54 | 58 | bool _skipNext; |
55 | 59 | bool _subtitles; |
56 | 60 | bool _skips[37]; |