[Scummvm-cvs-logs] CVS: scummvm/scumm/smush codec47.cpp,1.53,1.54 codec47.h,1.16,1.17

Pawel Kolodziejski aquadran at users.sourceforge.net
Sun Aug 17 09:11:09 CEST 2003


Update of /cvsroot/scummvm/scummvm/scumm/smush
In directory sc8-pr-cvs1:/tmp/cvs-serv9300

Modified Files:
	codec47.cpp codec47.h 
Log Message:
some cleanup in codec47

Index: codec47.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/smush/codec47.cpp,v
retrieving revision 1.53
retrieving revision 1.54
diff -u -d -r1.53 -r1.54
--- codec47.cpp	19 Jul 2003 14:26:25 -0000	1.53
+++ codec47.cpp	17 Aug 2003 16:10:58 -0000	1.54
@@ -67,150 +67,26 @@
 	} while (0)
 
 #ifdef __PALM_OS__
-static int32 *codec37_table;
+static int32 *codec47_8x8_table_small_line1;
+static int32 *codec47_8x8_table_small_line2;
+static int32 *codec47_8x8_table_big_line1;
+static int32 *codec47_8x8_table_big_line2;
 static int16 *codec47_table;
 #else
-static int32 codec37_table[] = {
-       0,       1,       2,       3,       3,       3,
-       3,       2,       1,       0,       0,       0,
-       1,       2,       2,       1,       0,       0,
-       0,       0,       1,       2,       3,       3,
-       3,       3,       2,       1,       1,       1,
-       2,       2,       0,       2,       5,       7,
-       7,       7,       7,       7,       7,       5,
-       2,       0,       0,       0,       0,       0,
-       0,       0,       0,       0,       1,       3,
-       4,       6,       7,       7,       7,       7,
-       6,       4,       3,       1,      -1,       0,
-       0,       0,       0,       0,       0,       1,
-       2,       3,       5,       8,      13,      21,
-   65535,   65534,   65533,   65531,   65528,   65523,
-   65519,   65515,   65536,   65537,   65538,   65539,
-   65541,   65544,   65549,   65557,  131071,  131070,
-  131069,  131067,  131064,  131059,  131055,  131051,
-  131072,  131073,  131074,  131075,  131077,  131080,
-  131085,  131093,  196607,  196606,  196605,  196603,
-  196600,  196595,  196591,  196587,  196608,  196609,
-  196610,  196611,  196613,  196616,  196621,  196629,
-  262143,  262142,  262141,  262139,  262136,  262131,
-  262127,  262123,  327680,  327681,  327682,  327683,
-  327685,  327688,  327693,  327701,  393215,  393214,
-  393213,  393211,  393208,  393203,  393199,  393195,
-  524288,  524289,  524290,  524291,  524293,  524296,
-  524301,  524309,  589823,  589822,  589821,  589819,
-  589816,  589811,  589807,  589803,  851968,  851969,
-  851970,  851971,  851973,  851976,  851981,  851989,
-  917503,  917502,  917501,  917499,  917496,  917491,
-  917487,  917483, 1376256, 1376257, 1376258, 1376259,
- 1376261, 1376264, 1376269, 1376277, 1441791, 1441790,
- 1441789, 1441787, 1441784, 1441779, 1441775, 1441771,
-  -65536,  -65535,  -65534,  -65533,  -65531,  -65528,
-  -65523,  -65515,      -1,      -2,      -3,      -5,
-      -8,     -13,     -17,     -21, -131072, -131071,
- -131070, -131069, -131067, -131064, -131059, -131051,
-  -65537,  -65538,  -65539,  -65541,  -65544,  -65549,
-  -65553,  -65557, -196608, -196607, -196606, -196605,
- -196603, -196600, -196595, -196587, -131073, -131074,
- -131075, -131077, -131080, -131085, -131089, -131093,
- -327680, -327679, -327678, -327677, -327675, -327672,
- -327667, -327659, -262145, -262146, -262147, -262149,
- -262152, -262157, -262161, -262165, -524288, -524287,
- -524286, -524285, -524283, -524280, -524275, -524267,
- -458753, -458754, -458755, -458757, -458760, -458765,
- -458769, -458773, -851968, -851967, -851966, -851965,
- -851963, -851960, -851955, -851947, -786433, -786434,
- -786435, -786437, -786440, -786445, -786449, -786453,
--1114112,-1114111,-1114110,-1114109,-1114107,-1114104,
--1114099,-1114091,-1048577,-1048578,-1048579,-1048581,
--1048584,-1048589,-1048593,-1048597,-1376256,-1376255,
--1376254,-1376253,-1376251,-1376248,-1376243,-1376235,
--1310721,-1310722,-1310723,-1310725,-1310728,-1310733,
--1310737,       0,-1835016,-1900536,-1572882,-1638383,
--1507328,-1376262,-1441786,-1179661,-1245172,-1179648,
--1179623,-1048601,-1048581,-1114107, -917514, -983030,
- -917504, -786436, -851964, -851949, -720915, -655368,
- -655362, -720896, -720894, -720888, -589839, -589828,
- -655356, -655345, -524294, -524289, -589823, -589818,
- -458781, -458763, -458760, -458755, -524285, -524280,
- -524277, -524259, -393221, -393218, -458752, -458750,
- -458747, -327702, -327689, -327686, -327683, -327681,
- -393215, -393213, -393210, -393207, -393194, -262161,
- -262151, -262148, -262146, -327680, -327678, -327676,
- -327673, -327663, -196621, -196618, -196613, -196611,
- -196609, -262144, -262143, -262141, -262139, -262134,
- -262131, -131080, -131078, -131076, -131075, -131074,
- -131073, -196608, -196607, -196606, -196604, -196602,
- -196600,  -65547,  -65543,  -65541,  -65539,  -65538,
-  -65537, -131072, -131071, -131070, -131069, -131067,
- -131065, -131061,      -9,      -6,      -4,      -3,
-      -2,      -1,  -65536,  -65535,  -65534,  -65533,
-  -65532,  -65530,  -65527,   65505,   65513,   65518,
-   65522,   65525,   65529,   65531,   65532,   65533,
-   65534,   65535,-2031616,       1,       2,       3,
-       4,       5,       7,      11,      14,      18,
-      23,      31,  131063,  131066,  131068,  131069,
-  131070,  131071,   65536,   65537,   65538,   65539,
-   65540,   65542,   65545,  196597,  196601,  196603,
-  196605,  196606,  196607,  131072,  131073,  131074,
-  131075,  131077,  131079,  131083,  262136,  262138,
-  262140,  262142,  262143,  196608,  196609,  196610,
-  196611,  196612,  196614,  196616,  327667,  327670,
-  327675,  327677,  327679,  262144,  262145,  262147,
-  262149,  262154,  262157,  393199,  393209,  393212,
-  393214,  327680,  327682,  327684,  327687,  327697,
-  458730,  458743,  458746,  458749,  458751,  393217,
-  393219,  393222,  393225,  393238,  524283,  524286,
-  458752,  458754,  458757,  589795,  589813,  589816,
-  589821,  524291,  524296,  524299,  524317,  655354,
-  655359,  589825,  589830,  720881,  720892,  655364,
-  655375,  786424,  786430,  720896,  720898,  720904,
-  786451,  917485,  917500,  851972,  917504, 1048566,
-  983050, 1179643, 1114117, 1114137, 1245159, 1179648,
- 1310708, 1245197, 1507322, 1441798, 1507328, 1703919,
- 1638418, 1966072, 1900552, 2031616,       0,-1376262,
--1441786,-1179661,-1245172,-1179648,-1048581,-1114107,
- -917514, -983030, -917504, -786436, -851964, -851949,
- -720915, -655368, -655362, -720896, -720894, -720888,
- -589839, -589828, -655356, -655345, -524294, -524289,
- -589823, -589818, -458763, -458760, -458755, -524288,
- -524285, -524280, -524277, -393221, -393218, -458752,
- -458750, -458747, -327702, -327689, -327686, -327683,
- -327681, -393215, -393213, -393210, -393207, -393194,
- -262161, -262151, -262148, -262146, -262145, -327680,
- -327679, -327678, -327676, -327673, -327663, -196621,
- -196618, -196613, -196611, -196610, -196609, -262144,
- -262143, -262142, -262141, -262139, -262134, -262131,
- -131080, -131078, -131076, -131075, -131074, -131073,
- -196608, -196607, -196606, -196605, -196604, -196602,
- -196600,  -65547,  -65543,  -65541,  -65540,  -65539,
-  -65538,  -65537, -131072, -131071, -131070, -131069,
- -131068, -131067, -131065, -131061,      -9,      -6,
-      -5,      -4,      -3,      -2,      -1,  -65536,
-  -65535,  -65534,  -65533,  -65532,  -65531,  -65530,
-  -65527,   65513,   65518,   65522,   65525,   65529,
-   65531,   65532,   65533,   65534,   65535,-1507328,
-       1,       2,       3,       4,       5,       7,
-      11,      14,      18,      23,  131063,  131066,
-  131067,  131068,  131069,  131070,  131071,   65536,
-   65537,   65538,   65539,   65540,   65541,   65542,
-   65545,  196597,  196601,  196603,  196604,  196605,
-  196606,  196607,  131072,  131073,  131074,  131075,
-  131076,  131077,  131079,  131083,  262136,  262138,
-  262140,  262141,  262142,  262143,  196608,  196609,
-  196610,  196611,  196612,  196614,  196616,  327667,
-  327670,  327675,  327677,  327678,  327679,  262144,
-  262145,  262146,  262147,  262149,  262154,  262157,
-  393199,  393209,  393212,  393214,  393215,  327680,
-  327681,  327682,  327684,  327687,  327697,  458730,
-  458743,  458746,  458749,  458751,  393217,  393219,
-  393222,  393225,  393238,  524283,  524286,  458752,
-  458754,  458757,  589813,  589816,  589821,  524288,
-  524291,  524296,  524299,  655354,  655359,  589825,
-  589830,  720881,  720892,  655364,  655375,  786424,
-  786430,  720896,  720898,  720904,  786451,  917485,
-  917500,  851972,  917504, 1048566,  983050, 1179643,
- 1114117, 1179648, 1310708, 1245197, 1507322, 1441798,
- 1507328
+static int32 codec47_8x8_table_small_line1[] = {
+  0, 1, 2, 3, 3, 3, 3, 2, 1, 0, 0, 0, 1, 2, 2, 1,
+};
+
+static int32 codec47_8x8_table_small_line2[] = {
+  0, 0, 0, 0, 1, 2, 3, 3, 3, 3, 2, 1, 1, 1, 2, 2,
+};
+
+static int32 codec47_8x8_table_big_line1[] = {
+  0, 2, 5, 7, 7, 7, 7, 7, 7, 5, 2, 0, 0, 0, 0, 0,
+};
+
+static int32 codec47_8x8_table_big_line2[] = {
+  0, 0, 0, 0, 1, 3, 4, 6, 7, 7, 7, 7, 6, 4, 3, 1,
 };
 
 static int16 codec47_table[] = {
@@ -268,18 +144,18 @@
 };
 #endif
 
-void Codec47Decoder::makeTables37(int32 param) {
+void Codec47Decoder::makeTablesInterpolation(int param) {
 	int32 variable1, variable2;
 	int32 b1, b2;
-	int32 value_table37_1_2, value_table37_1_1, value_table37_2_2, value_table37_2_1;
+	int32 value_table47_1_2, value_table47_1_1, value_table47_2_2, value_table47_2_1;
 	int32 tableSmallBig[64], tmp, s;
-	int32 *table37_1 = 0, *table37_2 = 0, *ptr_small_big;
+	int32 *table47_1 = 0, *table47_2 = 0, *ptr_small_big;
 	byte *ptr;
 	int i, x, y;
 
 	if (param == 8) {
-		table37_1 = &codec37_table[32];
-		table37_2 = &codec37_table[48];
+		table47_1 = codec47_8x8_table_big_line1;
+		table47_2 = codec47_8x8_table_big_line2;
 		ptr = _tableBig + 384;
 		for (i = 0; i < 256; i++) {
 			*ptr = 0;
@@ -291,8 +167,8 @@
 			ptr += 388;
 		}
 	} else if (param == 4) {
-		table37_1 = &codec37_table[0];
-		table37_2 = &codec37_table[16];
+		table47_1 = codec47_8x8_table_small_line1;
+		table47_2 = codec47_8x8_table_small_line2;
 		ptr = _tableSmall + 96;
 		for (i = 0; i < 256; i++) {
 			*ptr = 0;
@@ -304,36 +180,36 @@
 			ptr += 128;
 		}
 	} else {
-		error("makeTables37: unknown param %d", param);
+		error("Codec47Decoder::makeTablesInterpolation: unknown param %d", param);
 	}
 
 	s = 0;
 	for (x = 0; x < 16; x++) {
-		value_table37_1_1 = table37_1[x];
-		value_table37_2_1 = table37_2[x];
+		value_table47_1_1 = table47_1[x];
+		value_table47_2_1 = table47_2[x];
 		for (y = 0; y < 16; y++) {
-			value_table37_1_2 = table37_1[y];
-			value_table37_2_2 = table37_2[y];
+			value_table47_1_2 = table47_1[y];
+			value_table47_2_2 = table47_2[y];
 
-			if (value_table37_2_1 == 0) {
+			if (value_table47_2_1 == 0) {
 				b1 = 0;
-			} else if (value_table37_2_1 == param - 1) {
+			} else if (value_table47_2_1 == param - 1) {
 				b1 = 1;
-			} else if (value_table37_1_1 == 0) {
+			} else if (value_table47_1_1 == 0) {
 				b1 = 2;
-			} else if (value_table37_1_1 == param - 1) {
+			} else if (value_table47_1_1 == param - 1) {
 				b1 = 3;
 			} else {
 				b1 = 4;
 			}
 
-			if (value_table37_2_2 == 0) {
+			if (value_table47_2_2 == 0) {
 				b2 = 0;
-			} else if (value_table37_2_2 == param - 1) {
+			} else if (value_table47_2_2 == param - 1) {
 				b2 = 1;
-			} else if (value_table37_1_2 == 0) {
+			} else if (value_table47_1_2 == 0) {
 				b2 = 2;
-			} else if (value_table37_1_2 == param - 1) {
+			} else if (value_table47_1_2 == param - 1) {
 				b2 = 3;
 			} else {
 				b2 = 4;
@@ -341,8 +217,8 @@
 			
 			memset(tableSmallBig, 0, param * param * 4);
 
-			variable2 = abs(value_table37_2_2 - value_table37_2_1);
-			tmp = abs(value_table37_1_2 - value_table37_1_1);
+			variable2 = abs(value_table47_2_2 - value_table47_2_1);
+			tmp = abs(value_table47_1_2 - value_table47_1_1);
 			if (variable2 <= tmp) {
 				variable2 = tmp;
 			}
@@ -351,13 +227,13 @@
 				int32 variable3, variable4;
 
 				if (variable2 > 0) {
-					// Linearly interpolate between value_table37_1_1 and value_table37_1_2
-					// respectively value_table37_2_1 and value_table37_2_2.
-					variable4 = (value_table37_1_1 * variable1 + value_table37_1_2 * (variable2 - variable1) + variable2 / 2) / variable2;
-					variable3 = (value_table37_2_1 * variable1 + value_table37_2_2 * (variable2 - variable1) + variable2 / 2) / variable2;
+					// Linearly interpolate between value_table47_1_1 and value_table47_1_2
+					// respectively value_table47_2_1 and value_table47_2_2.
+					variable4 = (value_table47_1_1 * variable1 + value_table47_1_2 * (variable2 - variable1) + variable2 / 2) / variable2;
+					variable3 = (value_table47_2_1 * variable1 + value_table47_2_2 * (variable2 - variable1) + variable2 / 2) / variable2;
 				} else {
-					variable4 = value_table37_1_1;
-					variable3 = value_table37_2_1;
+					variable4 = value_table47_1_1;
+					variable3 = value_table47_2_1;
 				}
 				ptr_small_big = &tableSmallBig[param * variable3 + variable4];
 				*ptr_small_big = 1;
@@ -425,7 +301,7 @@
 	}
 }
 
-void Codec47Decoder::makeTables47(int32 width) {
+void Codec47Decoder::makeTables47(int width) {
 	if (_lastTableWidth == width)
 		return;
 
@@ -434,12 +310,10 @@
 	int32 a, c, d;
 	int16 tmp;
 
-	int16 *tmp_ptr = _table;
-	int16 *ptr_table = codec47_table;
-	do {
-		*tmp_ptr++ = (int16)(ptr_table[1] * width + ptr_table[0]);
-		ptr_table += 2;
-	} while (tmp_ptr < &_table[255]);
+	for (int l = 0; l < 512; l += 2) {
+		_table[l >> 1] = (int16)(codec47_table[l + 1] * width + codec47_table[l]);
+	}
+
 	a = 0;
 	c = 0;
 	do {
@@ -643,8 +517,8 @@
 	deinit();
 	_width = width;
 	_height = height;
-	makeTables37(4);
-	makeTables37(8);
+	makeTablesInterpolation(4);
+	makeTablesInterpolation(8);
 
 	_frameSize = _width * _height;
 	_deltaSize = _frameSize * 3;
@@ -655,10 +529,8 @@
 }
 
 Codec47Decoder::Codec47Decoder() {
-#ifdef __PALM_OS__
-	_tableBig = (byte *)calloc(99328, sizeof(byte));
-	_tableSmall = (byte *)calloc(32768, sizeof(byte));
-#endif
+	_tableBig = (byte *)malloc(99328);
+	_tableSmall = (byte *)malloc(32768);
 	_deltaBuf = 0;
 }
 
@@ -671,13 +543,19 @@
 		_deltaBufs[0] = 0;
 		_deltaBufs[1] = 0;
 	}
+	if (_tableBig == NULL) {
+		free(_tableBig);
+		_tableBig = NULL;
+	}
+	if (_tableSmall == NULL) {
+		free(_tableSmall);
+		_tableSmall = NULL;
+	}
 }
 
 Codec47Decoder::~Codec47Decoder() {
 	deinit();
 #ifdef __PALM_OS__
-	free(_tableBig);
-	free(_tableSmall);
 #endif
 }
 
@@ -746,11 +624,17 @@
 #ifdef __PALM_OS__
 #include "scumm_globals.h" // init globals
 void Codec47_initGlobals() {
-	GSETPTR(codec37_table,	GBVARS_CODEC37TABLE_INDEX,	int32	, GBVARS_SCUMM)
+	GSETPTR(codec47_8x8_table_small_line1,	GBVARS_CODEC47_8X8TABLE_SMALL_LINE1_INDEX,	int32	, GBVARS_SCUMM)
+	GSETPTR(codec47_8x8_table_small_line2,	GBVARS_CODEC47_8X8TABLE_SMALL_LINE2_INDEX,	int32	, GBVARS_SCUMM)
+	GSETPTR(codec47_8x8_table_big_line1,	GBVARS_CODEC47_8X8TABLE_BIG_LINE1_INDEX,	int32	, GBVARS_SCUMM)
+	GSETPTR(codec47_8x8_table_big_line2,	GBVARS_CODEC47_8X8TABLE_BIG_LINE2_INDEX,	int32	, GBVARS_SCUMM)
 	GSETPTR(codec47_table,	GBVARS_CODEC47TABLE_INDEX,	int16	, GBVARS_SCUMM)
 }
 void Codec47_releaseGlobals() {
-	GRELEASEPTR(GBVARS_CODEC37TABLE_INDEX		, GBVARS_SCUMM)
+	GRELEASEPTR(GBVARS_CODEC47_8X8TABLE_SMALL_LINE1_INDEX		, GBVARS_SCUMM)
+	GRELEASEPTR(GBVARS_CODEC47_8X8TABLE_SMALL_LINE2_INDEX		, GBVARS_SCUMM)
+	GRELEASEPTR(GBVARS_CODEC47_8X8TABLE_BIG_LINE1_INDEX		, GBVARS_SCUMM)
+	GRELEASEPTR(GBVARS_CODEC47_8X8TABLE_BIG_LINE2_INDEX		, GBVARS_SCUMM)
 	GRELEASEPTR(GBVARS_CODEC47TABLE_INDEX		, GBVARS_SCUMM)
 }
 #endif

Index: codec47.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/smush/codec47.h,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -d -r1.16 -r1.17
--- codec47.h	30 May 2003 19:00:33 -0000	1.16
+++ codec47.h	17 Aug 2003 16:10:58 -0000	1.17
@@ -36,19 +36,16 @@
 	const byte *_d_src, *_paramPtr;
 	int _d_pitch;
 	int32 _offset1, _offset2;
-#ifdef __PALM_OS__
 	byte *_tableBig;
 	byte *_tableSmall;
-#else
-	byte _tableBig[99328];
-	byte _tableSmall[32768];
-#endif
+//	byte _tableBig[99328];
+//	byte _tableSmall[32768];
 	int16 _table[256];
 	int32 _frameSize;
 	int _width, _height;
 
-	void makeTables47(int32 width);
-	void makeTables37(int32 param);
+	void makeTablesInterpolation(int param);
+	void makeTables47(int width);
 	void level1(byte *d_dst);
 	void level2(byte *d_dst);
 	void level3(byte *d_dst);





More information about the Scummvm-git-logs mailing list