static int jpg_decode_data(JPGContext *c, int width, int height,

                           const uint8_t *src, int src_size,

                           uint8_t *dst, int dst_stride,

                           const uint8_t *mask, int mask_stride, int num_mbs,

                           int swapuv)

{

    GetBitContext gb;

    int mb_w, mb_h, mb_x, mb_y, i, j;

    int bx, by;

    int unesc_size;

    int ret;



    if ((ret = av_reallocp(&c->buf,

                           src_size + FF_INPUT_BUFFER_PADDING_SIZE)) < 0)

        return ret;

    jpg_unescape(src, src_size, c->buf, &unesc_size);

    memset(c->buf + unesc_size, 0, FF_INPUT_BUFFER_PADDING_SIZE);

    init_get_bits8(&gb, c->buf, unesc_size);



    width = FFALIGN(width, 16);

    mb_w  =  width        >> 4;

    mb_h  = (height + 15) >> 4;



    if (!num_mbs)

        num_mbs = mb_w * mb_h * 4;



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

        c->prev_dc[i] = 1024;

    bx =

    by = 0;

    c->bdsp.clear_blocks(c->block[0]);

    for (mb_y = 0; mb_y < mb_h; mb_y++) {

        for (mb_x = 0; mb_x < mb_w; mb_x++) {

            if (mask && !mask[mb_x * 2] && !mask[mb_x * 2 + 1] &&

                !mask[mb_x * 2 +     mask_stride] &&

                !mask[mb_x * 2 + 1 + mask_stride]) {

                bx += 16;

                continue;

            }

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

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

                    if (mask && !mask[mb_x * 2 + i + j * mask_stride])

                        continue;

                    num_mbs--;

                    if ((ret = jpg_decode_block(c, &gb, 0,

                                                c->block[i + j * 2])) != 0)

                        return ret;

                    c->idsp.idct(c->block[i + j * 2]);

                }

            }

            for (i = 1; i < 3; i++) {

                if ((ret = jpg_decode_block(c, &gb, i, c->block[i + 3])) != 0)

                    return ret;

                c->idsp.idct(c->block[i + 3]);

            }



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

                uint8_t *out = dst + bx * 3 + (by + j) * dst_stride;

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

                    int Y, U, V;



                    Y = c->block[(j >> 3) * 2 + (i >> 3)][(i & 7) + (j & 7) * 8];

                    U = c->block[4 ^ swapuv][(i >> 1) + (j >> 1) * 8] - 128;

                    V = c->block[5 ^ swapuv][(i >> 1) + (j >> 1) * 8] - 128;

                    yuv2rgb(out + i * 3, Y, U, V);

                }

            }



            if (!num_mbs)

                return 0;

            bx += 16;

        }

        bx  = 0;

        by += 16;

        if (mask)

            mask += mask_stride * 2;

    }



    return 0;

}

static int jpg_decode_data(JPGContext *c, int width, int height,

                           const uint8_t *src, int src_size,

                           uint8_t *dst, int dst_stride,

                           const uint8_t *mask, int mask_stride, int num_mbs,

                           int swapuv)

{

    GetBitContext gb;

    int mb_w, mb_h, mb_x, mb_y, i, j;

    int bx, by;

    int unesc_size;

    int ret;



    if ((ret = av_reallocp(&c->buf,

                           src_size + FF_INPUT_BUFFER_PADDING_SIZE)) < 0)

        return ret;

    jpg_unescape(src, src_size, c->buf, &unesc_size);

    memset(c->buf + unesc_size, 0, FF_INPUT_BUFFER_PADDING_SIZE);

    init_get_bits8(&gb, c->buf, unesc_size);



    width = FFALIGN(width, 16);

    mb_w  =  width        >> 4;

    mb_h  = (height + 15) >> 4;



    if (!num_mbs)

        num_mbs = mb_w * mb_h * 4;



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

        c->prev_dc[i] = 1024;

    bx =

    by = 0;

    c->bdsp.clear_blocks(c->block[0]);

    for (mb_y = 0; mb_y < mb_h; mb_y++) {

        for (mb_x = 0; mb_x < mb_w; mb_x++) {

            if (mask && !mask[mb_x * 2] && !mask[mb_x * 2 + 1] &&

                !mask[mb_x * 2 +     mask_stride] &&

                !mask[mb_x * 2 + 1 + mask_stride]) {

                bx += 16;

                continue;

            }

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

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

                    if (mask && !mask[mb_x * 2 + i + j * mask_stride])

                        continue;

                    num_mbs--;

                    if ((ret = jpg_decode_block(c, &gb, 0,

                                                c->block[i + j * 2])) != 0)

                        return ret;

                    c->idsp.idct(c->block[i + j * 2]);

                }

            }

            for (i = 1; i < 3; i++) {

                if ((ret = jpg_decode_block(c, &gb, i, c->block[i + 3])) != 0)

                    return ret;

                c->idsp.idct(c->block[i + 3]);

            }



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

                uint8_t *out = dst + bx * 3 + (by + j) * dst_stride;

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

                    int Y, U, V;



                    Y = c->block[(j >> 3) * 2 + (i >> 3)][(i & 7) + (j & 7) * 8];

                    U = c->block[4 ^ swapuv][(i >> 1) + (j >> 1) * 8] - 128;

                    V = c->block[5 ^ swapuv][(i >> 1) + (j >> 1) * 8] - 128;

                    yuv2rgb(out + i * 3, Y, U, V);

                }

            }



            if (!num_mbs)

                return 0;

            bx += 16;

        }

        bx  = 0;

        by += 16;

        if (mask)

            mask += mask_stride * 2;

    }



    return 0;

}

