[Scummvm-cvs-logs] CVS: scummvm/scumm/imuse_digi dimuse.cpp,1.8,1.9

Pawel Kolodziejski aquadran at users.sourceforge.net
Wed Jan 7 11:39:01 CET 2004


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

Modified Files:
	dimuse.cpp 
Log Message:
fixed size result related bug in imuse digi

Index: dimuse.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/imuse_digi/dimuse.cpp,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -d -r1.8 -r1.9
--- dimuse.cpp	7 Jan 2004 14:03:40 -0000	1.8
+++ dimuse.cpp	7 Jan 2004 19:38:37 -0000	1.9
@@ -133,20 +133,16 @@
 				do {
 					if (_sound->getBits(_track[l].soundHandle) == 12) {
 						byte *ptr = NULL;
+
 						mixer_size += _track[l].mod;
-						int length = (((mixer_size * 3) / 4) / 3) * 3;	// == (mixer_size / 4) * 3  != (mixer_size / 3) * 4
-						_track[l].mod = ((mixer_size * 3) / 4) - length;
-						mixer_size = length;
+						int mixer_size_12 = (mixer_size * 3) / 4;
+						int length = (mixer_size_12 / 3) * 4;
+						_track[l].mod = mixer_size - length;
 
 						int32 offset = (_track[l].regionOffset * 3) / 4;
-						result = _sound->getDataFromRegion(_track[l].soundHandle, _track[l].curRegion, &ptr, offset, mixer_size);
-						int32 result2 = BundleCodecs::decode12BitsSample(ptr, &data, result);
-						result = (result * 4) / 3;
-						if (result != result2) {
-							debug(5, "result: %d, result2: %d", result, result2);
-							result &= ~1;
-						}
-						mixer_size = (mixer_size * 4) / 3;
+						int result2 = _sound->getDataFromRegion(_track[l].soundHandle, _track[l].curRegion, &ptr, offset, mixer_size_12);
+						result = BundleCodecs::decode12BitsSample(ptr, &data, result2);
+
 						free(ptr);
 					} else if (_sound->getBits(_track[l].soundHandle) == 16) {
 						result = _sound->getDataFromRegion(_track[l].soundHandle, _track[l].curRegion, &data, _track[l].regionOffset, mixer_size);
@@ -166,6 +162,9 @@
 						}
 					}
 
+					if (result > mixer_size)
+						result = mixer_size;
+
 					if (_scumm->_mixer->isReady()) {
 						_scumm->_mixer->setChannelVolume(_track[l].handle, _track[l].vol / 1000);
 						_scumm->_mixer->setChannelPan(_track[l].handle, pan);
@@ -181,9 +180,6 @@
 							break;
 					}
 					mixer_size -= result;
-					if (mixer_size < 0)
-						mixer_size = 0;
-					assert(mixer_size >= 0);
 				} while (mixer_size != 0);
 			}
 		}





More information about the Scummvm-git-logs mailing list