diff options
author | Filippos Karapetis | 2009-10-16 11:43:37 +0000 |
---|---|---|
committer | Filippos Karapetis | 2009-10-16 11:43:37 +0000 |
commit | b190fa358ae537f1b9b089158e9ef031c1c2fef3 (patch) | |
tree | d8996cc1a9b319ecf77a05dc93285309f106792d /engines | |
parent | c213032da9483043cf994fe3921e8be35c146dfc (diff) | |
download | scummvm-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')
-rw-r--r-- | engines/sci/seq_decoder.cpp | 18 |
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); |