[Scummvm-cvs-logs] CVS: scummvm/sword1 animation.h,1.10,1.11 animation.cpp,1.19,1.20

Max Horn fingolfin at users.sourceforge.net
Sun Mar 21 17:39:05 CET 2004


Update of /cvsroot/scummvm/scummvm/sword1
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv13283/sword1

Modified Files:
	animation.h animation.cpp 
Log Message:
move commong code into separate source file (more could be done, but it's a start)

Index: animation.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sword1/animation.h,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -d -r1.10 -r1.11
--- animation.h	21 Mar 2004 21:20:25 -0000	1.10
+++ animation.h	22 Mar 2004 01:28:45 -0000	1.11
@@ -27,71 +27,15 @@
 #include "sword1/screen.h"
 #include "sword1/sound.h"
 
-#include "sound/audiostream.h"
-
-namespace Sword1 {
 
 
-#ifdef BACKEND_8BIT
-#define SQR(x) ((x) * (x))
-#define SHIFT 3
-#else
-#define SHIFT 1
-#endif
-
-#define BITDEPTH (1 << (8 - SHIFT))
-#define ROUNDADD (1 << (SHIFT - 1))
-
-#define BUFFER_SIZE 4096
+namespace Sword1 {
 
-class AnimationState {
+class AnimationState : public Graphics::BaseAnimationState {
 private:
 	Screen *_scr;
-	SoundMixer *_snd;
-	OSystem *_sys;
-
-	uint framenum;
-	uint frameskipped;
-	uint32 ticks;
-
-#ifdef USE_MPEG2
-	mpeg2dec_t *decoder;
-	const mpeg2_info_t *info;
-#endif
-
-	File *mpgfile;
-	File *sndfile;
-
-	byte buffer[BUFFER_SIZE];
-
-	PlayingSoundHandle bgSound;
-	AudioStream *bgSoundStream;
-
-#ifdef BACKEND_8BIT
-	int palnum;
-	int maxPalnum;
-
-	byte lookup[2][(BITDEPTH+1) * (BITDEPTH+1) * (BITDEPTH+1)];
-	byte *lut;
-	byte *lut2;
-	int lutcalcnum;
-
-	int curpal;
-	int cr;
-	int pos;
-
-	struct {
-		uint cnt;
-		uint end;
-		byte pal[4 * 256];
-	} palettes[50];
-#else
-	static OverlayColor *lookup;
-	OverlayColor * overlay;
-#endif
 
 public:
-
 	AnimationState(Screen *scr, SoundMixer *snd, OSystem *sys);
 	~AnimationState();
 
@@ -101,12 +45,7 @@
 private:
 
 #ifdef BACKEND_8BIT
-	void buildLookup(int p, int lines);
-	bool checkPaletteSwitch();
 	void setPalette(byte *pal);
-#else
-	void buildLookup(void);
-	void plotYUV(OverlayColor *lut, int width, int height, byte *const *dat);
 #endif
 };
 

Index: animation.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sword1/animation.cpp,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -d -r1.19 -r1.20
--- animation.cpp	21 Mar 2004 18:49:04 -0000	1.19
+++ animation.cpp	22 Mar 2004 01:28:45 -0000	1.20
@@ -22,31 +22,16 @@
 #include "common/stdafx.h"
 #include "common/file.h"
 #include "sword1/animation.h"
+#include "sound/audiostream.h"
 
 
-#define MOVIE_WIDTH		640
-#define MOVIE_HEIGHT	400
-
 namespace Sword1 {
 
 AnimationState::AnimationState(Screen *scr, SoundMixer *snd, OSystem *sys)
-	: _scr(scr), _snd(snd), _sys(sys) {
+	: BaseAnimationState(snd, sys, 640, 400), _scr(scr) {
 }
 
 AnimationState::~AnimationState() {
-#ifdef USE_MPEG2
-	_snd->stopHandle(bgSound);
-	if (decoder)
-		mpeg2_close(decoder);
-	delete mpgfile;
-	delete sndfile;
-#ifndef BACKEND_8BIT
-	_sys->hide_overlay();
-	free(overlay);
-#endif
-	if (bgSoundStream)
-		delete bgSoundStream;
-#endif
 }
 
 bool AnimationState::init(const char *name) {
@@ -155,137 +140,11 @@
 
 
 #ifdef BACKEND_8BIT
-/**
- * Build 'Best-Match' RGB lookup table
- */
-void AnimationState::buildLookup(int p, int lines) {
-	int y, cb;
-	int r, g, b, ii;
-
-	if (p >= maxPalnum)
-		return;
-  
-	if (p != curpal) {
-		curpal = p;
-		cr = 0;
-		pos = 0;
-	}
-
-	if (cr > BITDEPTH)
-		return;
-
-	for (ii = 0; ii < lines; ii++) {
-		r = (-16 * 256 + (int) (256 * 1.596) * ((cr << SHIFT) - 128)) / 256;
-		for (cb = 0; cb <= BITDEPTH; cb++) {
-			g = (-16 * 256 - (int) (0.813 * 256) * ((cr << SHIFT) - 128) - (int) (0.391 * 256) * ((cb << SHIFT) - 128)) / 256;
-			b = (-16 * 256 + (int) (2.018 * 256) * ((cb << SHIFT) - 128)) / 256;
-
-			for (y = 0; y <= BITDEPTH; y++) {
-				int idx, bst = 0;
-				int dis = 2 * SQR(r - palettes[p].pal[0]) + 4 * SQR(g - palettes[p].pal[1]) + SQR(b - palettes[p].pal[2]);
-
-				for (idx = 1; idx < 256; idx++) {
-					long d2 = 2 * SQR(r - palettes[p].pal[4 * idx]) + 4 * SQR(g - palettes[p].pal[4 * idx + 1]) + SQR(b - palettes[p].pal[4 * idx + 2]);
-					if (d2 < dis) {
-						bst = idx;
-						dis = d2;
-					}
-				}
-				lut2[pos++] = bst;
-	
-				r += (1 << SHIFT);
-				g += (1 << SHIFT);
-				b += (1 << SHIFT);
-			}
-			r -= (BITDEPTH+1)*(1 << SHIFT);
-		}
-		cr++;
-		if (cr > BITDEPTH)
-			return;
-	}
-}
-
-bool AnimationState::checkPaletteSwitch() {
-	// if we have reached the last image with this palette, switch to new one
-	if (framenum == palettes[palnum].end) {
-		unsigned char *l = lut2;
-		palnum++;
-		setPalette(palettes[palnum].pal);
-		lutcalcnum = (BITDEPTH + palettes[palnum].end - (framenum + 1) + 2) / (palettes[palnum].end - (framenum + 1) + 2);
-		lut2 = lut;
-		lut = l;
-		return true;
-	}
-
-	return false;
-}
 
 void AnimationState::setPalette(byte *pal) {
 	_sys->setPalette(pal, 0, 256);
 }
 
-#else
-
-OverlayColor *AnimationState::lookup = 0;
-
-void AnimationState::buildLookup() {
-	if (lookup)
-		return;
-
-	lookup = (OverlayColor *)calloc((BITDEPTH+1) * (BITDEPTH+1) * 256, sizeof(OverlayColor));
-
-	int y, cb, cr;
-	int r, g, b;
-	int pos = 0;
-
-	for (cr = 0; cr <= BITDEPTH; cr++) {
-		for (cb = 0; cb <= BITDEPTH; cb++) {
-			for (y = 0; y < 256; y++) {
-				r = ((y - 16) * 256 + (int) (256 * 1.596) * ((cr << SHIFT) - 128)) / 256;
-				g = ((y - 16) * 256 - (int) (0.813 * 256) * ((cr << SHIFT) - 128) - (int) (0.391 * 256) * ((cb << SHIFT) - 128)) / 256;
-				b = ((y - 16) * 256 + (int) (2.018 * 256) * ((cb << SHIFT) - 128)) / 256;
-
-				if (r < 0) r = 0;
-				else if (r > 255) r = 255;
-				if (g < 0) g = 0;
-				else if (g > 255) g = 255;
-				if (b < 0) b = 0;
-				else if (b > 255) b = 255;
-
-				lookup[pos++] = _sys->RGBToColor(r, g, b);
-			}
-		}
-	}
-}
-
-void AnimationState::plotYUV(OverlayColor *lut, int width, int height, byte *const *dat) {
-
-	OverlayColor *ptr = overlay + (MOVIE_HEIGHT - height) / 2 * MOVIE_WIDTH + (MOVIE_WIDTH - width) / 2;
-
-	int x, y;
-
-	int ypos = 0;
-	int cpos = 0;
-	int linepos = 0;
-
-	for (y = 0; y < height; y += 2) {
-		for (x = 0; x < width; x += 2) {
-			int i = ((((dat[2][cpos] + ROUNDADD) >> SHIFT) * (BITDEPTH+1)) + ((dat[1][cpos] + ROUNDADD)>>SHIFT)) * 256;
-			cpos++;
-
-			ptr[linepos                ] = lut[i + dat[0][        ypos  ]];
-			ptr[MOVIE_WIDTH + linepos++] = lut[i + dat[0][width + ypos++]];
-			ptr[linepos                ] = lut[i + dat[0][        ypos  ]];
-			ptr[MOVIE_WIDTH + linepos++] = lut[i + dat[0][width + ypos++]];
-
-		}
-		linepos += (2 * MOVIE_WIDTH - width);
-		ypos += width;
-	}
-
-	_sys->copy_rect_overlay(overlay, MOVIE_WIDTH, 0, 40, MOVIE_WIDTH, MOVIE_HEIGHT);
-}
-
 #endif
 
 bool AnimationState::decodeFrame() {
@@ -344,13 +203,16 @@
 
 #else
 
-				if ((bgSoundStream == NULL) || ((_snd->getChannelElapsedTime(bgSound) * 12) / 1000 < framenum + 1) || frameskipped > 10) {
+				if ((bgSoundStream == NULL) ||
+					((_snd->getChannelElapsedTime(bgSound) * 12) / 1000 < framenum + 1) || frameskipped > 10) {
 					if (frameskipped > 10) {
 						warning("force frame %i redraw", framenum);
 						frameskipped = 0;
 					}
 					plotYUV(lookup, sequence_i->width, sequence_i->height, info->display_fbuf->buf);
 
+					_sys->copy_rect_overlay(overlay, MOVIE_WIDTH, 0, 40, MOVIE_WIDTH, MOVIE_HEIGHT);
+
 					if (bgSoundStream) {
 						while ((_snd->getChannelElapsedTime(bgSound) * 12) / 1000 < framenum)
 							_sys->delay_msecs(10);





More information about the Scummvm-git-logs mailing list