diff options
| -rw-r--r-- | engines/sci/engine/kgraphics.cpp | 19 | 
1 files changed, 16 insertions, 3 deletions
| diff --git a/engines/sci/engine/kgraphics.cpp b/engines/sci/engine/kgraphics.cpp index 84fbbe98eb..41aca3ff49 100644 --- a/engines/sci/engine/kgraphics.cpp +++ b/engines/sci/engine/kgraphics.cpp @@ -1253,15 +1253,27 @@ reg_t kPlayVMD(EngineState *s, int argc, reg_t *argv) {  			g_sci->_gfxCursor->kernelHide();  		if (videoDecoder && videoDecoder->loadFile(fileName)) { -			uint16 x = (g_system->getWidth() - videoDecoder->getWidth()) / 2; -			uint16 y = (g_system->getHeight() - videoDecoder->getHeight()) / 2; +			//uint16 x = (g_system->getWidth() - videoDecoder->getWidth()) / 2; +			//uint16 y = (g_system->getHeight() - videoDecoder->getHeight()) / 2; +			uint16 w = videoDecoder->getWidth() * 2; +			uint16 h = videoDecoder->getHeight() * 2; +			uint16 x = (g_system->getWidth() - w) / 2; +			uint16 y = (g_system->getHeight() - h) / 2; +			byte *frameBuf = new byte[w * h]; +  			bool skipVideo = false;  			while (!g_engine->shouldQuit() && !videoDecoder->endOfVideo() && !skipVideo) {  				if (videoDecoder->needsUpdate()) {  					Graphics::Surface *frame = videoDecoder->decodeNextFrame(); +  					if (frame) { -						g_system->copyRectToScreen((byte *)frame->pixels, frame->pitch, x, y, frame->w, frame->h); +						//g_system->copyRectToScreen((byte *)frame->pixels, frame->pitch, x, y, frame->w, frame->h); +						// All the VMD videos in SCI2.1 need to be scaled by 2 +						// TODO: This isn't optimized much, but since the VMD decoder code will be revamped, we +						// don't really care about performance at this point anyway +						g_sci->_gfxScreen->scale2x((byte *)frame->pixels, frameBuf, videoDecoder->getWidth(), videoDecoder->getHeight()); +						g_system->copyRectToScreen(frameBuf, frame->pitch * 2, x, y, frame->w * 2, frame->h * 2);  						if (videoDecoder->hasDirtyPalette())  							videoDecoder->setSystemPalette(); @@ -1282,6 +1294,7 @@ reg_t kPlayVMD(EngineState *s, int argc, reg_t *argv) {  			// Copy video contents to screen buffer  			g_sci->_gfxScreen->kernelSyncWithFramebuffer(); +			delete frameBuf;  			delete videoDecoder;  		} else  			warning("Could not play video %s\n", fileName.c_str()); | 
