aboutsummaryrefslogtreecommitdiff
path: root/engines/groovie
diff options
context:
space:
mode:
authorScott Thomas2009-08-23 14:54:56 +0000
committerScott Thomas2009-08-23 14:54:56 +0000
commit24a9dc848098dae2124456de239e9ec63a31471e (patch)
tree91e08f9ee7de0609813d9d0dfdce4c613a7d791b /engines/groovie
parent4ff0c2619b87658c762eac19afe85ac01530c5c1 (diff)
downloadscummvm-rg350-24a9dc848098dae2124456de239e9ec63a31471e.tar.gz
scummvm-rg350-24a9dc848098dae2124456de239e9ec63a31471e.tar.bz2
scummvm-rg350-24a9dc848098dae2124456de239e9ec63a31471e.zip
T7G: Load VDX frame chunks into a MemoryStream rather than streaming straight from disk (Fix #2839528)
svn-id: r43671
Diffstat (limited to 'engines/groovie')
-rw-r--r--engines/groovie/vdx.cpp9
1 files changed, 7 insertions, 2 deletions
diff --git a/engines/groovie/vdx.cpp b/engines/groovie/vdx.cpp
index bee84b4adb..0bc6acb1c0 100644
--- a/engines/groovie/vdx.cpp
+++ b/engines/groovie/vdx.cpp
@@ -118,6 +118,7 @@ uint16 VDXPlayer::loadInternal() {
bool VDXPlayer::playFrameInternal() {
byte currRes = 0x80;
+ Common::ReadStream *vdxData = 0;
while (!_file->eos() && currRes == 0x80) {
currRes = _file->readByte();
@@ -130,7 +131,9 @@ bool VDXPlayer::playFrameInternal() {
uint8 lengthbits = _file->readByte();
// Read the chunk data and decompress if needed
- Common::ReadStream *vdxData = new Common::SubReadStream(_file, compSize);
+ if (compSize)
+ vdxData = _file->readStream(compSize);
+
if (lengthmask && lengthbits) {
Common::ReadStream *decompData = new LzssReadStream(vdxData, lengthmask, lengthbits);
delete vdxData;
@@ -157,7 +160,9 @@ bool VDXPlayer::playFrameInternal() {
default:
error("Groovie::VDX: Invalid resource type: %d", currRes);
}
- delete vdxData;
+ if (vdxData)
+ delete vdxData;
+ vdxData = 0;
}
// Wait until the current frame can be shown