diff options
author | Benjamin Haisch | 2008-05-19 19:34:55 +0000 |
---|---|---|
committer | Benjamin Haisch | 2008-05-19 19:34:55 +0000 |
commit | cefff90ac61e95641950ae694e3334c1c344c32d (patch) | |
tree | 9e476c7843f854757fdcf7794bcee7ae6c4b6422 /engines/made/pmvplayer.cpp | |
parent | 460296f3602d35779664f2776cce7365829ccca8 (diff) | |
download | scummvm-rg350-cefff90ac61e95641950ae694e3334c1c344c32d.tar.gz scummvm-rg350-cefff90ac61e95641950ae694e3334c1c344c32d.tar.bz2 scummvm-rg350-cefff90ac61e95641950ae694e3334c1c344c32d.zip |
RtZ: Fixed bug which caused PMV videos to look odd (noticeable in the intro movie) and optimized frame decompression code.
svn-id: r32182
Diffstat (limited to 'engines/made/pmvplayer.cpp')
-rw-r--r-- | engines/made/pmvplayer.cpp | 30 |
1 files changed, 18 insertions, 12 deletions
diff --git a/engines/made/pmvplayer.cpp b/engines/made/pmvplayer.cpp index db56235a67..8180758d61 100644 --- a/engines/made/pmvplayer.cpp +++ b/engines/made/pmvplayer.cpp @@ -74,7 +74,7 @@ void PmvPlayer::play(const char *filename) { uint32 frameCount = 0; uint16 chunkCount = 0; uint32 soundSize = 0; - uint32 palChunkOfs = 0; + uint32 soundChunkOfs = 0, palChunkOfs = 0; uint32 palSize = 0; byte *frameData, *audioData, *soundData, *palData, *imageData; bool firstTime = true; @@ -100,23 +100,29 @@ void PmvPlayer::play(const char *filename) { frameData = new byte[chunkSize]; _fd->read(frameData, chunkSize); + + soundChunkOfs = READ_LE_UINT32(frameData + 8); + palChunkOfs = READ_LE_UINT32(frameData + 16); // Handle audio - audioData = frameData + READ_LE_UINT32(frameData + 8) - 8; - chunkSize = READ_LE_UINT16(audioData + 4); - chunkCount = READ_LE_UINT16(audioData + 6); + if (soundChunkOfs) { + + audioData = frameData + soundChunkOfs - 8; + chunkSize = READ_LE_UINT16(audioData + 4); + chunkCount = READ_LE_UINT16(audioData + 6); - if (chunkCount > 50) break; // FIXME: this is a hack + debug(1, "chunkCount = %d; chunkSize = %d; total = %d\n", chunkCount, chunkSize, chunkCount * chunkSize); - debug(1, "chunkCount = %d; chunkSize = %d; total = %d\n", chunkCount, chunkSize, chunkCount * chunkSize); + if (chunkCount > 50) break; // FIXME: this is a hack - soundSize = chunkCount * chunkSize; - soundData = new byte[soundSize]; - decompressSound(audioData + 8, soundData, chunkSize, chunkCount); - _audioStream->queueBuffer(soundData, soundSize); + soundSize = chunkCount * chunkSize; + soundData = new byte[soundSize]; + decompressSound(audioData + 8, soundData, chunkSize, chunkCount); + _audioStream->queueBuffer(soundData, soundSize); + + } // Handle palette - palChunkOfs = READ_LE_UINT32(frameData + 16); if (palChunkOfs) { palData = frameData + palChunkOfs - 8; palSize = READ_LE_UINT32(palData + 4); @@ -143,7 +149,7 @@ void PmvPlayer::play(const char *filename) { _surface->create(width, height, 1); } - decompressImage(imageData, *_surface, cmdOffs, pixelOffs, maskOffs, lineSize, frameNum > 0); + decompressMovieImage(imageData, *_surface, cmdOffs, pixelOffs, maskOffs, lineSize); if (firstTime) { _mixer->playInputStream(Audio::Mixer::kPlainSoundType, &_audioStreamHandle, _audioStream); |