[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