[Scummvm-cvs-logs] CVS: scummvm/sword1 sound.cpp,1.32,1.33
Torbjörn Andersson
eriktorbjorn at users.sourceforge.net
Sat Oct 30 03:36:15 CEST 2004
Update of /cvsroot/scummvm/scummvm/sword1
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv1222
Modified Files:
sound.cpp
Log Message:
Brute-force workaround for speech decoder crashes in the BS1 demo. It still
doesn't work very well, though...
Index: sound.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sword1/sound.cpp,v
retrieving revision 1.32
retrieving revision 1.33
diff -u -d -r1.32 -r1.33
--- sound.cpp 21 Oct 2004 12:43:48 -0000 1.32
+++ sound.cpp 30 Oct 2004 10:35:39 -0000 1.33
@@ -214,20 +214,40 @@
} else
resSize = READ_LE_UINT32(fBuf + headerPos + 4) >> 1;
int16 *srcData = (int16*)(fBuf + headerPos + 8);
- int16 *dstData = (int16*)malloc(resSize * 2);
uint32 srcPos = 0;
- int16 *dstPos = dstData;
+ uint32 dstPos = 0;
cSize = (cSize - (headerPos + 8)) / 2;
+ if (_cowMode == CowDemo) {
+ // FIXME: Until someone figures out how to really
+ // calculate the uncompressed buffer size, use
+ // brute force to avoid crashes.
+ debug(1, "old resSize = %d", resSize);
+ resSize = 0;
+ while (srcPos < cSize) {
+ int16 length = (int16)READ_LE_UINT16(srcData + srcPos);
+ srcPos++;
+ if (length < 0) {
+ length = -length;
+ srcPos++;
+ } else {
+ srcPos += length;
+ }
+ resSize += length;
+ }
+ debug(1, "new resSize = %d", resSize);
+ }
+ int16 *dstData = (int16*)malloc(resSize * 2);
+ srcPos = 0;
while (srcPos < cSize) {
int16 length = (int16)READ_LE_UINT16(srcData + srcPos);
srcPos++;
if (length < 0) {
length = -length;
for (uint16 cnt = 0; cnt < (uint16)length; cnt++)
- *dstPos++ = srcData[srcPos];
+ dstData[dstPos++] = srcData[srcPos];
srcPos++;
} else {
- memcpy(dstPos, srcData + srcPos, length * 2);
+ memcpy(dstData + dstPos, srcData + srcPos, length * 2);
dstPos += length;
srcPos += length;
}
More information about the Scummvm-git-logs
mailing list