[Scummvm-cvs-logs] SF.net SVN: scummvm: [29347] scummvm/trunk

sev at users.sourceforge.net sev at users.sourceforge.net
Wed Oct 31 22:37:40 CET 2007


Revision: 29347
          http://scummvm.svn.sourceforge.net/scummvm/?rev=29347&view=rev
Author:   sev
Date:     2007-10-31 14:37:40 -0700 (Wed, 31 Oct 2007)

Log Message:
-----------
Slighly modified patch #1709219: "DXA Player: double size scaling option"

Modified Paths:
--------------
    scummvm/trunk/engines/agos/animation.cpp
    scummvm/trunk/engines/sword1/animation.cpp
    scummvm/trunk/engines/sword2/animation.cpp
    scummvm/trunk/graphics/dxa_player.cpp
    scummvm/trunk/graphics/dxa_player.h

Modified: scummvm/trunk/engines/agos/animation.cpp
===================================================================
--- scummvm/trunk/engines/agos/animation.cpp	2007-10-31 21:28:33 UTC (rev 29346)
+++ scummvm/trunk/engines/agos/animation.cpp	2007-10-31 21:37:40 UTC (rev 29347)
@@ -67,7 +67,7 @@
 	// Change file extension to dxa
 	sprintf(videoName, "%s.dxa", baseName);
 
-	if (!loadFile(videoName)) {
+	if (!loadFile(videoName, _vm->_screenWidth, _vm->_screenHeight)) {
 		// Check short filename to work around
 		// bug in a German Windows 2CD version.
 		if (baseLen >= 8) {

Modified: scummvm/trunk/engines/sword1/animation.cpp
===================================================================
--- scummvm/trunk/engines/sword1/animation.cpp	2007-10-31 21:28:33 UTC (rev 29346)
+++ scummvm/trunk/engines/sword1/animation.cpp	2007-10-31 21:37:40 UTC (rev 29347)
@@ -408,7 +408,7 @@
 
 	char filename[20];
 	snprintf(filename, sizeof(filename), "%s.dxa", sequenceList[id]);
-	if (loadFile(filename)) {
+	if (loadFile(filename, 640, 480)) {
 		// The Broken Sword games always use external audio tracks.
 		if (_fd->readUint32BE() != MKID_BE('NULL'))
 			return false;

Modified: scummvm/trunk/engines/sword2/animation.cpp
===================================================================
--- scummvm/trunk/engines/sword2/animation.cpp	2007-10-31 21:28:33 UTC (rev 29346)
+++ scummvm/trunk/engines/sword2/animation.cpp	2007-10-31 21:37:40 UTC (rev 29347)
@@ -516,7 +516,9 @@
 
 	snprintf(filename, sizeof(filename), "%s.dxa", _name);
 
-	if (loadFile(filename)) {
+	if (loadFile(filename,
+			_vm->_screen->getScreenWide(),
+			_vm->_screen->getScreenDeep())) {
 		// The Broken Sword games always use external audio tracks.
 		if (_fd->readUint32BE() != MKID_BE('NULL'))
 			return false;

Modified: scummvm/trunk/graphics/dxa_player.cpp
===================================================================
--- scummvm/trunk/graphics/dxa_player.cpp	2007-10-31 21:28:33 UTC (rev 29346)
+++ scummvm/trunk/graphics/dxa_player.cpp	2007-10-31 21:37:40 UTC (rev 29347)
@@ -31,6 +31,23 @@
 #include <zlib.h>
 #endif
 
+static void scaleUpBy2(byte *dst, byte *src, uint16 width, uint16 h) {
+  uint16 x;
+
+  while (h > 0) {
+    for (x = width; x > 0; x--) {
+      register byte v;
+
+      v = *src++;
+      *dst++ = v;
+      *dst++ = v;
+    }
+    memcpy(dst, dst - width * 2, width * 2);
+    dst += width * 2;
+    h--;
+  }
+}
+
 namespace Graphics {
 
 DXAPlayer::DXAPlayer() {
@@ -40,6 +57,7 @@
 	_frameBuffer2 = 0;
 	_scaledBuffer = 0;
 	_drawBuffer = 0;
+	_scaledBuffer2 = 0;
 
 	_inBuffer = 0;
 	_inBufferSize = 0;
@@ -58,6 +76,8 @@
 	_frameTicks = 0;
 
 	_scaleMode = S_NONE;
+
+	_scaling = 1;
 }
 
 DXAPlayer::~DXAPlayer() {
@@ -66,13 +86,13 @@
 int DXAPlayer::getWidth() {
 	if (!_fd)
 		return 0;
-	return _width;
+	return _width * _scaling;
 }
 
 int DXAPlayer::getHeight() {
 	if (!_fd)
 		return 0;
-	return _height;
+	return _height * _scaling;
 }
 
 int DXAPlayer::getCurFrame() {
@@ -87,6 +107,25 @@
 	return _framesCount;
 }
 
+bool DXAPlayer::loadFile(const char *filename, uint16 maxWidth, uint16 maxHeight) {
+	bool result = loadFile(filename);
+
+	if (result) {
+		_scaling = MIN(maxWidth / _width, maxHeight / _height);
+		if (_scaling < 1)
+			_scaling = 1;
+		if (_scaling > 2)
+			_scaling = 2;
+		if (_scaling >= 2) {
+			_scaledBuffer2 = (uint8 *)malloc(_width * _height * _scaling * _scaling);
+			if (!_scaledBuffer2) {
+				_scaling = 1;
+			}
+		}
+	}
+	return result;
+}
+
 bool DXAPlayer::loadFile(const char *filename) {
 	uint32 tag;
 	int32 frameRate;
@@ -189,6 +228,7 @@
 	free(_frameBuffer1);
 	free(_frameBuffer2);
 	free(_scaledBuffer);
+	free(_scaledBuffer2);
 	free(_inBuffer);
 	free(_decompBuffer);
 
@@ -588,6 +628,12 @@
 		_drawBuffer = _frameBuffer1;
 		break;
 	}
+
+	if (_scaling == 2) {
+		/* Scale up here */
+		scaleUpBy2(_scaledBuffer2, _drawBuffer, _width, _height);
+		_drawBuffer = _scaledBuffer2;
+	}
 }
 
 } // End of namespace Graphics

Modified: scummvm/trunk/graphics/dxa_player.h
===================================================================
--- scummvm/trunk/graphics/dxa_player.h	2007-10-31 21:28:33 UTC (rev 29346)
+++ scummvm/trunk/graphics/dxa_player.h	2007-10-31 21:37:40 UTC (rev 29347)
@@ -47,6 +47,7 @@
 	byte *_frameBuffer2;
 	byte *_scaledBuffer;
 	byte *_drawBuffer;
+	byte *_scaledBuffer2;
 	byte *_inBuffer;
 	uint32 _inBufferSize;
 	byte *_decompBuffer;
@@ -60,6 +61,7 @@
 	uint16 _frameSkipped;
 	uint32 _frameTicks;
 	ScaleMode _scaleMode;
+	uint32 _scaling;
 
 public:
 	DXAPlayer();
@@ -98,6 +100,14 @@
 	bool loadFile(const char *filename);
 
 	/**
+	 * Load a DXA encoded video file and setup scaling if required
+	 * @param filename	the filename to load
+	 * @param maxWidth      the maximum width  available to the film
+	 * @param maxHeight     the maximum height available to the film
+	 */
+	bool loadFile(const char *filename, uint16 maxWidth, uint16 maxHeight);
+
+	/**
 	 * Close a DXA encoded video file
 	 */
 	void closeFile();


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