static void qpeg_decode_inter(uint8_t *src, uint8_t *dst, int size,

			    int stride, int width, int height,

			    int delta, uint8_t *ctable, uint8_t *refdata)

{

    int i, j;

    int code;

    int filled = 0;

    uint8_t *blkdata;

    

    /* copy prev frame */

    for(i = 0; i < height; i++)

	memcpy(refdata + (i * width), dst + (i * stride), width);

    

    blkdata = src - 0x86;

    height--;

    dst = dst + height * stride;



    while(size > 0) {

	code = *src++;

	size--;

	

	if(delta) {

	    /* motion compensation */

	    while((code & 0xF0) == 0xF0) {

		if(delta == 1) {

		    int me_idx;

		    int me_w, me_h, me_x, me_y;

		    uint8_t *me_plane;

		    int corr, val;

		    

		    /* get block size by index */

		    me_idx = code & 0xF;

		    me_w = qpeg_table_w[me_idx];

		    me_h = qpeg_table_h[me_idx];

		    

		    /* extract motion vector */

		    corr = *src++;

		    size--;



		    val = corr >> 4;

		    if(val > 7)

			val -= 16;

		    me_x = val;

		    

		    val = corr & 0xF;

		    if(val > 7)

			val -= 16;

		    me_y = val;

		    

		    /* do motion compensation */

		    me_plane = refdata + (filled + me_x) + (height - me_y) * width;

		    for(j = 0; j < me_h; j++) {

			for(i = 0; i < me_w; i++)

			    dst[filled + i - (j * stride)] = me_plane[i - (j * width)];

		    }

		}

		code = *src++;

		size--;

	    }

	}

	

	if(code == 0xE0) /* end-of-picture code */

	    break;

	if(code > 0xE0) { /* run code: 0xE1..0xFF */

	    int p;



	    code &= 0x1F;

	    p = *src++;

	    size--;

	    for(i = 0; i <= code; i++) {

		dst[filled++] = p;

		if(filled >= width) {

		    filled = 0;

		    dst -= stride;

		    height--;

		}

	    }

	} else if(code >= 0xC0) { /* copy code: 0xC0..0xDF */

	    code &= 0x1F;

	    

	    for(i = 0; i <= code; i++) {

		dst[filled++] = *src++;

		if(filled >= width) {

		    filled = 0;

		    dst -= stride;

		    height--;

		}

	    }

	    size -= code + 1;

	} else if(code >= 0x80) { /* skip code: 0x80..0xBF */

	    int skip;

	    

	    code &= 0x3F;

	    /* codes 0x80 and 0x81 are actually escape codes,

	       skip value minus constant is in the next byte */

	    if(!code)

		skip = (*src++) + 64;

	    else if(code == 1)

		skip = (*src++) + 320;

	    else

		skip = code;

	    filled += skip;

	    while( filled >= width) {

		filled -= width;

		dst -= stride;

		height--;

	    }

	} else {

	    /* zero code treated as one-pixel skip */

	    if(code)

		dst[filled++] = ctable[code & 0x7F];

	    else

		filled++;

	    if(filled >= width) {

		filled = 0;

		dst -= stride;

		height--;

	    }

	}

    }

}

static void qpeg_decode_inter(uint8_t *src, uint8_t *dst, int size,

			    int stride, int width, int height,

			    int delta, uint8_t *ctable, uint8_t *refdata)