static int FUNC_0(JPGContext *VAR_0, int VAR_1, int VAR_2,

                           const uint8_t *VAR_3, int VAR_4,

                           uint8_t *VAR_5, int VAR_6,

                           const uint8_t *VAR_7, int VAR_8, int VAR_9,

                           int VAR_10)

{

    GetBitContext gb;

    int VAR_11, VAR_12, VAR_13, VAR_14, VAR_15, VAR_16;

    int VAR_17, VAR_18;

    int VAR_19;

    int VAR_20;



    if ((VAR_20 = av_reallocp(&VAR_0->buf,

                           VAR_4 + FF_INPUT_BUFFER_PADDING_SIZE)) < 0)

        return VAR_20;

    jpg_unescape(VAR_3, VAR_4, VAR_0->buf, &VAR_19);

    memset(VAR_0->buf + VAR_19, 0, FF_INPUT_BUFFER_PADDING_SIZE);

    init_get_bits8(&gb, VAR_0->buf, VAR_19);



    VAR_1 = FFALIGN(VAR_1, 16);

    VAR_11  =  VAR_1        >> 4;

    VAR_12  = (VAR_2 + 15) >> 4;



    if (!VAR_9)

        VAR_9 = VAR_11 * VAR_12 * 4;



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

        VAR_0->prev_dc[VAR_15] = 1024;

    VAR_17 =

    VAR_18 = 0;

    VAR_0->bdsp.clear_blocks(VAR_0->block[0]);

    for (VAR_14 = 0; VAR_14 < VAR_12; VAR_14++) {

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

            if (VAR_7 && !VAR_7[VAR_13 * 2] && !VAR_7[VAR_13 * 2 + 1] &&

                !VAR_7[VAR_13 * 2 +     VAR_8] &&

                !VAR_7[VAR_13 * 2 + 1 + VAR_8]) {

                VAR_17 += 16;

                continue;

            }

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

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

                    if (VAR_7 && !VAR_7[VAR_13 * 2 + VAR_15 + VAR_16 * VAR_8])

                        continue;

                    VAR_9--;

                    if ((VAR_20 = jpg_decode_block(VAR_0, &gb, 0,

                                                VAR_0->block[VAR_15 + VAR_16 * 2])) != 0)

                        return VAR_20;

                    VAR_0->idsp.idct(VAR_0->block[VAR_15 + VAR_16 * 2]);

                }

            }

            for (VAR_15 = 1; VAR_15 < 3; VAR_15++) {

                if ((VAR_20 = jpg_decode_block(VAR_0, &gb, VAR_15, VAR_0->block[VAR_15 + 3])) != 0)

                    return VAR_20;

                VAR_0->idsp.idct(VAR_0->block[VAR_15 + 3]);

            }



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

                uint8_t *out = VAR_5 + VAR_17 * 3 + (VAR_18 + VAR_16) * VAR_6;

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

                    int VAR_21, VAR_22, VAR_23;



                    VAR_21 = VAR_0->block[(VAR_16 >> 3) * 2 + (VAR_15 >> 3)][(VAR_15 & 7) + (VAR_16 & 7) * 8];

                    VAR_22 = VAR_0->block[4 ^ VAR_10][(VAR_15 >> 1) + (VAR_16 >> 1) * 8] - 128;

                    VAR_23 = VAR_0->block[5 ^ VAR_10][(VAR_15 >> 1) + (VAR_16 >> 1) * 8] - 128;

                    yuv2rgb(out + VAR_15 * 3, VAR_21, VAR_22, VAR_23);

                }

            }



            if (!VAR_9)

                return 0;

            VAR_17 += 16;

        }

        VAR_17  = 0;

        VAR_18 += 16;

        if (VAR_7)

            VAR_7 += VAR_8 * 2;

    }



    return 0;

}

