[Scummvm-cvs-logs] SF.net SVN: scummvm:[35321] scummvm/trunk/engines/gob
drmccoy at users.sourceforge.net
drmccoy at users.sourceforge.net
Sat Dec 13 03:30:45 CET 2008
Revision: 35321
http://scummvm.svn.sourceforge.net/scummvm/?rev=35321&view=rev
Author: drmccoy
Date: 2008-12-13 02:30:45 +0000 (Sat, 13 Dec 2008)
Log Message:
-----------
Fixed the ADPCM decoder for 16bit audio (like in Urban Runner)
Modified Paths:
--------------
scummvm/trunk/engines/gob/coktelvideo.cpp
scummvm/trunk/engines/gob/coktelvideo.h
Modified: scummvm/trunk/engines/gob/coktelvideo.cpp
===================================================================
--- scummvm/trunk/engines/gob/coktelvideo.cpp 2008-12-12 22:56:56 UTC (rev 35320)
+++ scummvm/trunk/engines/gob/coktelvideo.cpp 2008-12-13 02:30:45 UTC (rev 35321)
@@ -847,7 +847,7 @@
}
}
-const uint16 Vmd::_tableDPCM[128] = {
+const uint16 Vmd::_tableADPCM[128] = {
0x0000, 0x0008, 0x0010, 0x0020, 0x0030, 0x0040, 0x0050, 0x0060, 0x0070, 0x0080,
0x0090, 0x00A0, 0x00B0, 0x00C0, 0x00D0, 0x00E0, 0x00F0, 0x0100, 0x0110, 0x0120,
0x0130, 0x0140, 0x0150, 0x0160, 0x0170, 0x0180, 0x0190, 0x01A0, 0x01B0, 0x01C0,
@@ -1484,7 +1484,7 @@
byte *soundBuf = new byte[size * 2];
_stream->read(dataBuf, size);
- deDPCM(soundBuf, dataBuf, init, size);
+ deADPCM(soundBuf, dataBuf, init, size);
_audioStream->queueBuffer(soundBuf, size * 2);
delete[] dataBuf;
@@ -1495,7 +1495,7 @@
soundSlice8bit(size);
} else if (_soundBytesPerSample == 2) {
int16 init = _stream->readSint16LE();
- soundSlice16bit(size - 1, init);
+ soundSlice16bit(size - 2, init);
}
}
@@ -1506,7 +1506,7 @@
if (mask & 1)
emptySoundSlice(_soundSliceSize * _soundBytesPerSample);
else
- filledSoundSlice(_soundSliceSize);
+ filledSoundSlice(_soundSliceSize + 1);
mask >>= 1;
}
@@ -1514,15 +1514,15 @@
filledSoundSlice((_soundSlicesCount - 32) * _soundSliceSize);
}
-void Vmd::deDPCM(byte *soundBuf, byte *dataBuf, int16 &init, uint32 n) {
+void Vmd::deADPCM(byte *soundBuf, byte *dataBuf, int16 &init, uint32 n) {
int16 *out = (int16 *) soundBuf;
int32 s = init;
for (uint32 i = 0; i < n; i++) {
if (dataBuf[i] & 0x80)
- s -= _tableDPCM[dataBuf[i] & 0x7F];
+ s -= _tableADPCM[dataBuf[i] & 0x7F];
else
- s += _tableDPCM[dataBuf[i]];
+ s += _tableADPCM[dataBuf[i]];
s = CLIP<int32>(s, -32768, 32767);
*out++ = TO_BE_16(s);
Modified: scummvm/trunk/engines/gob/coktelvideo.h
===================================================================
--- scummvm/trunk/engines/gob/coktelvideo.h 2008-12-12 22:56:56 UTC (rev 35320)
+++ scummvm/trunk/engines/gob/coktelvideo.h 2008-12-13 02:30:45 UTC (rev 35321)
@@ -353,7 +353,7 @@
~Frame() { delete[] parts; }
} PACKED_STRUCT;
- static const uint16 _tableDPCM[128];
+ static const uint16 _tableADPCM[128];
bool _hasVideo;
@@ -381,7 +381,7 @@
void soundSlice16bit(uint32 size, int16 &init);
void filledSoundSlice(uint32 size);
void filledSoundSlices(uint32 size, uint32 mask);
- void deDPCM(byte *soundBuf, byte *dataBuf, int16 &init, uint32 n);
+ void deADPCM(byte *soundBuf, byte *dataBuf, int16 &init, uint32 n);
};
} // End of namespace Gob
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