[Scummvm-cvs-logs] SF.net SVN: scummvm:[35368] scummvm/trunk
Kirben at users.sourceforge.net
Kirben at users.sourceforge.net
Mon Dec 15 00:41:48 CET 2008
Revision: 35368
http://scummvm.svn.sourceforge.net/scummvm/?rev=35368&view=rev
Author: Kirben
Date: 2008-12-14 23:41:48 +0000 (Sun, 14 Dec 2008)
Log Message:
-----------
Enable Smacker support, and switch later HE games to Smacker support (since they aren't supported yet).
Modified Paths:
--------------
scummvm/trunk/engines/agos/animation.cpp
scummvm/trunk/engines/scumm/he/animation_he.cpp
scummvm/trunk/engines/scumm/he/animation_he.h
scummvm/trunk/engines/sword1/animation.cpp
scummvm/trunk/engines/sword2/animation.cpp
scummvm/trunk/graphics/dxa_player.cpp
scummvm/trunk/graphics/dxa_player.h
scummvm/trunk/graphics/module.mk
scummvm/trunk/graphics/smk_player.cpp
scummvm/trunk/graphics/smk_player.h
Modified: scummvm/trunk/engines/agos/animation.cpp
===================================================================
--- scummvm/trunk/engines/agos/animation.cpp 2008-12-14 22:32:32 UTC (rev 35367)
+++ scummvm/trunk/engines/agos/animation.cpp 2008-12-14 23:41:48 UTC (rev 35368)
@@ -106,14 +106,14 @@
void MoviePlayer::playOmniTV() {
// Load OmniTV video
- if (_fd) {
+ if (_fileStream) {
_vm->setBitFlag(42, false);
_omniTV = true;
startSound();
} else {
if (_omniTVFile) {
// Restore state
- _fd = _omniTVFile;
+ _fileStream = _omniTVFile;
_mixer->pauseHandle(_omniTVSound, false);
_vm->setBitFlag(42, false);
@@ -175,14 +175,14 @@
byte *buffer;
uint32 offset, size, tag;
- tag = _fd->readUint32BE();
+ tag = _fileStream->readUint32BE();
if (tag == MKID_BE('WAVE')) {
- size = _fd->readUint32BE();
+ size = _fileStream->readUint32BE();
if (_sequenceNum) {
Common::File in;
- _fd->seek(size, SEEK_CUR);
+ _fileStream->seek(size, SEEK_CUR);
in.open((const char *)"audio.wav");
if (!in.isOpen()) {
@@ -199,7 +199,7 @@
in.close();
} else {
buffer = (byte *)malloc(size);
- _fd->read(buffer, size);
+ _fileStream->read(buffer, size);
}
Common::MemoryReadStream stream(buffer, size);
@@ -226,10 +226,10 @@
if (_vm->getBitFlag(42)) {
// Save state
- _omniTVFile = _fd;
+ _omniTVFile = _fileStream;
_mixer->pauseHandle(_omniTVSound, true);
- _fd = 0;
+ _fileStream = 0;
_omniTV = false;
return;
}
Modified: scummvm/trunk/engines/scumm/he/animation_he.cpp
===================================================================
--- scummvm/trunk/engines/scumm/he/animation_he.cpp 2008-12-14 22:32:32 UTC (rev 35367)
+++ scummvm/trunk/engines/scumm/he/animation_he.cpp 2008-12-14 23:41:48 UTC (rev 35368)
@@ -33,59 +33,41 @@
namespace Scumm {
MoviePlayer::MoviePlayer(ScummEngine_v90he *vm, Audio::Mixer *mixer)
- : DXAPlayer(), _vm(vm), _mixer(mixer) {
+ : SMKPlayer(), _vm(vm), _mixer(mixer) {
_flags = 0;
_wizResNum = 0;
}
int MoviePlayer::getImageNum() {
- if (!_fd)
+ if (!_fileStream)
return 0;
return _wizResNum;
}
int MoviePlayer::load(const char *filename, int flags, int image) {
- char videoName[100];
-
- if (_fd) {
+ if (_fileStream) {
closeFile();
}
- int baseLen = strlen(filename) - 4;
- memset(baseName, 0, sizeof(baseName));
- memcpy(baseName, filename, baseLen);
-
- // Change file extension to dxa
- sprintf(videoName, "%s.dxa", baseName);
-
- if (!loadFile(videoName)) {
- warning("Failed to load video file %s", videoName);
+ if (!loadFile(filename)) {
+ warning("Failed to load video file %s", filename);
return -1;
}
- debug(1, "Playing video %s", videoName);
+ debug(1, "Playing video %s", filename);
- // Skip sound tag
- _fd->readUint32BE();
-
if (flags & 2) {
- _vm->_wiz->createWizEmptyImage(image, 0, 0, _width, _height);
+ _vm->_wiz->createWizEmptyImage(image, 0, 0, getWidth(), getHeight());
}
_flags = flags;
_wizResNum = image;
- _bgSoundStream = Audio::AudioStream::openStreamFile(baseName);
- if (_bgSoundStream != NULL) {
- _mixer->stopHandle(_bgSound);
- _mixer->playInputStream(Audio::Mixer::kSFXSoundType, &_bgSound, _bgSoundStream);
- }
-
return 0;
}
void MoviePlayer::handleNextFrame() {
- if (_fd == false) {
+ if (_fileStream == false) {
return;
}
@@ -102,16 +84,15 @@
} else if (_flags & 1) {
copyFrameToBuffer(pvs->getBackPixels(0, 0), 0, 0, _vm->_screenWidth);
- Common::Rect imageRect(_width, _height);
+ Common::Rect imageRect(getWidth(), getHeight());
_vm->restoreBackgroundHE(imageRect);
} else {
copyFrameToBuffer(pvs->getPixels(0, 0), 0, 0, _vm->_screenWidth);
- _vm->markRectAsDirty(kMainVirtScreen, 0, 0, _width, _height);
+ _vm->markRectAsDirty(kMainVirtScreen, 0, 0, getWidth(), getHeight());
}
- _frameNum++;
- if (_frameNum == _framesCount) {
+ if (getCurFrame() == _framesCount) {
closeFile();
}
}
Modified: scummvm/trunk/engines/scumm/he/animation_he.h
===================================================================
--- scummvm/trunk/engines/scumm/he/animation_he.h 2008-12-14 22:32:32 UTC (rev 35367)
+++ scummvm/trunk/engines/scumm/he/animation_he.h 2008-12-14 23:41:48 UTC (rev 35368)
@@ -28,7 +28,7 @@
#include "common/file.h"
-#include "graphics/dxa_player.h"
+#include "graphics/smk_player.h"
#include "sound/mixer.h"
@@ -36,7 +36,7 @@
class ScummEngine_v90he;
-class MoviePlayer : public Graphics::DXAPlayer {
+class MoviePlayer : public Graphics::SMKPlayer {
ScummEngine_v90he *_vm;
Audio::Mixer *_mixer;
Modified: scummvm/trunk/engines/sword1/animation.cpp
===================================================================
--- scummvm/trunk/engines/sword1/animation.cpp 2008-12-14 22:32:32 UTC (rev 35367)
+++ scummvm/trunk/engines/sword1/animation.cpp 2008-12-14 23:41:48 UTC (rev 35368)
@@ -409,7 +409,7 @@
snprintf(filename, sizeof(filename), "%s.dxa", sequenceList[id]);
if (loadFile(filename)) {
// The Broken Sword games always use external audio tracks.
- if (_fd->readUint32BE() != MKID_BE('NULL'))
+ if (_fileStream->readUint32BE() != MKID_BE('NULL'))
return false;
_frameWidth = getWidth();
_frameHeight = getHeight();
Modified: scummvm/trunk/engines/sword2/animation.cpp
===================================================================
--- scummvm/trunk/engines/sword2/animation.cpp 2008-12-14 22:32:32 UTC (rev 35367)
+++ scummvm/trunk/engines/sword2/animation.cpp 2008-12-14 23:41:48 UTC (rev 35368)
@@ -547,7 +547,7 @@
if (loadFile(filename)) {
// The Broken Sword games always use external audio tracks.
- if (_fd->readUint32BE() != MKID_BE('NULL'))
+ if (_fileStream->readUint32BE() != MKID_BE('NULL'))
return false;
_frameBuffer = _vm->_screen->getScreen();
Modified: scummvm/trunk/graphics/dxa_player.cpp
===================================================================
--- scummvm/trunk/graphics/dxa_player.cpp 2008-12-14 22:32:32 UTC (rev 35367)
+++ scummvm/trunk/graphics/dxa_player.cpp 2008-12-14 23:41:48 UTC (rev 35368)
@@ -35,7 +35,7 @@
namespace Graphics {
DXAPlayer::DXAPlayer() {
- _fd = 0;
+ _fileStream = 0;
_frameBuffer1 = 0;
_frameBuffer2 = 0;
@@ -66,25 +66,25 @@
}
int DXAPlayer::getWidth() {
- if (!_fd)
+ if (!_fileStream)
return 0;
return _width;
}
int DXAPlayer::getHeight() {
- if (!_fd)
+ if (!_fileStream)
return 0;
return _height;
}
int DXAPlayer::getCurFrame() {
- if (!_fd)
+ if (!_fileStream)
return -1;
return _frameNum;
}
int DXAPlayer::getFrameCount() {
- if (!_fd)
+ if (!_fileStream)
return 0;
return _framesCount;
}
@@ -99,14 +99,14 @@
return 0;
}
- _fd = file;
+ _fileStream = file;
- tag = _fd->readUint32BE();
+ tag = _fileStream->readUint32BE();
assert(tag == MKID_BE('DEXA'));
- uint8 flags = _fd->readByte();
- _framesCount = _fd->readUint16BE();
- frameRate = _fd->readUint32BE();
+ uint8 flags = _fileStream->readByte();
+ _framesCount = _fileStream->readUint16BE();
+ frameRate = _fileStream->readUint32BE();
if (frameRate > 0)
_framesPerSec = 1000 / frameRate;
@@ -120,8 +120,8 @@
else
_frameTicks = frameRate;
- _width = _fd->readUint16BE();
- _height = _fd->readUint16BE();
+ _width = _fileStream->readUint16BE();
+ _height = _fileStream->readUint16BE();
if (flags & 0x80) {
_scaleMode = S_INTERLACED;
@@ -156,20 +156,20 @@
uint32 size;
do {
- tag = _fd->readUint32BE();
+ tag = _fileStream->readUint32BE();
if (tag != 0) {
- size = _fd->readUint32BE();
+ size = _fileStream->readUint32BE();
}
switch (tag) {
case 0: // No more tags
break;
case MKID_BE('MAXD'):
assert(size == 4);
- _decompBufferSize = _fd->readUint32BE();
+ _decompBufferSize = _fileStream->readUint32BE();
break;
default: // Unknown tag - skip it.
while (size > 0) {
- byte dummy = _fd->readByte();
+ byte dummy = _fileStream->readByte();
size--;
}
break;
@@ -184,10 +184,10 @@
}
void DXAPlayer::closeFile() {
- if (!_fd)
+ if (!_fileStream)
return;
- delete _fd;
+ delete _fileStream;
free(_frameBuffer1);
free(_frameBuffer2);
@@ -195,7 +195,7 @@
free(_inBuffer);
free(_decompBuffer);
- _fd = 0;
+ _fileStream = 0;
_inBuffer = 0;
_decompBuffer = 0;
}
@@ -513,18 +513,18 @@
void DXAPlayer::decodeNextFrame() {
uint32 tag;
- tag = _fd->readUint32BE();
+ tag = _fileStream->readUint32BE();
if (tag == MKID_BE('CMAP')) {
byte rgb[768];
- _fd->read(rgb, ARRAYSIZE(rgb));
+ _fileStream->read(rgb, ARRAYSIZE(rgb));
setPalette(rgb);
}
- tag = _fd->readUint32BE();
+ tag = _fileStream->readUint32BE();
if (tag == MKID_BE('FRAM')) {
- byte type = _fd->readByte();
- uint32 size = _fd->readUint32BE();
+ byte type = _fileStream->readByte();
+ uint32 size = _fileStream->readUint32BE();
if ((_inBuffer == NULL) || (_inBufferSize < size)) {
free(_inBuffer);
_inBuffer = (byte *)malloc(size);
@@ -533,7 +533,7 @@
_inBufferSize = size;
}
- _fd->read(_inBuffer, size);
+ _fileStream->read(_inBuffer, size);
switch (type) {
case 2:
Modified: scummvm/trunk/graphics/dxa_player.h
===================================================================
--- scummvm/trunk/graphics/dxa_player.h 2008-12-14 22:32:32 UTC (rev 35367)
+++ scummvm/trunk/graphics/dxa_player.h 2008-12-14 23:41:48 UTC (rev 35368)
@@ -61,7 +61,7 @@
DXAPlayer();
virtual ~DXAPlayer();
- Common::SeekableReadStream *_fd;
+ Common::SeekableReadStream *_fileStream;
/**
* Returns the width of the video
Modified: scummvm/trunk/graphics/module.mk
===================================================================
--- scummvm/trunk/graphics/module.mk 2008-12-14 22:32:32 UTC (rev 35367)
+++ scummvm/trunk/graphics/module.mk 2008-12-14 23:41:48 UTC (rev 35368)
@@ -17,6 +17,7 @@
primitives.o \
scaler.o \
scaler/thumbnail_intern.o \
+ smk_player.o \
surface.o \
thumbnail.o \
VectorRenderer.o \
Modified: scummvm/trunk/graphics/smk_player.cpp
===================================================================
--- scummvm/trunk/graphics/smk_player.cpp 2008-12-14 22:32:32 UTC (rev 35367)
+++ scummvm/trunk/graphics/smk_player.cpp 2008-12-14 23:41:48 UTC (rev 35368)
@@ -154,7 +154,7 @@
int r2 = decodeTree(length + 1);
return r1+r2+1;
-};
+}
uint16 SmallHuffmanTree::getCode(BitStream &bs) {
uint16 *p = &_tree[0];
@@ -235,7 +235,7 @@
delete _loBytes;
delete _hiBytes;
-};
+}
void BigHuffmanTree::reset() {
_tree[_last[0]] = _tree[_last[1]] = _tree[_last[2]] = 0;
@@ -312,7 +312,7 @@
}
SMKPlayer::SMKPlayer()
- : _currentSMKFrame(0) {
+ : _currentSMKFrame(0),_fileStream(0) {
}
SMKPlayer::~SMKPlayer() {
@@ -322,49 +322,53 @@
bool SMKPlayer::loadFile(const char *fileName) {
closeFile();
- if (!_fileStream.open(fileName)) {
+ Common::File *file = new Common::File();
+ if (!file->open(fileName)) {
+ delete file;
return false;
}
+ _fileStream = file;
+
// Seek to the first frame
_currentSMKFrame = 0;
- _header.signature = _fileStream.readUint32BE();
+ _header.signature = _fileStream->readUint32BE();
assert(_header.signature == MKID_BE('SMK2') || _header.signature == MKID_BE('SMK4'));
- _header.width = _fileStream.readUint32LE();
- _header.height = _fileStream.readUint32LE();
- _header.frames = _fileStream.readUint32LE();
+ _header.width = _fileStream->readUint32LE();
+ _header.height = _fileStream->readUint32LE();
+ _header.frames = _fileStream->readUint32LE();
_framesCount = _header.frames;
- _header.frameRate = (int32)_fileStream.readUint32LE();
- _header.flags = _fileStream.readUint32LE();
+ _header.frameRate = (int32)_fileStream->readUint32LE();
+ _header.flags = _fileStream->readUint32LE();
unsigned int i;
for (i = 0; i < 7; ++i)
- _header.audioSize[i] = _fileStream.readUint32LE();
+ _header.audioSize[i] = _fileStream->readUint32LE();
- _header.treesSize = _fileStream.readUint32LE();
- _header.mMapSize = _fileStream.readUint32LE();
- _header.mClrSize = _fileStream.readUint32LE();
- _header.fullSize = _fileStream.readUint32LE();
- _header.typeSize = _fileStream.readUint32LE();
+ _header.treesSize = _fileStream->readUint32LE();
+ _header.mMapSize = _fileStream->readUint32LE();
+ _header.mClrSize = _fileStream->readUint32LE();
+ _header.fullSize = _fileStream->readUint32LE();
+ _header.typeSize = _fileStream->readUint32LE();
for (i = 0; i < 7; ++i)
- _header.audioRate[i] = _fileStream.readUint32LE();
+ _header.audioRate[i] = _fileStream->readUint32LE();
- _header.dummy = _fileStream.readUint32LE();
+ _header.dummy = _fileStream->readUint32LE();
_frameSizes = (uint32 *)malloc(_header.frames * sizeof(uint32));
for (i = 0; i < _header.frames; ++i)
- _frameSizes[i] = _fileStream.readUint32LE();
+ _frameSizes[i] = _fileStream->readUint32LE();
_frameTypes = (uint32 *)malloc(_header.frames * sizeof(uint32));
for (i = 0; i < _header.frames; ++i)
- _frameTypes[i] = _fileStream.readByte();
+ _frameTypes[i] = _fileStream->readByte();
Common::Array<byte> huffmanTrees;
huffmanTrees.resize(_header.treesSize + 2);
- _fileStream.read(&huffmanTrees[0], _header.treesSize);
+ _fileStream->read(&huffmanTrees[0], _header.treesSize);
BitStream bs(&huffmanTrees[0], _header.treesSize + 2);
@@ -380,18 +384,20 @@
}
void SMKPlayer::closeFile() {
- if (_fileStream.isOpen()) {
- delete _MMapTree;
- delete _MClrTree;
- delete _FullTree;
- delete _TypeTree;
+ if (!_fileStream)
+ return;
- free(_frameSizes);
- free(_frameTypes);
- free(_image);
- free(_palette);
- }
- _fileStream.close();
+ delete _MMapTree;
+ delete _MClrTree;
+ delete _FullTree;
+ delete _TypeTree;
+
+ free(_frameSizes);
+ free(_frameTypes);
+ free(_image);
+ free(_palette);
+
+ _fileStream = 0;
}
void SMKPlayer::copyFrameToBuffer(byte *dst, uint x, uint y, uint pitch) {
@@ -411,7 +417,7 @@
bool SMKPlayer::decodeNextFrame() {
uint i;
- uint32 startPos = _fileStream.pos();
+ uint32 startPos = _fileStream->pos();
_paletteDidChange = false;
if (_frameTypes[_currentSMKFrame] & 1) {
@@ -426,20 +432,20 @@
if (!(_frameTypes[_currentSMKFrame] & (2 << i)))
continue;
- uint32 len = _fileStream.readUint32LE();
- //uint32 unpackedLen = _fileStream.readUint32LE();
- _fileStream.skip(len - 4);
+ uint32 len = _fileStream->readUint32LE();
+ //uint32 unpackedLen = _fileStream->readUint32LE();
+ _fileStream->skip(len - 4);
}
uint32 frameSize = _frameSizes[_currentSMKFrame] & ~3;
- if (_fileStream.pos() - startPos > frameSize)
+ if (_fileStream->pos() - startPos > frameSize)
exit(1);
- uint32 frameDataSize = frameSize - (_fileStream.pos() - startPos);
+ uint32 frameDataSize = frameSize - (_fileStream->pos() - startPos);
_frameData = (byte *)malloc(frameDataSize + 2);
- _fileStream.read(_frameData, frameDataSize);
+ _fileStream->read(_frameData, frameDataSize);
BitStream bs(_frameData, frameDataSize + 2);
@@ -590,7 +596,7 @@
}
}
- _fileStream.seek(startPos + frameSize);
+ _fileStream->seek(startPos + frameSize);
free(_frameData);
@@ -598,11 +604,11 @@
}
void SMKPlayer::unpackPalette() {
- uint startPos = _fileStream.pos();
- uint32 len = 4 * _fileStream.readByte();
+ uint startPos = _fileStream->pos();
+ uint32 len = 4 * _fileStream->readByte();
byte *chunk = (byte *)malloc(len);
- _fileStream.read(&chunk[0], len);
+ _fileStream->read(&chunk[0], len);
byte *p = &chunk[0];
byte oldPalette[3*256];
@@ -642,7 +648,7 @@
}
}
- _fileStream.seek(startPos + len);
+ _fileStream->seek(startPos + len);
free(chunk);
}
Modified: scummvm/trunk/graphics/smk_player.h
===================================================================
--- scummvm/trunk/graphics/smk_player.h 2008-12-14 22:32:32 UTC (rev 35367)
+++ scummvm/trunk/graphics/smk_player.h 2008-12-14 23:41:48 UTC (rev 35368)
@@ -50,8 +50,10 @@
class SMKPlayer {
public:
SMKPlayer();
- ~SMKPlayer();
+ virtual ~SMKPlayer();
+ Common::SeekableReadStream *_fileStream;
+
/**
* Returns the width of the video
* @return the width of the video
@@ -68,7 +70,7 @@
* Returns the current frame number of the video
* @return the current frame number of the video
*/
- uint32 getCurrentFrame() { return _currentSMKFrame; }
+ uint32 getCurFrame() { return _currentSMKFrame; }
/**
* Returns the amount of frames in the video
@@ -124,7 +126,6 @@
private:
void unpackPalette();
- Common::File _fileStream;
uint32 _currentSMKFrame;
struct {
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