{

    int i, j;

    int code;

    int filled = 0;

    uint8_t *blkdata;

    

    

    for(i = 0; i < height; i++)

	memcpy(refdata + (i * width), dst + (i * stride), width);

    

    blkdata = src - 0x86;

    height--;

    dst = dst + height * stride;



    while(size > 0) {

	code = *src++;

	size--;

	

	if(delta) {

	    

	    while((code & 0xF0) == 0xF0) {

		if(delta == 1) {

		    int me_idx;

		    int me_w, me_h, me_x, me_y;

		    uint8_t *me_plane;

		    int corr, val;

		    

		    

		    me_idx = code & 0xF;

		    me_w = qpeg_table_w[me_idx];

		    me_h = qpeg_table_h[me_idx];

		    

		    

		    corr = *src++;

		    size--;



		    val = corr >> 4;

		    if(val > 7)

			val -= 16;

		    me_x = val;

		    

		    val = corr & 0xF;

		    if(val > 7)

			val -= 16;

		    me_y = val;

		    

		    

		    me_plane = refdata + (filled + me_x) + (height - me_y) * width;

		    for(j = 0; j < me_h; j++) {

			for(i = 0; i < me_w; i++)

			    dst[filled + i - (j * stride)] = me_plane[i - (j * width)];

		    }

		}

		code = *src++;

		size--;

	    }

	}

	

	if(code == 0xE0) 

	    break;

	if(code > 0xE0) { 

	    int p;



	    code &= 0x1F;

	    p = *src++;

	    size--;

	    for(i = 0; i <= code; i++) {

		dst[filled++] = p;

		if(filled >= width) {

		    filled = 0;

		    dst -= stride;

		    height--;

		}

	    }

	} else if(code >= 0xC0) { 

	    code &= 0x1F;

	    

	    for(i = 0; i <= code; i++) {

		dst[filled++] = *src++;

		if(filled >= width) {

		    filled = 0;

		    dst -= stride;

		    height--;

		}

	    }

	    size -= code + 1;

	} else if(code >= 0x80) { 

	    int skip;

	    

	    code &= 0x3F;

	    



	    if(!code)

		skip = (*src++) + 64;

	    else if(code == 1)

		skip = (*src++) + 320;

	    else

		skip = code;

	    filled += skip;

	    while( filled >= width) {

		filled -= width;

		dst -= stride;

		height--;

	    }

	} else {

	    

	    if(code)

		dst[filled++] = ctable[code & 0x7F];

	    else

		filled++;

	    if(filled >= width) {

		filled = 0;

		dst -= stride;

		height--;

	    }

	}

    }

}

    while(size > 0) {     while(size > 0) { 		    me_plane = refdata + (filled + me_x) + (height - me_y) * width; 		    for(j = 0; j < me_h; j++) { 			for(i = 0; i < me_w; i++) 			    dst[filled + i - (j * stride)] = me_plane[i - (j * width)];
static void FUNC_0(uint8_t *VAR_0, uint8_t *VAR_1, int VAR_2,

			    int VAR_3, int VAR_4, int VAR_5,

			    int VAR_6, uint8_t *VAR_7, uint8_t *VAR_8)

{

    int VAR_9, VAR_10;

    int VAR_11;

    int VAR_12 = 0;

    uint8_t *blkdata;

    

    

    for(VAR_9 = 0; VAR_9 < VAR_5; VAR_9++)

	memcpy(VAR_8 + (VAR_9 * VAR_4), VAR_1 + (VAR_9 * VAR_3), VAR_4);

    

    blkdata = VAR_0 - 0x86;

    VAR_5--;

    VAR_1 = VAR_1 + VAR_5 * VAR_3;



    while(VAR_2 > 0) {

	VAR_11 = *VAR_0++;

	VAR_2--;

	

	if(VAR_6) {

	    

	    while((VAR_11 & 0xF0) == 0xF0) {

		if(VAR_6 == 1) {

		    int VAR_13;

		    int VAR_14, VAR_15, VAR_16, VAR_17;

		    uint8_t *me_plane;

		    int VAR_18, VAR_19;

		    

		    

		    VAR_13 = VAR_11 & 0xF;

		    VAR_14 = qpeg_table_w[VAR_13];

		    VAR_15 = qpeg_table_h[VAR_13];

		    

		    

		    VAR_18 = *VAR_0++;

		    VAR_2--;



		    VAR_19 = VAR_18 >> 4;

		    if(VAR_19 > 7)

			VAR_19 -= 16;

		    VAR_16 = VAR_19;

		    

		    VAR_19 = VAR_18 & 0xF;

		    if(VAR_19 > 7)

			VAR_19 -= 16;

		    VAR_17 = VAR_19;

		    

		    

		    me_plane = VAR_8 + (VAR_12 + VAR_16) + (VAR_5 - VAR_17) * VAR_4;

		    for(VAR_10 = 0; VAR_10 < VAR_15; VAR_10++) {

			for(VAR_9 = 0; VAR_9 < VAR_14; VAR_9++)

			    VAR_1[VAR_12 + VAR_9 - (VAR_10 * VAR_3)] = me_plane[VAR_9 - (VAR_10 * VAR_4)];

		    }

		}

		VAR_11 = *VAR_0++;

		VAR_2--;

	    }

	}

	

	if(VAR_11 == 0xE0) 

	    break;

	if(VAR_11 > 0xE0) { 

	    int VAR_20;



	    VAR_11 &= 0x1F;

	    VAR_20 = *VAR_0++;

	    VAR_2--;

	    for(VAR_9 = 0; VAR_9 <= VAR_11; VAR_9++) {

		VAR_1[VAR_12++] = VAR_20;

		if(VAR_12 >= VAR_4) {

		    VAR_12 = 0;

		    VAR_1 -= VAR_3;

		    VAR_5--;

		}

	    }

	} else if(VAR_11 >= 0xC0) { 

	    VAR_11 &= 0x1F;

	    

	    for(VAR_9 = 0; VAR_9 <= VAR_11; VAR_9++) {

		VAR_1[VAR_12++] = *VAR_0++;

		if(VAR_12 >= VAR_4) {

		    VAR_12 = 0;

		    VAR_1 -= VAR_3;

		    VAR_5--;

		}

	    }

	    VAR_2 -= VAR_11 + 1;

	} else if(VAR_11 >= 0x80) { 

	    int VAR_21;

	    

	    VAR_11 &= 0x3F;

	    



	    if(!VAR_11)

		VAR_21 = (*VAR_0++) + 64;

	    else if(VAR_11 == 1)

		VAR_21 = (*VAR_0++) + 320;

	    else

		VAR_21 = VAR_11;

	    VAR_12 += VAR_21;

	    while( VAR_12 >= VAR_4) {

		VAR_12 -= VAR_4;

		VAR_1 -= VAR_3;

		VAR_5--;

	    }

	} else {

	    

	    if(VAR_11)

		VAR_1[VAR_12++] = VAR_7[VAR_11 & 0x7F];

	    else

		VAR_12++;

	    if(VAR_12 >= VAR_4) {

		VAR_12 = 0;

		VAR_1 -= VAR_3;

		VAR_5--;

	    }

	}

    }

}

static void FUNC_0(uint8_t *VAR_0, uint8_t *VAR_1, int VAR_2,
int VAR_3, int VAR_4, int VAR_5,
int VAR_6, uint8_t *VAR_7, uint8_t *VAR_8)
{ int VAR_9, VAR_10; int VAR_11; int VAR_12 = 0; uint8_t *blkdata; for(VAR_9 = 0; VAR_9 < VAR_5; VAR_9++) memcpy(VAR_8 + (VAR_9 * VAR_4), VAR_1 + (VAR_9 * VAR_3), VAR_4); blkdata = VAR_0 - 0x86; VAR_5--; VAR_1 = VAR_1 + VAR_5 * VAR_3; while(VAR_2 > 0) { VAR_11 = *VAR_0++; VAR_2--; if(VAR_6) { while((VAR_11 & 0xF0) == 0xF0) { if(VAR_6 == 1) { int VAR_13; int VAR_14, VAR_15, VAR_16, VAR_17; uint8_t *me_plane; int VAR_18, VAR_19; VAR_13 = VAR_11 & 0xF; VAR_14 = qpeg_table_w[VAR_13]; VAR_15 = qpeg_table_h[VAR_13]; VAR_18 = *VAR_0++; VAR_2--; VAR_19 = VAR_18 >> 4; if(VAR_19 > 7)
VAR_19 -= 16; VAR_16 = VAR_19; VAR_19 = VAR_18 & 0xF; if(VAR_19 > 7)
VAR_19 -= 16; VAR_17 = VAR_19; me_plane = VAR_8 + (VAR_12 + VAR_16) + (VAR_5 - VAR_17) * VAR_4; for(VAR_10 = 0; VAR_10 < VAR_15; VAR_10++) { for(VAR_9 = 0; VAR_9 < VAR_14; VAR_9++) VAR_1[VAR_12 + VAR_9 - (VAR_10 * VAR_3)] = me_plane[VAR_9 - (VAR_10 * VAR_4)]; } } VAR_11 = *VAR_0++; VAR_2--; } } if(VAR_11 == 0xE0)
break; if(VAR_11 > 0xE0) { int VAR_20; VAR_11 &= 0x1F; VAR_20 = *VAR_0++; VAR_2--; for(VAR_9 = 0; VAR_9 <= VAR_11; VAR_9++) { VAR_1[VAR_12++] = VAR_20; if(VAR_12 >= VAR_4) { VAR_12 = 0; VAR_1 -= VAR_3; VAR_5--; } } } else if(VAR_11 >= 0xC0) { VAR_11 &= 0x1F; for(VAR_9 = 0; VAR_9 <= VAR_11; VAR_9++) { VAR_1[VAR_12++] = *VAR_0++; if(VAR_12 >= VAR_4) { VAR_12 = 0; VAR_1 -= VAR_3; VAR_5--; } } VAR_2 -= VAR_11 + 1; } else if(VAR_11 >= 0x80) { int VAR_21; VAR_11 &= 0x3F; if(!VAR_11)
VAR_21 = (*VAR_0++) + 64; else if(VAR_11 == 1)
VAR_21 = (*VAR_0++) + 320; else
VAR_21 = VAR_11; VAR_12 += VAR_21; while( VAR_12 >= VAR_4) { VAR_12 -= VAR_4; VAR_1 -= VAR_3; VAR_5--; } } else { if(VAR_11)
VAR_1[VAR_12++] = VAR_7[VAR_11 & 0x7F]; else
VAR_12++; if(VAR_12 >= VAR_4) { VAR_12 = 0; VAR_1 -= VAR_3; VAR_5--; } } } }