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

                            int stride, int width, int height,

                            int delta, const uint8_t *ctable, uint8_t *refdata)

{

    int i, j;

    int code;

    int filled = 0;

    int orig_height;



    if(!refdata)

        refdata= dst;



    /* copy prev frame */

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

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



    orig_height = height;

    height--;

    dst = dst + height * stride;



    while((size > 0) && (height >= 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;



                    /* check motion vector */

                    if ((me_x + filled < 0) || (me_x + me_w + filled > width) ||

                       (height - me_y - me_h < 0) || (height - me_y > orig_height) ||

                       (filled + me_w > width) || (height - me_h < 0))

                        av_log(NULL, AV_LOG_ERROR, "Bogus motion vector (%i,%i), block size %ix%i at %i,%i\n",

                               me_x, me_y, me_w, me_h, filled, height);

                    else {

                        /* do motion compensation */

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

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

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

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

                        }

                    }

                }

                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--;

                    if(height < 0)

                        break;

                }

            }

        } 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--;

                    if(height < 0)

                        break;

                }

            }

            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--;

                if(height < 0)

                    break;

            }

        } 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(const uint8_t *src, uint8_t *dst, int size,

                            int stride, int width, int height,

                            int delta, const uint8_t *ctable, uint8_t *refdata)

{

    int i, j;

    int code;

    int filled = 0;

    int orig_height;



    if(!refdata)

        refdata= dst;



    

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

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



    orig_height = height;

    height--;

    dst = dst + height * stride;



    while((size > 0) && (height >= 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;



                    

                    if ((me_x + filled < 0) || (me_x + me_w + filled > width) ||

                       (height - me_y - me_h < 0) || (height - me_y > orig_height) ||

                       (filled + me_w > width) || (height - me_h < 0))

                        av_log(NULL, AV_LOG_ERROR, "Bogus motion vector (%i,%i), block size %ix%i at %i,%i\n",

                               me_x, me_y, me_w, me_h, filled, height);

                    else {

                        

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

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

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

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

                        }

                    }

                }

                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--;

                    if(height < 0)

                        break;

                }

            }

        } else if(code >= 0xC0) { 

            code &= 0x1F;



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

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

                if(filled >= width) {

                    filled = 0;

                    dst -= stride;

                    height--;

                    if(height < 0)

                        break;

                }

            }

            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--;

                if(height < 0)

                    break;

            }

        } else {

            

            if(code)

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

            else

                filled++;

            if(filled >= width) {

                filled = 0;

                dst -= stride;

                height--;

            }

        }

    }

}

            while((code & 0xF0) == 0xF0) {             if(!code)                 skip = (*src++) + 64;             else if(code == 1)                 skip = (*src++) + 320;
static void FUNC_0(const uint8_t *VAR_0, uint8_t *VAR_1, int VAR_2,

                            int VAR_3, int VAR_4, int VAR_5,

                            int VAR_6, const uint8_t *VAR_7, uint8_t *VAR_8)

{

    int VAR_9, VAR_10;

    int VAR_11;

    int VAR_12 = 0;

    int VAR_13;



    if(!VAR_8)

        VAR_8= VAR_1;



    

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

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



    VAR_13 = VAR_5;

    VAR_5--;

    VAR_1 = VAR_1 + VAR_5 * VAR_3;



    while((VAR_2 > 0) && (VAR_5 >= 0)) {

        VAR_11 = *VAR_0++;

        VAR_2--;



        if(VAR_6) {

            

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

                if(VAR_6 == 1) {

                    int VAR_14;

                    int VAR_15, VAR_16, VAR_17, VAR_18;

                    uint8_t *me_plane;

                    int VAR_19, VAR_20;



                    

                    VAR_14 = VAR_11 & 0xF;

                    VAR_15 = qpeg_table_w[VAR_14];

                    VAR_16 = qpeg_table_h[VAR_14];



                    

                    VAR_19 = *VAR_0++;

                    VAR_2--;



                    VAR_20 = VAR_19 >> 4;

                    if(VAR_20 > 7)

                        VAR_20 -= 16;

                    VAR_17 = VAR_20;



                    VAR_20 = VAR_19 & 0xF;

                    if(VAR_20 > 7)

                        VAR_20 -= 16;

                    VAR_18 = VAR_20;



                    

                    if ((VAR_17 + VAR_12 < 0) || (VAR_17 + VAR_15 + VAR_12 > VAR_4) ||

                       (VAR_5 - VAR_18 - VAR_16 < 0) || (VAR_5 - VAR_18 > VAR_13) ||

                       (VAR_12 + VAR_15 > VAR_4) || (VAR_5 - VAR_16 < 0))

                        av_log(NULL, AV_LOG_ERROR, "Bogus motion vector (%VAR_9,%VAR_9), block VAR_2 %ix%VAR_9 at %VAR_9,%VAR_9\n",

                               VAR_17, VAR_18, VAR_15, VAR_16, VAR_12, VAR_5);

                    else {

                        

                        me_plane = VAR_8 + (VAR_12 + VAR_17) + (VAR_5 - VAR_18) * VAR_3;

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

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

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

                        }

                    }

                }

                VAR_11 = *VAR_0++;

                VAR_2--;

            }

        }



        if(VAR_11 == 0xE0) 

            break;

        if(VAR_11 > 0xE0) { 

            int VAR_21;



            VAR_11 &= 0x1F;

            VAR_21 = *VAR_0++;

            VAR_2--;

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

                VAR_1[VAR_12++] = VAR_21;

                if(VAR_12 >= VAR_4) {

                    VAR_12 = 0;

                    VAR_1 -= VAR_3;

                    VAR_5--;

                    if(VAR_5 < 0)

                        break;

                }

            }

        } 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--;

                    if(VAR_5 < 0)

                        break;

                }

            }

            VAR_2 -= VAR_11 + 1;

        } else if(VAR_11 >= 0x80) { 

            int VAR_22;



            VAR_11 &= 0x3F;

            



            if(!VAR_11)

                VAR_22 = (*VAR_0++) + 64;

            else if(VAR_11 == 1)

                VAR_22 = (*VAR_0++) + 320;

            else

                VAR_22 = VAR_11;

            VAR_12 += VAR_22;

            while( VAR_12 >= VAR_4) {

                VAR_12 -= VAR_4;

                VAR_1 -= VAR_3;

                VAR_5--;

                if(VAR_5 < 0)

                    break;

            }

        } 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(const uint8_t *VAR_0, uint8_t *VAR_1, int VAR_2,
int VAR_3, int VAR_4, int VAR_5,
int VAR_6, const uint8_t *VAR_7, uint8_t *VAR_8)
{ int VAR_9, VAR_10; int VAR_11; int VAR_12 = 0; int VAR_13; if(!VAR_8)
VAR_8= VAR_1; for(VAR_9 = 0; VAR_9 < VAR_5; VAR_9++) memcpy(VAR_1 + (VAR_9 * VAR_3), VAR_8 + (VAR_9 * VAR_3), VAR_4); VAR_13 = VAR_5; VAR_5--; VAR_1 = VAR_1 + VAR_5 * VAR_3; while((VAR_2 > 0) && (VAR_5 >= 0)) { VAR_11 = *VAR_0++; VAR_2--; if(VAR_6) { while((VAR_11 & 0xF0) == 0xF0) { if(VAR_6 == 1) { int VAR_14; int VAR_15, VAR_16, VAR_17, VAR_18; uint8_t *me_plane; int VAR_19, VAR_20; VAR_14 = VAR_11 & 0xF; VAR_15 = qpeg_table_w[VAR_14]; VAR_16 = qpeg_table_h[VAR_14]; VAR_19 = *VAR_0++; VAR_2--; VAR_20 = VAR_19 >> 4; if(VAR_20 > 7)
VAR_20 -= 16; VAR_17 = VAR_20; VAR_20 = VAR_19 & 0xF; if(VAR_20 > 7)
VAR_20 -= 16; VAR_18 = VAR_20; if ((VAR_17 + VAR_12 < 0) || (VAR_17 + VAR_15 + VAR_12 > VAR_4) ||
(VAR_5 - VAR_18 - VAR_16 < 0) || (VAR_5 - VAR_18 > VAR_13) ||
(VAR_12 + VAR_15 > VAR_4) || (VAR_5 - VAR_16 < 0))
av_log(NULL, AV_LOG_ERROR, "Bogus motion vector (%VAR_9,%VAR_9), block VAR_2 %ix%VAR_9 at %VAR_9,%VAR_9\n",
VAR_17, VAR_18, VAR_15, VAR_16, VAR_12, VAR_5); else { me_plane = VAR_8 + (VAR_12 + VAR_17) + (VAR_5 - VAR_18) * VAR_3; for(VAR_10 = 0; VAR_10 < VAR_16; VAR_10++) { for(VAR_9 = 0; VAR_9 < VAR_15; VAR_9++) VAR_1[VAR_12 + VAR_9 - (VAR_10 * VAR_3)] = me_plane[VAR_9 - (VAR_10 * VAR_3)]; } } } VAR_11 = *VAR_0++; VAR_2--; } } if(VAR_11 == 0xE0)
break; if(VAR_11 > 0xE0) { int VAR_21; VAR_11 &= 0x1F; VAR_21 = *VAR_0++; VAR_2--; for(VAR_9 = 0; VAR_9 <= VAR_11; VAR_9++) { VAR_1[VAR_12++] = VAR_21; if(VAR_12 >= VAR_4) { VAR_12 = 0; VAR_1 -= VAR_3; VAR_5--; if(VAR_5 < 0)
break; } } } 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--; if(VAR_5 < 0)
break; } } VAR_2 -= VAR_11 + 1; } else if(VAR_11 >= 0x80) { int VAR_22; VAR_11 &= 0x3F; if(!VAR_11)
VAR_22 = (*VAR_0++) + 64; else if(VAR_11 == 1)
VAR_22 = (*VAR_0++) + 320; else
VAR_22 = VAR_11; VAR_12 += VAR_22; while( VAR_12 >= VAR_4) { VAR_12 -= VAR_4; VAR_1 -= VAR_3; VAR_5--; if(VAR_5 < 0)
break; } } 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--; } } } }