[Scummvm-cvs-logs] CVS: scummvm/scumm/imuse_digi dimuse.cpp,1.11,1.12 dimuse_bndmgr.cpp,1.8,1.9 dimuse_sndmgr.cpp,1.7,1.8 dimuse_sndmgr.h,1.5,1.6

Pawel Kolodziejski aquadran at users.sourceforge.net
Thu Jan 8 00:40:01 CET 2004


Update of /cvsroot/scummvm/scummvm/scumm/imuse_digi
In directory sc8-pr-cvs1:/tmp/cvs-serv9478

Modified Files:
	dimuse.cpp dimuse_bndmgr.cpp dimuse_sndmgr.cpp dimuse_sndmgr.h 
Log Message:
jumps only for the same hookid and ignore jumps for music for now. added sound names for checks if some sounds are really have a lot jumps and regions(it's posssible), in bundle loop size can be 0 and after that loops should be ended

Index: dimuse.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/imuse_digi/dimuse.cpp,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -d -r1.11 -r1.12
--- dimuse.cpp	8 Jan 2004 01:59:11 -0000	1.11
+++ dimuse.cpp	8 Jan 2004 08:39:25 -0000	1.12
@@ -203,9 +203,13 @@
 		return;
 	}
 
-	int region = checkJumpByRegion(track, _track[track].curRegion);
-	if (region != -1)
-		_track[track].curRegion = region;
+	int hookid = _sound->getJumpIdByRegion(_track[track].soundHandle, _track[track].curRegion);
+	if (hookid == _track[track].curHookId) {
+		int region = checkJumpByRegion(track, _track[track].curRegion);
+		if ((region != -1) && (_track[track].soundGroup != IMUSE_MUSIC))
+			_track[track].curRegion = region;
+	}
+
 	_track[track].regionOffset = 0;
 }
 
@@ -268,9 +272,6 @@
 					error("IMuseDigital::startSound(): Can't handle %d bit samples", bits);
 
 				_track[l].pullSize /= 25;	// We want a "frame rate" of 25 audio blocks per second
-
-				if (soundGroup == IMUSE_MUSIC)
-					_curMusicId = soundId;
 			}
 
 			if (input) {
@@ -282,6 +283,11 @@
 				_scumm->_mixer->playInputStream(&_track[l].handle, _track[l].stream, true, _track[l].vol / 1000, _track[l].pan, -1);
 			}
 
+			if (soundGroup == IMUSE_MUSIC) {
+				stopMusic();
+				_curMusicId = soundId;
+			}
+
 			_track[l].used = true;
 			return;
 		}
@@ -324,6 +330,7 @@
 				_scumm->_mixer->stopHandle(_track[l].handle);
 		}
 	}
+	_curMusicId = -1;
 }
 
 void IMuseDigital::pause(bool p) {

Index: dimuse_bndmgr.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/imuse_digi/dimuse_bndmgr.cpp,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -d -r1.8 -r1.9
--- dimuse_bndmgr.cpp	7 Jan 2004 22:12:45 -0000	1.8
+++ dimuse_bndmgr.cpp	8 Jan 2004 08:39:25 -0000	1.9
@@ -211,7 +211,6 @@
 	comp_input[0x2000-1] = 0;
 
 	for (i = first_block; i <= last_block; i++) {
-		assert(size);
 		assert(0x2000 >= _compTable[i].size + 1);
 
 		byte *curBuf;
@@ -239,6 +238,9 @@
 
 		final_size += output_size;
 		size -= output_size;
+		assert(size >= 0);
+		if (size == 0)
+			break;
 		skip = 0;
 	}
 	free(comp_input);

Index: dimuse_sndmgr.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/imuse_digi/dimuse_sndmgr.cpp,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -d -r1.7 -r1.8
--- dimuse_sndmgr.cpp	7 Jan 2004 21:02:48 -0000	1.7
+++ dimuse_sndmgr.cpp	8 Jan 2004 08:39:25 -0000	1.8
@@ -39,7 +39,8 @@
 
 ImuseDigiSndMgr::~ImuseDigiSndMgr() {
 	for (int l = 0; l < MAX_IMUSE_SOUNDS; l++) {
-		closeSound(&_sounds[l]);
+		if (&_sounds[l])
+			closeSound(&_sounds[l]);
 	}
 	delete _cacheBundleDir;
 }
@@ -74,7 +75,7 @@
 			case MKID_BE('TEXT'):
 				size = READ_BE_UINT32(ptr); ptr += 4;
 				if (_sounds[slot].numMarkers >= MAX_IMUSE_MARKERS) {
-					warning("ImuseDigiSndMgr::prepareSound() Not enough space for Marker");
+					warning("ImuseDigiSndMgr::prepareSound(%s) Not enough space for Marker", _sounds[slot].name);
 					ptr += size;
 					break;
 				}
@@ -85,7 +86,7 @@
 			case MKID_BE('REGN'):
 				size = READ_BE_UINT32(ptr); ptr += 4;
 				if (_sounds[slot].numRegions >= MAX_IMUSE_REGIONS) {
-					warning("ImuseDigiSndMgr::prepareSound() Not enough space for Region");
+					warning("ImuseDigiSndMgr::prepareSound(%s) Not enough space for Region", _sounds[slot].name);
 					ptr += 8;
 					break;
 				}
@@ -100,7 +101,7 @@
 			case MKID_BE('JUMP'):
 				size = READ_BE_UINT32(ptr); ptr += 4;
 				if (_sounds[slot].numJumps >= MAX_IMUSE_JUMPS) {
-					warning("ImuseDigiSndMgr::prepareSound() Not enough space for Jump");
+					warning("ImuseDigiSndMgr::prepareSound(%s) Not enough space for Jump", _sounds[slot].name);
 					ptr += size;
 					break;
 				}
@@ -221,6 +222,7 @@
 			else 
 				error("ImuseDigiSndMgr::openSound() Don't know how load sound: %d", soundId);
 			_sounds[slot]._bundle->decompressSampleByIndex(soundId, 0, 0x2000, &ptr, 0);
+			strcpy(_sounds[slot].name, soundName);
 		} else {
 			error("ImuseDigiSndMgr::openSound() Don't know how load sound: %d", soundId);
 		}
@@ -233,6 +235,7 @@
 			else 
 				error("ImuseDigiSndMgr::openSound() Don't know how load sound: %d", soundId);
 			_sounds[slot]._bundle->decompressSampleByName(soundName, 0, 0x2000, &ptr);
+			_sounds[slot].name[0] = 0;
 		} else {
 			error("ImuseDigiSndMgr::openSound() Don't know how load sound: %s", soundName);
 		}

Index: dimuse_sndmgr.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/imuse_digi/dimuse_sndmgr.h,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -d -r1.5 -r1.6
--- dimuse_sndmgr.h	7 Jan 2004 21:02:48 -0000	1.5
+++ dimuse_sndmgr.h	8 Jan 2004 08:39:25 -0000	1.6
@@ -30,7 +30,6 @@
 
 class ScummEngine;
 class BundleMgr;
-class ImuseDigital;
 
 class ImuseDigiSndMgr {
 public:
@@ -78,6 +77,7 @@
 		byte *allData;
 		int32 offsetData;
 		byte *resPtr;
+		char name[30];
 		bool freeResPtr;
 		BundleMgr *_bundle;
 		_region region[MAX_IMUSE_REGIONS];





More information about the Scummvm-git-logs mailing list