aboutsummaryrefslogtreecommitdiff
path: root/engines/sci
diff options
context:
space:
mode:
authorFilippos Karapetis2009-10-16 11:43:37 +0000
committerFilippos Karapetis2009-10-16 11:43:37 +0000
commitb190fa358ae537f1b9b089158e9ef031c1c2fef3 (patch)
treed8996cc1a9b319ecf77a05dc93285309f106792d /engines/sci
parentc213032da9483043cf994fe3921e8be35c146dfc (diff)
downloadscummvm-rg350-b190fa358ae537f1b9b089158e9ef031c1c2fef3.tar.gz
scummvm-rg350-b190fa358ae537f1b9b089158e9ef031c1c2fef3.tar.bz2
scummvm-rg350-b190fa358ae537f1b9b089158e9ef031c1c2fef3.zip
SEQ full frames which don't cover the whole screen width are handled correctly again. Fixes the videos in the GK1 demo
svn-id: r45161
Diffstat (limited to 'engines/sci')
-rw-r--r--engines/sci/seq_decoder.cpp18
1 files changed, 11 insertions, 7 deletions
diff --git a/engines/sci/seq_decoder.cpp b/engines/sci/seq_decoder.cpp
index 3999abc0b5..634a8aeed7 100644
--- a/engines/sci/seq_decoder.cpp
+++ b/engines/sci/seq_decoder.cpp
@@ -129,13 +129,17 @@ bool SeqDecoder::decodeNextFrame() {
_videoInfo.startTime = g_system->getMillis();
if (frameType == kSeqFrameFull) {
- if (frameLeft != 0 && frameWidth != 320) {
- // This case should never happen, but apparently it does in the
- // seagulls video in KQ6 CD (most likely due to bad/incomplete data)
- _fileStream->skip(frameSize);
- } else {
- _fileStream->read(_videoFrameBuffer + 320 * frameTop, frameSize);
- }
+ byte *dst = _videoFrameBuffer + frameTop * 320 + frameLeft;
+
+ byte *linebuf = new byte[frameWidth];
+
+ do {
+ _fileStream->read(linebuf, frameWidth);
+ memcpy(dst, linebuf, frameWidth);
+ dst += 320;
+ } while (--frameHeight);
+
+ delete[] linebuf;
} else {
byte *buf = new byte[frameSize];
_fileStream->read(buf, frameSize);