static int FUNC_0(JPGContext *VAR_0, int VAR_1, int VAR_2,
const uint8_t *VAR_3, int VAR_4,
uint8_t *VAR_5, int VAR_6,
const uint8_t *VAR_7, int VAR_8, int VAR_9,
int VAR_10)
{ GetBitContext gb; int VAR_11, VAR_12, VAR_13, VAR_14, VAR_15, VAR_16; int VAR_17, VAR_18; int VAR_19; int VAR_20; if ((VAR_20 = av_reallocp(&VAR_0->buf,
VAR_4 + FF_INPUT_BUFFER_PADDING_SIZE)) < 0)
return VAR_20; jpg_unescape(VAR_3, VAR_4, VAR_0->buf, &VAR_19); memset(VAR_0->buf + VAR_19, 0, FF_INPUT_BUFFER_PADDING_SIZE); init_get_bits8(&gb, VAR_0->buf, VAR_19); VAR_1 = FFALIGN(VAR_1, 16); VAR_11  =  VAR_1        >> 4; VAR_12  = (VAR_2 + 15) >> 4; if (!VAR_9)
VAR_9 = VAR_11 * VAR_12 * 4; for (VAR_15 = 0; VAR_15 < 3; VAR_15++) VAR_0->prev_dc[VAR_15] = 1024; VAR_17 =
VAR_18 = 0; VAR_0->bdsp.clear_blocks(VAR_0->block[0]); for (VAR_14 = 0; VAR_14 < VAR_12; VAR_14++) { for (VAR_13 = 0; VAR_13 < VAR_11; VAR_13++) { if (VAR_7 && !VAR_7[VAR_13 * 2] && !VAR_7[VAR_13 * 2 + 1] &&
!VAR_7[VAR_13 * 2 +     VAR_8] &&
!VAR_7[VAR_13 * 2 + 1 + VAR_8]) { VAR_17 += 16; continue; } for (VAR_16 = 0; VAR_16 < 2; VAR_16++) { for (VAR_15 = 0; VAR_15 < 2; VAR_15++) { if (VAR_7 && !VAR_7[VAR_13 * 2 + VAR_15 + VAR_16 * VAR_8])
continue; VAR_9--; if ((VAR_20 = jpg_decode_block(VAR_0, &gb, 0,
VAR_0->block[VAR_15 + VAR_16 * 2])) != 0)
return VAR_20; VAR_0->idsp.idct(VAR_0->block[VAR_15 + VAR_16 * 2]); } } for (VAR_15 = 1; VAR_15 < 3; VAR_15++) { if ((VAR_20 = jpg_decode_block(VAR_0, &gb, VAR_15, VAR_0->block[VAR_15 + 3])) != 0)
return VAR_20; VAR_0->idsp.idct(VAR_0->block[VAR_15 + 3]); } for (VAR_16 = 0; VAR_16 < 16; VAR_16++) { uint8_t *out = VAR_5 + VAR_17 * 3 + (VAR_18 + VAR_16) * VAR_6; for (VAR_15 = 0; VAR_15 < 16; VAR_15++) { int VAR_21, VAR_22, VAR_23; VAR_21 = VAR_0->block[(VAR_16 >> 3) * 2 + (VAR_15 >> 3)][(VAR_15 & 7) + (VAR_16 & 7) * 8]; VAR_22 = VAR_0->block[4 ^ VAR_10][(VAR_15 >> 1) + (VAR_16 >> 1) * 8] - 128; VAR_23 = VAR_0->block[5 ^ VAR_10][(VAR_15 >> 1) + (VAR_16 >> 1) * 8] - 128; yuv2rgb(out + VAR_15 * 3, VAR_21, VAR_22, VAR_23); } } if (!VAR_9)
return 0; VAR_17 += 16; } VAR_17  = 0; VAR_18 += 16; if (VAR_7)
VAR_7 += VAR_8 * 2; } return 0; }