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

                            int stride, int width, int height)

{

    int i;

    int code;

    int c0, c1;

    int run, copy;

    int filled = 0;

    int rows_to_go;



    rows_to_go = height;

    height--;

    dst = dst + height * stride;



    while((size > 0) && (rows_to_go > 0)) {

        code = *src++;

        size--;

        run = copy = 0;

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

            break;

        if(code >= 0xF8) { /* very long run */

            c0 = *src++;

            c1 = *src++;

            size -= 2;

            run = ((code & 0x7) << 16) + (c0 << 8) + c1 + 2;

        } else if (code >= 0xF0) { /* long run */

            c0 = *src++;

            size--;

            run = ((code & 0xF) << 8) + c0 + 2;

        } else if (code >= 0xE0) { /* short run */

            run = (code & 0x1F) + 2;

        } else if (code >= 0xC0) { /* very long copy */

            c0 = *src++;

            c1 = *src++;

            size -= 2;

            copy = ((code & 0x3F) << 16) + (c0 << 8) + c1 + 1;

        } else if (code >= 0x80) { /* long copy */

            c0 = *src++;

            size--;

            copy = ((code & 0x7F) << 8) + c0 + 1;

        } else { /* short copy */

            copy = code + 1;

        }



        /* perform actual run or copy */

        if(run) {

            int p;



            p = *src++;

            size--;

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

                dst[filled++] = p;

                if (filled >= width) {

                    filled = 0;

                    dst -= stride;

                    rows_to_go--;

                    if(rows_to_go <= 0)

                        break;

                }

            }

        } else {

            size -= copy;

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

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

                if (filled >= width) {

                    filled = 0;

                    dst -= stride;

                    rows_to_go--;

                    if(rows_to_go <= 0)

                        break;

                }

            }

        }

    }

}

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

                            int stride, int width, int height)

{

    int i;

    int code;

    int c0, c1;

    int run, copy;

    int filled = 0;

    int rows_to_go;



    rows_to_go = height;

    height--;

    dst = dst + height * stride;



    while((size > 0) && (rows_to_go > 0)) {

        code = *src++;

        size--;

        run = copy = 0;

        if(code == 0xFC) 

            break;

        if(code >= 0xF8) { 

            c0 = *src++;

            c1 = *src++;

            size -= 2;

            run = ((code & 0x7) << 16) + (c0 << 8) + c1 + 2;

        } else if (code >= 0xF0) { 

            c0 = *src++;

            size--;

            run = ((code & 0xF) << 8) + c0 + 2;

        } else if (code >= 0xE0) { 

            run = (code & 0x1F) + 2;

        } else if (code >= 0xC0) { 

            c0 = *src++;

            c1 = *src++;

            size -= 2;

            copy = ((code & 0x3F) << 16) + (c0 << 8) + c1 + 1;

        } else if (code >= 0x80) { 

            c0 = *src++;

            size--;

            copy = ((code & 0x7F) << 8) + c0 + 1;

        } else { 

            copy = code + 1;

        }



        

        if(run) {

            int p;



            p = *src++;

            size--;

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

                dst[filled++] = p;

                if (filled >= width) {

                    filled = 0;

                    dst -= stride;

                    rows_to_go--;

                    if(rows_to_go <= 0)

                        break;

                }

            }

        } else {

            size -= copy;

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

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

                if (filled >= width) {

                    filled = 0;

                    dst -= stride;

                    rows_to_go--;

                    if(rows_to_go <= 0)

                        break;

                }

            }

        }

    }

}

