[Scummvm-cvs-logs] SF.net SVN: scummvm: [30618] tools/trunk/compress_scumm_san.cpp

aquadran at users.sourceforge.net aquadran at users.sourceforge.net
Tue Jan 22 23:33:54 CET 2008


Revision: 30618
          http://scummvm.svn.sourceforge.net/scummvm/?rev=30618&view=rev
Author:   aquadran
Date:     2008-01-22 14:33:54 -0800 (Tue, 22 Jan 2008)

Log Message:
-----------
fixed #1741152 bug, track should be closed when data is not finished/missing than expected to prevent add later by same track id

Modified Paths:
--------------
    tools/trunk/compress_scumm_san.cpp

Modified: tools/trunk/compress_scumm_san.cpp
===================================================================
--- tools/trunk/compress_scumm_san.cpp	2008-01-22 21:55:14 UTC (rev 30617)
+++ tools/trunk/compress_scumm_san.cpp	2008-01-22 22:33:54 UTC (rev 30618)
@@ -66,6 +66,7 @@
 	int *sizes;
 	int nbframes;
 	int countFrames;
+	int lastFrame;
 	int32 sdatSize;
 };
 
@@ -257,12 +258,21 @@
 
 AudioTrackInfo *findAudioTrack(int trackId) {
 	for (int l = 0; l < MAX_TRACKS; l++) {
-		if ((_audioTracks[l].trackId == trackId) && (_audioTracks[l].used) && (_audioTracks[l].file))
+		if (_audioTracks[l].trackId == trackId && _audioTracks[l].used && _audioTracks[l].file)
 			return &_audioTracks[l];
 	}
 	return NULL;
 }
 
+void flushTracks(int frame) {
+	for (int l = 0; l < MAX_TRACKS; l++) {
+		if (_audioTracks[l].used && _audioTracks[l].file && (frame - _audioTracks[l].lastFrame) > 1) {
+			fclose(_audioTracks[l].file);
+			_audioTracks[l].file = NULL;
+		}
+	}
+}
+
 void prepareForMixing(char *outputDir, char *inputFilename) {
 	char filename[200];
 
@@ -554,6 +564,7 @@
 			audioTrack->sdatSize = handleSaudChunk(audioTrack, input);
 			audioTrack->sdatSize *= 4;
 			size -= (ftell(input) - pos) + 10;
+			audioTrack->lastFrame = frame;
 		}
 		sprintf(tmpPath, "%s/%s_%04d_%03d.tmp", outputDir, inputFilename, frame, trackId);
 		audioTrack->file = fopen(tmpPath, "wb");
@@ -562,12 +573,16 @@
 			exit(1);
 		}
 	} else {
+		if (!iact)
+			flushTracks(frame);
 		audioTrack = findAudioTrack(trackId);
 		assert(audioTrack);
 		if (iact)
 			size -= 18;
-		else
+		else {
 			size -= 10;
+			audioTrack->lastFrame = frame;
+		}
 	}
 	byte *buffer = (byte *)malloc(size);
 	fread(buffer, size, 1, input);
@@ -586,7 +601,8 @@
 		audioTrack->sizes[index] *= 2;
 	audioTrack->countFrames++;
 	if ((index + 1) == nbframes) {
-		fclose(audioTrack->file);
+		if (audioTrack->file)
+			fclose(audioTrack->file);
 		audioTrack->file = NULL;
 	}
 }


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