[Scummvm-cvs-logs] SF.net SVN: scummvm:[55803] scummvm/trunk/engines/sci/video
thebluegr at users.sourceforge.net
thebluegr at users.sourceforge.net
Mon Feb 7 14:49:05 CET 2011
Revision: 55803
http://scummvm.svn.sourceforge.net/scummvm/?rev=55803&view=rev
Author: thebluegr
Date: 2011-02-07 13:49:03 +0000 (Mon, 07 Feb 2011)
Log Message:
-----------
SCI: Unified the SEQ and robot palette code, and fixed the include safeguard of the SEQ decoder
Modified Paths:
--------------
scummvm/trunk/engines/sci/video/robot_decoder.cpp
scummvm/trunk/engines/sci/video/robot_decoder.h
scummvm/trunk/engines/sci/video/seq_decoder.cpp
scummvm/trunk/engines/sci/video/seq_decoder.h
Modified: scummvm/trunk/engines/sci/video/robot_decoder.cpp
===================================================================
--- scummvm/trunk/engines/sci/video/robot_decoder.cpp 2011-02-07 13:36:59 UTC (rev 55802)
+++ scummvm/trunk/engines/sci/video/robot_decoder.cpp 2011-02-07 13:49:03 UTC (rev 55803)
@@ -69,6 +69,11 @@
#ifdef ENABLE_SCI32
+enum robotPalTypes {
+ kRobotPalVariable = 0,
+ kRobotPalConstant = 1
+};
+
RobotDecoder::RobotDecoder(Audio::Mixer *mixer, bool isBigEndian) {
_surface = 0;
_fileStream = 0;
@@ -116,7 +121,7 @@
_mixer->playStream(Audio::Mixer::kMusicSoundType, &_audioHandle, _audioStream);
}
- readPaletteChunk();
+ readPaletteChunk(_header.paletteDataSize);
readFrameSizesChunk();
return true;
}
@@ -143,11 +148,12 @@
_fileStream->skip(_header.unkChunkDataSize);
}
-void RobotDecoder::readPaletteChunk() {
- byte *paletteData = new byte[_header.paletteDataSize];
- _fileStream->read(paletteData, _header.paletteDataSize);
+void RobotDecoder::readPaletteChunk(uint16 chunkSize) {
+ byte *paletteData = new byte[chunkSize];
+ _fileStream->read(paletteData, chunkSize);
// SCI1.1 palette
+ byte palFormat = paletteData[32];
uint16 palColorStart = READ_SCI11ENDIAN_UINT16(paletteData + 25);
uint16 palColorCount = READ_SCI11ENDIAN_UINT16(paletteData + 29);
@@ -155,6 +161,8 @@
memset(_palette, 0, 256 * 3);
for (uint16 colorNo = palColorStart; colorNo < palColorStart + palColorCount; colorNo++) {
+ if (palFormat == kRobotPalVariable)
+ palOffset++;
_palette[colorNo * 3 + 0] = paletteData[palOffset++];
_palette[colorNo * 3 + 1] = paletteData[palOffset++];
_palette[colorNo * 3 + 2] = paletteData[palOffset++];
Modified: scummvm/trunk/engines/sci/video/robot_decoder.h
===================================================================
--- scummvm/trunk/engines/sci/video/robot_decoder.h 2011-02-07 13:36:59 UTC (rev 55802)
+++ scummvm/trunk/engines/sci/video/robot_decoder.h 2011-02-07 13:49:03 UTC (rev 55803)
@@ -78,7 +78,7 @@
private:
void readHeaderChunk();
- void readPaletteChunk();
+ void readPaletteChunk(uint16 chunkSize);
void readFrameSizesChunk();
void freeData();
Modified: scummvm/trunk/engines/sci/video/seq_decoder.cpp
===================================================================
--- scummvm/trunk/engines/sci/video/seq_decoder.cpp 2011-02-07 13:36:59 UTC (rev 55802)
+++ scummvm/trunk/engines/sci/video/seq_decoder.cpp 2011-02-07 13:49:03 UTC (rev 55803)
@@ -66,11 +66,16 @@
_frameCount = _fileStream->readUint16LE();
// Set palette
- int paletteSize = _fileStream->readUint32LE();
+ int paletteChunkSize = _fileStream->readUint32LE();
+ readPaletteChunk(paletteChunkSize);
- byte *paletteData = new byte[paletteSize];
- _fileStream->read(paletteData, paletteSize);
+ return true;
+}
+void SeqDecoder::readPaletteChunk(uint16 chunkSize) {
+ byte *paletteData = new byte[chunkSize];
+ _fileStream->read(paletteData, chunkSize);
+
// SCI1.1 palette
byte palFormat = paletteData[32];
uint16 palColorStart = READ_LE_UINT16(paletteData + 25);
@@ -89,7 +94,6 @@
_dirtyPalette = true;
delete[] paletteData;
- return true;
}
void SeqDecoder::close() {
Modified: scummvm/trunk/engines/sci/video/seq_decoder.h
===================================================================
--- scummvm/trunk/engines/sci/video/seq_decoder.h 2011-02-07 13:36:59 UTC (rev 55802)
+++ scummvm/trunk/engines/sci/video/seq_decoder.h 2011-02-07 13:49:03 UTC (rev 55803)
@@ -23,8 +23,8 @@
*
*/
-#ifndef SEQ_DECODER_H
-#define SEQ_DECODER_H
+#ifndef SCI_VIDEO_SEQ_DECODER_H
+#define SCI_VIDEO_SEQ_DECODER_H
#include "video/video_decoder.h"
@@ -61,6 +61,7 @@
SEQ_SCREEN_HEIGHT = 200
};
+ void readPaletteChunk(uint16 chunkSize);
bool decodeFrame(byte *rleData, int rleSize, byte *litData, int litSize, byte *dest, int left, int width, int height, int colorKey);
uint16 _width, _height;
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