static void qpeg_decode_intra(const uint8_t *src, uint8_t *dst, int size,
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;

    int VAR_7;

    int VAR_8, VAR_9;

    int VAR_10, VAR_11;

    int VAR_12 = 0;

    int VAR_13;



    VAR_13 = VAR_5;

    VAR_5--;

    VAR_1 = VAR_1 + VAR_5 * VAR_3;



    while((VAR_2 > 0) && (VAR_13 > 0)) {

        VAR_7 = *VAR_0++;

        VAR_2--;

        VAR_10 = VAR_11 = 0;

        if(VAR_7 == 0xFC) 

            break;

        if(VAR_7 >= 0xF8) { 

            VAR_8 = *VAR_0++;

            VAR_9 = *VAR_0++;

            VAR_2 -= 2;

            VAR_10 = ((VAR_7 & 0x7) << 16) + (VAR_8 << 8) + VAR_9 + 2;

        } else if (VAR_7 >= 0xF0) { 

            VAR_8 = *VAR_0++;

            VAR_2--;

            VAR_10 = ((VAR_7 & 0xF) << 8) + VAR_8 + 2;

        } else if (VAR_7 >= 0xE0) { 

            VAR_10 = (VAR_7 & 0x1F) + 2;

        } else if (VAR_7 >= 0xC0) { 

            VAR_8 = *VAR_0++;

            VAR_9 = *VAR_0++;

            VAR_2 -= 2;

            VAR_11 = ((VAR_7 & 0x3F) << 16) + (VAR_8 << 8) + VAR_9 + 1;

        } else if (VAR_7 >= 0x80) { 

            VAR_8 = *VAR_0++;

            VAR_2--;

            VAR_11 = ((VAR_7 & 0x7F) << 8) + VAR_8 + 1;

        } else { 

            VAR_11 = VAR_7 + 1;

        }



        

        if(VAR_10) {

            int VAR_14;



            VAR_14 = *VAR_0++;

            VAR_2--;

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

                VAR_1[VAR_12++] = VAR_14;

                if (VAR_12 >= VAR_4) {

                    VAR_12 = 0;

                    VAR_1 -= VAR_3;

                    VAR_13--;

                    if(VAR_13 <= 0)

                        break;

                }

            }

        } else {

            VAR_2 -= VAR_11;

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

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

                if (VAR_12 >= VAR_4) {

                    VAR_12 = 0;

                    VAR_1 -= VAR_3;

                    VAR_13--;

                    if(VAR_13 <= 0)

                        break;

                }

            }

        }

    }

}

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; int VAR_7; int VAR_8, VAR_9; int VAR_10, VAR_11; int VAR_12 = 0; int VAR_13; VAR_13 = VAR_5; VAR_5--; VAR_1 = VAR_1 + VAR_5 * VAR_3; while((VAR_2 > 0) && (VAR_13 > 0)) { VAR_7 = *VAR_0++; VAR_2--; VAR_10 = VAR_11 = 0; if(VAR_7 == 0xFC)
break; if(VAR_7 >= 0xF8) { VAR_8 = *VAR_0++; VAR_9 = *VAR_0++; VAR_2 -= 2; VAR_10 = ((VAR_7 & 0x7) << 16) + (VAR_8 << 8) + VAR_9 + 2; } else if (VAR_7 >= 0xF0) { VAR_8 = *VAR_0++; VAR_2--; VAR_10 = ((VAR_7 & 0xF) << 8) + VAR_8 + 2; } else if (VAR_7 >= 0xE0) { VAR_10 = (VAR_7 & 0x1F) + 2; } else if (VAR_7 >= 0xC0) { VAR_8 = *VAR_0++; VAR_9 = *VAR_0++; VAR_2 -= 2; VAR_11 = ((VAR_7 & 0x3F) << 16) + (VAR_8 << 8) + VAR_9 + 1; } else if (VAR_7 >= 0x80) { VAR_8 = *VAR_0++; VAR_2--; VAR_11 = ((VAR_7 & 0x7F) << 8) + VAR_8 + 1; } else { VAR_11 = VAR_7 + 1; } if(VAR_10) { int VAR_14; VAR_14 = *VAR_0++; VAR_2--; for(VAR_6 = 0; VAR_6 < VAR_10; VAR_6++) { VAR_1[VAR_12++] = VAR_14; if (VAR_12 >= VAR_4) { VAR_12 = 0; VAR_1 -= VAR_3; VAR_13--; if(VAR_13 <= 0)
break; } } } else { VAR_2 -= VAR_11; for(VAR_6 = 0; VAR_6 < VAR_11; VAR_6++) { VAR_1[VAR_12++] = *VAR_0++; if (VAR_12 >= VAR_4) { VAR_12 = 0; VAR_1 -= VAR_3; VAR_13--; if(VAR_13 <= 0)
break; } } } } }