[Scummvm-cvs-logs] SF.net SVN: scummvm:[45153] scummvm/trunk
thebluegr at users.sourceforge.net
thebluegr at users.sourceforge.net
Fri Oct 16 10:26:42 CEST 2009
Revision: 45153
http://scummvm.svn.sourceforge.net/scummvm/?rev=45153&view=rev
Author: thebluegr
Date: 2009-10-16 08:26:41 +0000 (Fri, 16 Oct 2009)
Log Message:
-----------
Moved the SEQ decoder outside the gfx directory, as it is completely stand alone now and no longer uses any GUI-related code
Modified Paths:
--------------
scummvm/trunk/dists/msvc8/sci.vcproj
scummvm/trunk/dists/msvc9/sci.vcproj
scummvm/trunk/engines/sci/engine/kgraphics.cpp
scummvm/trunk/engines/sci/module.mk
Added Paths:
-----------
scummvm/trunk/engines/sci/seq_decoder.cpp
scummvm/trunk/engines/sci/seq_decoder.h
Removed Paths:
-------------
scummvm/trunk/engines/sci/gfx/seq_decoder.cpp
scummvm/trunk/engines/sci/gfx/seq_decoder.h
Modified: scummvm/trunk/dists/msvc8/sci.vcproj
===================================================================
--- scummvm/trunk/dists/msvc8/sci.vcproj 2009-10-16 07:57:08 UTC (rev 45152)
+++ scummvm/trunk/dists/msvc8/sci.vcproj 2009-10-16 08:26:41 UTC (rev 45153)
@@ -87,8 +87,6 @@
<File RelativePath="..\..\engines\sci\gfx\res_pal.cpp" />
<File RelativePath="..\..\engines\sci\gfx\res_pic.cpp" />
<File RelativePath="..\..\engines\sci\gfx\res_view.cpp" />
- <File RelativePath="..\..\engines\sci\gfx\seq_decoder.cpp" />
- <File RelativePath="..\..\engines\sci\gfx\seq_decoder.h" />
</Filter>
<Filter Name="gui">
<File RelativePath="..\..\engines\sci\gui\gui.cpp" />
@@ -160,6 +158,8 @@
<File RelativePath="..\..\engines\sci\resource.h" />
<File RelativePath="..\..\engines\sci\sci.cpp" />
<File RelativePath="..\..\engines\sci\sci.h" />
+ <File RelativePath="..\..\engines\sci\seq_decoder.cpp" />
+ <File RelativePath="..\..\engines\sci\seq_decoder.h" />
<File RelativePath="..\..\engines\sci\engine\script.cpp" />
<File RelativePath="..\..\engines\sci\tools.cpp" />
<File RelativePath="..\..\engines\sci\tools.h" />
Modified: scummvm/trunk/dists/msvc9/sci.vcproj
===================================================================
--- scummvm/trunk/dists/msvc9/sci.vcproj 2009-10-16 07:57:08 UTC (rev 45152)
+++ scummvm/trunk/dists/msvc9/sci.vcproj 2009-10-16 08:26:41 UTC (rev 45153)
@@ -88,8 +88,6 @@
<File RelativePath="..\..\engines\sci\gfx\res_pal.cpp" />
<File RelativePath="..\..\engines\sci\gfx\res_pic.cpp" />
<File RelativePath="..\..\engines\sci\gfx\res_view.cpp" />
- <File RelativePath="..\..\engines\sci\gfx\seq_decoder.cpp" />
- <File RelativePath="..\..\engines\sci\gfx\seq_decoder.h" />
</Filter>
<Filter Name="gui">
<File RelativePath="..\..\engines\sci\gui\gui.cpp" />
@@ -161,6 +159,8 @@
<File RelativePath="..\..\engines\sci\resource.h" />
<File RelativePath="..\..\engines\sci\sci.cpp" />
<File RelativePath="..\..\engines\sci\sci.h" />
+ <File RelativePath="..\..\engines\sci\seq_decoder.cpp" />
+ <File RelativePath="..\..\engines\sci\seq_decoder.h" />
<File RelativePath="..\..\engines\sci\engine\script.cpp" />
<File RelativePath="..\..\engines\sci\tools.cpp" />
<File RelativePath="..\..\engines\sci\tools.h" />
Modified: scummvm/trunk/engines/sci/engine/kgraphics.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/kgraphics.cpp 2009-10-16 07:57:08 UTC (rev 45152)
+++ scummvm/trunk/engines/sci/engine/kgraphics.cpp 2009-10-16 08:26:41 UTC (rev 45153)
@@ -30,12 +30,12 @@
#include "sci/sci.h"
#include "sci/debug.h" // for g_debug_sleeptime_factor
#include "sci/resource.h"
+#include "sci/seq_decoder.h"
#include "sci/engine/state.h"
#include "sci/engine/kernel.h"
#include "sci/gfx/gfx_gui.h"
#include "sci/gfx/gfx_widgets.h"
#include "sci/gfx/gfx_state_internal.h" // required for GfxContainer, GfxPort, GfxVisual
-#include "sci/gfx/seq_decoder.h"
#include "sci/gui/gui.h"
#include "sci/gui/gui_cursor.h"
#include "sci/gui/gui_screen.h"
Deleted: scummvm/trunk/engines/sci/gfx/seq_decoder.cpp
===================================================================
--- scummvm/trunk/engines/sci/gfx/seq_decoder.cpp 2009-10-16 07:57:08 UTC (rev 45152)
+++ scummvm/trunk/engines/sci/gfx/seq_decoder.cpp 2009-10-16 08:26:41 UTC (rev 45153)
@@ -1,237 +0,0 @@
-/* ScummVM - Graphic Adventure Engine
- *
- * ScummVM is the legal property of its developers, whose names
- * are too numerous to list here. Please refer to the COPYRIGHT
- * file distributed with this source distribution.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
-
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
-
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * $URL$
- * $Id$
- *
- */
-
-#include "common/debug.h"
-#include "common/endian.h"
-#include "common/archive.h"
-#include "common/system.h"
-#include "common/util.h"
-
-#include "graphics/surface.h"
-
-#include "sci/gfx/seq_decoder.h"
-
-namespace Graphics {
-
-enum seqPalTypes {
- kSeqPalVariable = 0,
- kSeqPalConstant = 1
-};
-
-enum seqFrameTypes {
- kSeqFrameFull = 0,
- kSeqFrameDiff = 1
-};
-
-SeqDecoder::~SeqDecoder() {
- closeFile();
-}
-
-bool SeqDecoder::loadFile(const char *fileName, int frameDelay) {
- closeFile();
-
- _fileStream = SearchMan.createReadStreamForMember(fileName);
- if (!_fileStream)
- return false;
-
- // Seek to the first frame
- _videoInfo.currentFrame = 0;
-
- _videoInfo.width = 320;
- _videoInfo.height = 200;
- _videoInfo.frameCount = _fileStream->readUint16LE();
- // Our frameDelay is calculated in 1/100 ms, so we convert it here
- _videoInfo.frameDelay = 100 * frameDelay * 1000 / 60;
- _videoFrameBuffer = new byte[_videoInfo.width * _videoInfo.height];
-
- // Set palette
- int paletteSize = _fileStream->readUint32LE();
-
- byte *paletteData = new byte[paletteSize];
- _fileStream->read(paletteData, paletteSize);
-
- // SCI1.1 palette
- byte palFormat = paletteData[32];
- uint16 palColorStart = READ_LE_UINT16(paletteData + 25);
- uint16 palColorCount = READ_LE_UINT16(paletteData + 29);
-
- byte palette[256 * 4];
- int palOffset = 37;
-
- for (uint16 colorNo = palColorStart; colorNo < palColorStart + palColorCount; colorNo++) {
- if (palFormat == kSeqPalVariable)
- palOffset++;
- palette[colorNo * 4 + 0] = paletteData[palOffset++];
- palette[colorNo * 4 + 1] = paletteData[palOffset++];
- palette[colorNo * 4 + 2] = paletteData[palOffset++];
- palette[colorNo * 4 + 3] = 0;
- }
-
- g_system->setPalette(palette, 0, 256);
-
- delete paletteData;
-
- _videoInfo.firstframeOffset = _fileStream->pos();
-
- return true;
-}
-
-void SeqDecoder::closeFile() {
- if (!_fileStream)
- return;
-
- delete _fileStream;
- _fileStream = 0;
-
- delete[] _videoFrameBuffer;
- _videoFrameBuffer = 0;
-}
-
-bool SeqDecoder::decodeNextFrame() {
- int16 frameWidth = _fileStream->readUint16LE();
- int16 frameHeight = _fileStream->readUint16LE();
- int16 frameLeft = _fileStream->readUint16LE();
- int16 frameTop = _fileStream->readUint16LE();
- byte colorKey = _fileStream->readByte();
- byte frameType = _fileStream->readByte();
- _fileStream->skip(2);
- uint16 frameSize = _fileStream->readUint16LE();
- _fileStream->skip(2);
- uint16 rleSize = _fileStream->readUint16LE();
- _fileStream->skip(6);
- uint32 offset = _fileStream->readUint32LE();
-
- _fileStream->seek(offset);
-
- if (_videoInfo.currentFrame == 0)
- _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);
- }
- } else {
- byte *buf = new byte[frameSize];
- _fileStream->read(buf, frameSize);
- decodeFrame(buf, rleSize, buf + rleSize, frameSize - rleSize, _videoFrameBuffer + 320 * frameTop, frameLeft, frameWidth, frameHeight, colorKey);
- delete buf;
- }
-
- return ++_videoInfo.currentFrame < _videoInfo.frameCount;
-}
-
-#define WRITE_TO_BUFFER(n) \
- if (writeRow * 320 + writeCol + (n) > 320 * height) { \
- warning("SEQ player: writing out of bounds, aborting"); \
- return false; \
- } \
- if (litPos + (n) > litSize) { \
- warning("SEQ player: reading out of bounds, aborting"); \
- } \
- memcpy(dest + writeRow * 320 + writeCol, litData + litPos, n);
-
-bool SeqDecoder::decodeFrame(byte *rleData, int rleSize, byte *litData, int litSize, byte *dest, int left, int width, int height, int colorKey) {
- int writeRow = 0;
- int writeCol = left;
- int litPos = 0;
- int rlePos = 0;
-
- while (rlePos < rleSize) {
- int op = rleData[rlePos++];
-
- if ((op & 0xc0) == 0xc0) {
- op &= 0x3f;
- if (op == 0) {
- // Go to next line in target buffer
- writeRow++;
- writeCol = left;
- } else {
- // Skip bytes on current line
- writeCol += op;
- }
- } else if (op & 0x80) {
- op &= 0x3f;
- if (op == 0) {
- // Copy remainder of current line
- int rem = width - (writeCol - left);
-
- WRITE_TO_BUFFER(rem);
- writeRow++;
- writeCol = left;
- litPos += rem;
- } else {
- // Copy bytes
- WRITE_TO_BUFFER(op);
- writeCol += op;
- litPos += op;
- }
- } else {
- uint16 count = ((op & 7) << 8) | rleData[rlePos++];
-
- switch (op >> 3) {
- case 2:
- // Skip bytes
- writeCol += count;
- break;
- case 3:
- // Copy bytes
- WRITE_TO_BUFFER(count);
- writeCol += count;
- litPos += count;
- break;
- case 6: {
- // Copy rows
- if (count == 0)
- count = height - writeRow;
-
- for (int i = 0; i < count; i++) {
- WRITE_TO_BUFFER(width);
- litPos += width;
- writeRow++;
- }
- break;
- }
- case 7:
- // Skip rows
- if (count == 0)
- count = height - writeRow;
-
- writeRow += count;
- break;
- default:
- warning("Unsupported operation %i encountered", op >> 3);
- return false;
- }
- }
- }
-
- return true;
-}
-
-} // End of namespace Graphics
Deleted: scummvm/trunk/engines/sci/gfx/seq_decoder.h
===================================================================
--- scummvm/trunk/engines/sci/gfx/seq_decoder.h 2009-10-16 07:57:08 UTC (rev 45152)
+++ scummvm/trunk/engines/sci/gfx/seq_decoder.h 2009-10-16 08:26:41 UTC (rev 45153)
@@ -1,68 +0,0 @@
-/* ScummVM - Graphic Adventure Engine
- *
- * ScummVM is the legal property of its developers, whose names
- * are too numerous to list here. Please refer to the COPYRIGHT
- * file distributed with this source distribution.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
-
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
-
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * $URL$
- * $Id$
- *
- */
-
-#ifndef SEQ_DECODER_H
-#define SEQ_DECODER_H
-
-#include "graphics/video/video_player.h"
-
-namespace Graphics {
-
-/**
- * Implementation of the KQ6 DOS floppy/CD SEQ decoder
- */
-class SeqDecoder : public VideoDecoder {
-public:
- SeqDecoder() {}
- virtual ~SeqDecoder();
-
- /**
- * Load a SEQ encoded video file
- * @param filename the filename to load
- * @param frameDelay the delay between frames, in ms
- */
- bool loadFile(const char *fileName) { return loadFile(fileName, 10); }
-
- /**
- * Load a SEQ encoded video file
- * @param filename the filename to load
- * @param frameDelay the delay between frames, in ms
- */
- bool loadFile(const char *fileName, int frameDelay);
-
- /**
- * Close a SEQ encoded video file
- */
- void closeFile();
-
- bool decodeNextFrame();
-
-private:
- bool decodeFrame(byte *rleData, int rleSize, byte *litData, int litSize, byte *dest, int left, int width, int height, int colorKey);
-};
-
-} // End of namespace Graphics
-
-#endif
Modified: scummvm/trunk/engines/sci/module.mk
===================================================================
--- scummvm/trunk/engines/sci/module.mk 2009-10-16 07:57:08 UTC (rev 45152)
+++ scummvm/trunk/engines/sci/module.mk 2009-10-16 08:26:41 UTC (rev 45153)
@@ -6,6 +6,7 @@
detection.o \
resource.o \
sci.o \
+ seq_decoder.o \
tools.o \
vocabulary.o \
engine/game.o \
@@ -52,7 +53,6 @@
gfx/res_pal.o \
gfx/res_pic.o \
gfx/res_view.o \
- gfx/seq_decoder.o \
gui/gui.o \
gui/gui_animate.o \
gui/gui_cursor.o \
Copied: scummvm/trunk/engines/sci/seq_decoder.cpp (from rev 45152, scummvm/trunk/engines/sci/gfx/seq_decoder.cpp)
===================================================================
--- scummvm/trunk/engines/sci/seq_decoder.cpp (rev 0)
+++ scummvm/trunk/engines/sci/seq_decoder.cpp 2009-10-16 08:26:41 UTC (rev 45153)
@@ -0,0 +1,237 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $URL$
+ * $Id$
+ *
+ */
+
+#include "common/debug.h"
+#include "common/endian.h"
+#include "common/archive.h"
+#include "common/system.h"
+#include "common/util.h"
+
+#include "graphics/surface.h"
+
+#include "sci/seq_decoder.h"
+
+namespace Graphics {
+
+enum seqPalTypes {
+ kSeqPalVariable = 0,
+ kSeqPalConstant = 1
+};
+
+enum seqFrameTypes {
+ kSeqFrameFull = 0,
+ kSeqFrameDiff = 1
+};
+
+SeqDecoder::~SeqDecoder() {
+ closeFile();
+}
+
+bool SeqDecoder::loadFile(const char *fileName, int frameDelay) {
+ closeFile();
+
+ _fileStream = SearchMan.createReadStreamForMember(fileName);
+ if (!_fileStream)
+ return false;
+
+ // Seek to the first frame
+ _videoInfo.currentFrame = 0;
+
+ _videoInfo.width = 320;
+ _videoInfo.height = 200;
+ _videoInfo.frameCount = _fileStream->readUint16LE();
+ // Our frameDelay is calculated in 1/100 ms, so we convert it here
+ _videoInfo.frameDelay = 100 * frameDelay * 1000 / 60;
+ _videoFrameBuffer = new byte[_videoInfo.width * _videoInfo.height];
+
+ // Set palette
+ int paletteSize = _fileStream->readUint32LE();
+
+ byte *paletteData = new byte[paletteSize];
+ _fileStream->read(paletteData, paletteSize);
+
+ // SCI1.1 palette
+ byte palFormat = paletteData[32];
+ uint16 palColorStart = READ_LE_UINT16(paletteData + 25);
+ uint16 palColorCount = READ_LE_UINT16(paletteData + 29);
+
+ byte palette[256 * 4];
+ int palOffset = 37;
+
+ for (uint16 colorNo = palColorStart; colorNo < palColorStart + palColorCount; colorNo++) {
+ if (palFormat == kSeqPalVariable)
+ palOffset++;
+ palette[colorNo * 4 + 0] = paletteData[palOffset++];
+ palette[colorNo * 4 + 1] = paletteData[palOffset++];
+ palette[colorNo * 4 + 2] = paletteData[palOffset++];
+ palette[colorNo * 4 + 3] = 0;
+ }
+
+ g_system->setPalette(palette, 0, 256);
+
+ delete paletteData;
+
+ _videoInfo.firstframeOffset = _fileStream->pos();
+
+ return true;
+}
+
+void SeqDecoder::closeFile() {
+ if (!_fileStream)
+ return;
+
+ delete _fileStream;
+ _fileStream = 0;
+
+ delete[] _videoFrameBuffer;
+ _videoFrameBuffer = 0;
+}
+
+bool SeqDecoder::decodeNextFrame() {
+ int16 frameWidth = _fileStream->readUint16LE();
+ int16 frameHeight = _fileStream->readUint16LE();
+ int16 frameLeft = _fileStream->readUint16LE();
+ int16 frameTop = _fileStream->readUint16LE();
+ byte colorKey = _fileStream->readByte();
+ byte frameType = _fileStream->readByte();
+ _fileStream->skip(2);
+ uint16 frameSize = _fileStream->readUint16LE();
+ _fileStream->skip(2);
+ uint16 rleSize = _fileStream->readUint16LE();
+ _fileStream->skip(6);
+ uint32 offset = _fileStream->readUint32LE();
+
+ _fileStream->seek(offset);
+
+ if (_videoInfo.currentFrame == 0)
+ _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);
+ }
+ } else {
+ byte *buf = new byte[frameSize];
+ _fileStream->read(buf, frameSize);
+ decodeFrame(buf, rleSize, buf + rleSize, frameSize - rleSize, _videoFrameBuffer + 320 * frameTop, frameLeft, frameWidth, frameHeight, colorKey);
+ delete buf;
+ }
+
+ return ++_videoInfo.currentFrame < _videoInfo.frameCount;
+}
+
+#define WRITE_TO_BUFFER(n) \
+ if (writeRow * 320 + writeCol + (n) > 320 * height) { \
+ warning("SEQ player: writing out of bounds, aborting"); \
+ return false; \
+ } \
+ if (litPos + (n) > litSize) { \
+ warning("SEQ player: reading out of bounds, aborting"); \
+ } \
+ memcpy(dest + writeRow * 320 + writeCol, litData + litPos, n);
+
+bool SeqDecoder::decodeFrame(byte *rleData, int rleSize, byte *litData, int litSize, byte *dest, int left, int width, int height, int colorKey) {
+ int writeRow = 0;
+ int writeCol = left;
+ int litPos = 0;
+ int rlePos = 0;
+
+ while (rlePos < rleSize) {
+ int op = rleData[rlePos++];
+
+ if ((op & 0xc0) == 0xc0) {
+ op &= 0x3f;
+ if (op == 0) {
+ // Go to next line in target buffer
+ writeRow++;
+ writeCol = left;
+ } else {
+ // Skip bytes on current line
+ writeCol += op;
+ }
+ } else if (op & 0x80) {
+ op &= 0x3f;
+ if (op == 0) {
+ // Copy remainder of current line
+ int rem = width - (writeCol - left);
+
+ WRITE_TO_BUFFER(rem);
+ writeRow++;
+ writeCol = left;
+ litPos += rem;
+ } else {
+ // Copy bytes
+ WRITE_TO_BUFFER(op);
+ writeCol += op;
+ litPos += op;
+ }
+ } else {
+ uint16 count = ((op & 7) << 8) | rleData[rlePos++];
+
+ switch (op >> 3) {
+ case 2:
+ // Skip bytes
+ writeCol += count;
+ break;
+ case 3:
+ // Copy bytes
+ WRITE_TO_BUFFER(count);
+ writeCol += count;
+ litPos += count;
+ break;
+ case 6: {
+ // Copy rows
+ if (count == 0)
+ count = height - writeRow;
+
+ for (int i = 0; i < count; i++) {
+ WRITE_TO_BUFFER(width);
+ litPos += width;
+ writeRow++;
+ }
+ break;
+ }
+ case 7:
+ // Skip rows
+ if (count == 0)
+ count = height - writeRow;
+
+ writeRow += count;
+ break;
+ default:
+ warning("Unsupported operation %i encountered", op >> 3);
+ return false;
+ }
+ }
+ }
+
+ return true;
+}
+
+} // End of namespace Graphics
Copied: scummvm/trunk/engines/sci/seq_decoder.h (from rev 45152, scummvm/trunk/engines/sci/gfx/seq_decoder.h)
===================================================================
--- scummvm/trunk/engines/sci/seq_decoder.h (rev 0)
+++ scummvm/trunk/engines/sci/seq_decoder.h 2009-10-16 08:26:41 UTC (rev 45153)
@@ -0,0 +1,67 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $URL$
+ * $Id$
+ *
+ */
+
+#ifndef SEQ_DECODER_H
+#define SEQ_DECODER_H
+
+#include "graphics/video/video_player.h"
+
+namespace Graphics {
+
+/**
+ * Implementation of the KQ6 DOS floppy/CD SEQ decoder
+ */
+class SeqDecoder : public VideoDecoder {
+public:
+ SeqDecoder() {}
+ virtual ~SeqDecoder();
+
+ /**
+ * Load a SEQ encoded video file
+ * @param filename the filename to load
+ */
+ bool loadFile(const char *fileName) { return loadFile(fileName, 10); }
+
+ /**
+ * Load a SEQ encoded video file
+ * @param filename the filename to load
+ * @param frameDelay the delay between frames, in ms
+ */
+ bool loadFile(const char *fileName, int frameDelay);
+
+ /**
+ * Close a SEQ encoded video file
+ */
+ void closeFile();
+
+ bool decodeNextFrame();
+
+private:
+ bool decodeFrame(byte *rleData, int rleSize, byte *litData, int litSize, byte *dest, int left, int width, int height, int colorKey);
+};
+
+} // End of namespace Graphics
+
+#endif
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