10 static ushort *backBuf1, *backBuf2;
11 static int lookup_initialized;
13 static void dispatchDecoder16(
ushort **pFrame,
ubyte codeType,
ubyte **pData,
ubyte **pOffData,
int *pDataRemain,
int *curXb,
int *curYb);
14 static void genLoopkupTable();
18 ubyte *pOrig, *pOffData, op;
22 if (!lookup_initialized) {
32 offset = pData[0]|(pData[1]<<8);
41 for (j=0; j<yb; j++) {
42 for (
i=0;
i<xb/2;
i++) {
44 dispatchDecoder16((
ushort **)&pFrame, op, &pData, &pOffData, &dataRemain, &
i, &j);
46 op = ((*pMap) >> 4) & 0xf;
47 dispatchDecoder16((
ushort **)&pFrame, op, &pData, &pOffData, &dataRemain, &
i, &j);
56 if ((length-(pData-pOrig)) != 0) {
58 (pData-pOrig), length, (length-(pData-pOrig))));
62 static ushort GETPIXEL(
unsigned char **
buf,
int off)
64 ushort val = (*buf)[0+off] | ((*buf)[1+off] << 8);
68 static ushort GETPIXELI(
unsigned char **
buf,
int off)
70 ushort val = (*buf)[0+off] | ((*buf)[1+off] << 8);
75 static void relClose(
int i,
int *
x,
int *
y)
86 static void relFar(
int i,
int sign,
int *
x,
int *
y)
89 *x = sign * (8 + (i % 7));
92 *x = sign * (-14 + (i - 56) % 29);
93 *y = sign * (8 + (i - 56) / 29);
97 static int close_table[512];
98 static int far_p_table[512];
99 static int far_n_table[512];
101 static void genLoopkupTable()
106 for (i = 0; i < 256; i++) {
109 close_table[i*2+0] =
x;
110 close_table[i*2+1] =
y;
112 relFar(i, 1, &x, &y);
114 far_p_table[i*2+0] =
x;
115 far_p_table[i*2+1] =
y;
117 relFar(i, -1, &x, &y);
119 far_n_table[i*2+0] =
x;
120 far_n_table[i*2+1] =
y;
123 lookup_initialized = 1;
130 for (i=0; i<8; i++) {
131 memcpy(pDest, pSrc, 16);
137 static void patternRow4Pixels(
ushort *pFrame,
unsigned char pat0,
unsigned char pat1,
ushort *
p)
144 *pFrame++ = p[(mask &
pattern) >> shift];
150 static void patternRow4Pixels2(
ushort *pFrame,
unsigned char pat0,
ushort *p)
152 unsigned char mask=0x03;
153 unsigned char shift=0;
157 pel = p[(mask & pat0) >> shift];
168 static void patternRow4Pixels2x1(
ushort *pFrame,
unsigned char pat,
ushort *p)
170 unsigned char mask=0x03;
171 unsigned char shift=0;
175 pel = p[(mask & pat) >> shift];
184 static void patternQuadrant4Pixels(
ushort *pFrame,
unsigned char pat0,
unsigned char pat1,
unsigned char pat2,
unsigned char pat3,
ushort *p)
186 unsigned long mask = 0x00000003UL;
189 unsigned long pat = (pat3 << 24) | (pat2 << 16) | (pat1 << 8) | pat0;
191 for (i=0; i<16; i++) {
192 pFrame[i&3] = p[(pat &
mask) >> shift];
201 static void patternRow2Pixels(
ushort *pFrame,
unsigned char pat,
ushort *p)
203 unsigned char mask=0x01;
206 *pFrame++ = p[(mask & pat) ? 1 : 0];
211 static void patternRow2Pixels2(
ushort *pFrame,
unsigned char pat,
ushort *p)
214 unsigned char mask=0x1;
216 while (mask != 0x10) {
217 pel = p[(mask & pat) ? 1 : 0];
229 static void patternQuadrant2Pixels(
ushort *pFrame,
unsigned char pat0,
unsigned char pat1,
ushort *p)
233 ushort pat = (pat1 << 8) | pat0;
235 for (i=0; i<16; i++) {
236 pFrame[i&3] = p[(pat &
mask) ? 1 : 0];
245 static void dispatchDecoder16(
ushort **pFrame,
unsigned char codeType,
unsigned char **pData,
unsigned char **pOffData,
int *pDataRemain,
int *curXb,
int *curYb)
248 unsigned char pat[16];
257 copyFrame(*pFrame, *pFrame + (backBuf2 - backBuf1));
265 x = far_p_table[k*2+0];
266 y = far_p_table[k*2+1];
267 copyFrame(*pFrame, *pFrame + x + y*
g_width);
273 x = far_n_table[k*2+0];
274 y = far_n_table[k*2+1];
275 copyFrame(*pFrame, *pFrame + x + y*
g_width);
281 x = close_table[k*2+0];
282 y = close_table[k*2+1];
283 copyFrame(*pFrame, *pFrame + (backBuf2 - backBuf1) + x + y*
g_width);
288 x = (char)*(*pData)++;
289 y = (char)*(*pData)++;
290 copyFrame(*pFrame, *pFrame + (backBuf2 - backBuf1) + x + y*
g_width);
295 nprintf((
"MVE",
"STUB: encoding 6 not tested\n"));
296 for (i=0; i<2; i++) {
298 if (++*curXb == (
g_width >> 3)) {
309 p[0] = GETPIXELI(pData, 0);
310 p[1] = GETPIXELI(pData, 0);
311 if (!((p[0])&0x8000)) {
312 for (i=0; i<8; i++) {
313 patternRow2Pixels(*pFrame, *(*pData), p);
318 for (i=0; i<2; i++) {
319 patternRow2Pixels2(*pFrame, *(*pData) & 0xf, p);
321 patternRow2Pixels2(*pFrame, *(*pData) >> 4, p);
329 p[0] = GETPIXEL(pData, 0);
330 if (!(p[0] & 0x8000)) {
331 for (i=0; i<4; i++) {
332 p[0] = GETPIXELI(pData, 0);
333 p[1] = GETPIXELI(pData, 0);
334 pat[0] = (*pData)[0];
335 pat[1] = (*pData)[1];
337 patternQuadrant2Pixels(*pFrame, pat[0], pat[1], p);
345 p[2] = GETPIXEL(pData, 8);
346 if (!(p[2]&0x8000)) {
347 for (i=0; i<4; i++) {
349 p[0] = GETPIXELI(pData, 0);
350 p[1] = GETPIXELI(pData, 0);
352 pat[0] = *(*pData)++;
353 pat[1] = *(*pData)++;
354 patternQuadrant2Pixels(*pFrame, pat[0], pat[1], p);
362 for (i=0; i<8; i++) {
364 p[0] = GETPIXELI(pData, 0);
365 p[1] = GETPIXELI(pData, 0);
367 patternRow2Pixels(*pFrame, *(*pData), p);
376 p[0] = GETPIXELI(pData, 0);
377 p[1] = GETPIXELI(pData, 0);
378 p[2] = GETPIXELI(pData, 0);
379 p[3] = GETPIXELI(pData, 0);
381 if (!(p[0] & 0x8000)) {
382 if (!(p[2] & 0x8000)) {
383 for (i=0; i<8; i++) {
384 pat[0] = (*pData)[0];
385 pat[1] = (*pData)[1];
387 patternRow4Pixels(*pFrame, pat[0], pat[1], p);
392 patternRow4Pixels2(*pFrame, (*pData)[0], p);
394 patternRow4Pixels2(*pFrame, (*pData)[1], p);
396 patternRow4Pixels2(*pFrame, (*pData)[2], p);
398 patternRow4Pixels2(*pFrame, (*pData)[3], p);
403 if (!(p[2] & 0x8000)) {
404 for (i=0; i<8; i++) {
405 pat[0] = (*pData)[0];
407 patternRow4Pixels2x1(*pFrame, pat[0], p);
412 for (i=0; i<4; i++) {
413 pat[0] = (*pData)[0];
414 pat[1] = (*pData)[1];
416 patternRow4Pixels(*pFrame, pat[0], pat[1], p);
418 patternRow4Pixels(*pFrame, pat[0], pat[1], p);
427 p[0] = GETPIXEL(pData, 0);
428 if (!(p[0] & 0x8000)) {
429 for (i=0; i<4; i++) {
430 p[0] = GETPIXELI(pData, 0);
431 p[1] = GETPIXELI(pData, 0);
432 p[2] = GETPIXELI(pData, 0);
433 p[3] = GETPIXELI(pData, 0);
434 pat[0] = (*pData)[0];
435 pat[1] = (*pData)[1];
436 pat[2] = (*pData)[2];
437 pat[3] = (*pData)[3];
439 patternQuadrant4Pixels(*pFrame, pat[0], pat[1], pat[2], pat[3], p);
447 p[0] = GETPIXEL(pData, 16);
448 if (!(p[0] & 0x8000)) {
449 for (i=0; i<4; i++) {
451 p[0] = GETPIXELI(pData, 0);
452 p[1] = GETPIXELI(pData, 0);
453 p[2] = GETPIXELI(pData, 0);
454 p[3] = GETPIXELI(pData, 0);
456 pat[0] = (*pData)[0];
457 pat[1] = (*pData)[1];
458 pat[2] = (*pData)[2];
459 pat[3] = (*pData)[3];
461 patternQuadrant4Pixels(*pFrame, pat[0], pat[1], pat[2], pat[3], p);
469 for (i=0; i<8; i++) {
471 p[0] = GETPIXELI(pData, 0);
472 p[1] = GETPIXELI(pData, 0);
473 p[2] = GETPIXELI(pData, 0);
474 p[3] = GETPIXELI(pData, 0);
476 pat[0] = (*pData)[0];
477 pat[1] = (*pData)[1];
478 patternRow4Pixels(*pFrame, pat[0], pat[1], p);
487 for (i=0; i<8; i++) {
488 #if BYTE_ORDER == BIG_ENDIAN
490 memcpy(&frame_tmp, *pData, 16);
492 for (j = 0; j < 16; j += 2) {
493 swap_tmp = (
ushort*)(frame_tmp + j);
496 memcpy(*pFrame, &frame_tmp, 16);
498 memcpy(*pFrame, *pData, 16);
507 for (i=0; i<4; i++) {
508 p[0] = GETPIXEL(pData, 0);
509 p[1] = GETPIXEL(pData, 2);
510 p[2] = GETPIXEL(pData, 4);
511 p[3] = GETPIXEL(pData, 6);
512 for (j=0; j<2; j++) {
513 for (k=0; k<4; k++) {
514 (*pFrame)[2*k] = p[k];
515 (*pFrame)[2*k+1] = p[k];
525 for (i=0; i<2; i++) {
526 p[0] = GETPIXEL(pData, 0);
527 p[1] = GETPIXEL(pData, 2);
528 for (j=0; j<4; j++) {
529 for (k=0; k<4; k++) {
531 (*pFrame)[k*
g_width+j+4] = p[1];
541 p[0] = GETPIXEL(pData, 0);
542 for (i = 0; i < 8; i++) {
543 for (j = 0; j < 8; j++) {
553 p[0] = GETPIXEL(pData, 0);
554 p[1] = GETPIXEL(pData, 1);
555 for (i=0; i<8; i++) {
556 for (j=0; j<8; j++) {
557 (*pFrame)[j] = p[(i+j)&1];
GLenum GLuint GLenum GLsizei const GLchar * buf
void decodeFrame16(ubyte *pFrame, ubyte *pMap, int mapRemain, unsigned char *pData, int dataRemain)
GLint GLint GLint GLint GLint x
GLenum GLuint GLenum GLsizei length