[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