[Scummvm-cvs-logs] SF.net SVN: scummvm: [30499] scummvm/trunk/engines/scumm/imuse_digi/ dimuse_sndmgr.cpp

aquadran at users.sourceforge.net aquadran at users.sourceforge.net
Tue Jan 15 21:09:57 CET 2008


Revision: 30499
          http://scummvm.svn.sourceforge.net/scummvm/?rev=30499&view=rev
Author:   aquadran
Date:     2008-01-15 12:09:56 -0800 (Tue, 15 Jan 2008)

Log Message:
-----------
fix last commit to release, and add version 2 fallback for compressed files

Modified Paths:
--------------
    scummvm/trunk/engines/scumm/imuse_digi/dimuse_sndmgr.cpp

Modified: scummvm/trunk/engines/scumm/imuse_digi/dimuse_sndmgr.cpp
===================================================================
--- scummvm/trunk/engines/scumm/imuse_digi/dimuse_sndmgr.cpp	2008-01-15 20:08:55 UTC (rev 30498)
+++ scummvm/trunk/engines/scumm/imuse_digi/dimuse_sndmgr.cpp	2008-01-15 20:09:56 UTC (rev 30499)
@@ -101,7 +101,10 @@
 	assert(tag == MKID_BE('RMAP'));
 	int32 version = file->readUint32BE();
 	if (version != 3) {
-		error("ImuseDigiSndMgr::prepareSoundFromRMAP: Wrong version number, expected 3, but it's: %d.", version);
+		if (version == 2)
+			warning("ImuseDigiSndMgr::prepareSoundFromRMAP: Wrong version number, expected 3, but it's 2. Recompress data with latest tool.");
+		else
+			error("ImuseDigiSndMgr::prepareSoundFromRMAP: Wrong version number, expected 3, but it's: %d.", version);
 	}
 	sound->bits = file->readUint32BE();
 	sound->freq = file->readUint32BE();
@@ -109,7 +112,11 @@
 	sound->numRegions = file->readUint32BE();
 	sound->numJumps = file->readUint32BE();
 	sound->numSyncs = file->readUint32BE();
-	sound->numMarkers = file->readUint32BE();
+	if (version >= 3)
+		sound->numMarkers = file->readUint32BE();
+	else
+		sound->numMarkers = 0;
+
 	sound->region = new Region[sound->numRegions];
 	assert(sound->region);
 	sound->jump = new Jump[sound->numJumps];
@@ -134,11 +141,13 @@
 		sound->sync[l].ptr = (byte *)malloc(sound->sync[l].size);
 		file->read(sound->sync[l].ptr, sound->sync[l].size);
 	}
-	for (l = 0; l < sound->numMarkers; l++) {
-		sound->marker[l].pos = file->readUint32BE();
-		sound->marker[l].length = file->readUint32BE();
-		sound->marker[l].ptr = new char[sound->marker[l].length];
-		file->read(sound->marker[l].ptr, sound->marker[l].length);
+	if (version >= 3) {
+		for (l = 0; l < sound->numMarkers; l++) {
+			sound->marker[l].pos = file->readUint32BE();
+			sound->marker[l].length = file->readUint32BE();
+			sound->marker[l].ptr = new char[sound->marker[l].length];
+			file->read(sound->marker[l].ptr, sound->marker[l].length);
+		}
 	}
 }
 
@@ -475,10 +484,11 @@
 
 	for (int r = 0; r < soundDesc->numSyncs; r++)
 		free(soundDesc->sync[r].ptr);
+	for (int r = 0; r < soundDesc->numSyncs; r++)
+		delete[] soundDesc->marker[r].ptr;
 	delete[] soundDesc->region;
 	delete[] soundDesc->jump;
 	delete[] soundDesc->sync;
-	delete[] soundDesc->marker->ptr;
 	delete[] soundDesc->marker;
 	memset(soundDesc, 0, sizeof(SoundDesc));
 }


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