static int ljpeg_decode_rgb_scan(MJpegDecodeContext *s, int predictor, int point_transform){

    int i, mb_x, mb_y;

    uint16_t buffer[2048][4];

    int left[3], top[3], topleft[3];

    const int linesize= s->linesize[0];

    const int mask= (1<<s->bits)-1;

    

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

        buffer[0][i]= 1 << (s->bits + point_transform - 1);

    }

    for(mb_y = 0; mb_y < s->mb_height; mb_y++) {

        const int modified_predictor= mb_y ? predictor : 1;

        uint8_t *ptr = s->picture.data[0] + (linesize * mb_y);



        if (s->interlaced && s->bottom_field)

            ptr += linesize >> 1;



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

            top[i]= left[i]= topleft[i]= buffer[0][i];

        }

        for(mb_x = 0; mb_x < s->mb_width; mb_x++) {

            if (s->restart_interval && !s->restart_count)

                s->restart_count = s->restart_interval;



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

                int pred;



                topleft[i]= top[i];

                top[i]= buffer[mb_x][i];



                PREDICT(pred, topleft[i], top[i], left[i], modified_predictor);

                

                left[i]= 

                buffer[mb_x][i]= mask & (pred + (mjpeg_decode_dc(s, s->dc_index[i]) << point_transform));

            }



            if (s->restart_interval && !--s->restart_count) {

                align_get_bits(&s->gb);

                skip_bits(&s->gb, 16); /* skip RSTn */

            }

        }



        if(s->rct){

            for(mb_x = 0; mb_x < s->mb_width; mb_x++) {

                ptr[4*mb_x+1] = buffer[mb_x][0] - ((buffer[mb_x][1] + buffer[mb_x][2] - 0x200)>>2);

                ptr[4*mb_x+0] = buffer[mb_x][1] + ptr[4*mb_x+1];

                ptr[4*mb_x+2] = buffer[mb_x][2] + ptr[4*mb_x+1];

            }

        }else if(s->pegasus_rct){

            for(mb_x = 0; mb_x < s->mb_width; mb_x++) {

                ptr[4*mb_x+1] = buffer[mb_x][0] - ((buffer[mb_x][1] + buffer[mb_x][2])>>2);

                ptr[4*mb_x+0] = buffer[mb_x][1] + ptr[4*mb_x+1];

                ptr[4*mb_x+2] = buffer[mb_x][2] + ptr[4*mb_x+1];

            }

        }else{

            for(mb_x = 0; mb_x < s->mb_width; mb_x++) {

                ptr[4*mb_x+0] = buffer[mb_x][0];

                ptr[4*mb_x+1] = buffer[mb_x][1];

                ptr[4*mb_x+2] = buffer[mb_x][2];

            }

        }

    }

    return 0;

}

static int ljpeg_decode_rgb_scan(MJpegDecodeContext *s, int predictor, int point_transform){

    int i, mb_x, mb_y;

    uint16_t buffer[2048][4];

    int left[3], top[3], topleft[3];

    const int linesize= s->linesize[0];

    const int mask= (1<<s->bits)-1;

    

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

        buffer[0][i]= 1 << (s->bits + point_transform - 1);

    }

    for(mb_y = 0; mb_y < s->mb_height; mb_y++) {

        const int modified_predictor= mb_y ? predictor : 1;

        uint8_t *ptr = s->picture.data[0] + (linesize * mb_y);



        if (s->interlaced && s->bottom_field)

            ptr += linesize >> 1;



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

            top[i]= left[i]= topleft[i]= buffer[0][i];

        }

        for(mb_x = 0; mb_x < s->mb_width; mb_x++) {

            if (s->restart_interval && !s->restart_count)

                s->restart_count = s->restart_interval;



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

                int pred;



                topleft[i]= top[i];

                top[i]= buffer[mb_x][i];



                PREDICT(pred, topleft[i], top[i], left[i], modified_predictor);

                

                left[i]= 

                buffer[mb_x][i]= mask & (pred + (mjpeg_decode_dc(s, s->dc_index[i]) << point_transform));

            }



            if (s->restart_interval && !--s->restart_count) {

                align_get_bits(&s->gb);

                skip_bits(&s->gb, 16); 

            }

        }



        if(s->rct){

            for(mb_x = 0; mb_x < s->mb_width; mb_x++) {

                ptr[4*mb_x+1] = buffer[mb_x][0] - ((buffer[mb_x][1] + buffer[mb_x][2] - 0x200)>>2);

                ptr[4*mb_x+0] = buffer[mb_x][1] + ptr[4*mb_x+1];

                ptr[4*mb_x+2] = buffer[mb_x][2] + ptr[4*mb_x+1];

            }

        }else if(s->pegasus_rct){

            for(mb_x = 0; mb_x < s->mb_width; mb_x++) {

                ptr[4*mb_x+1] = buffer[mb_x][0] - ((buffer[mb_x][1] + buffer[mb_x][2])>>2);

                ptr[4*mb_x+0] = buffer[mb_x][1] + ptr[4*mb_x+1];

                ptr[4*mb_x+2] = buffer[mb_x][2] + ptr[4*mb_x+1];

            }

        }else{

            for(mb_x = 0; mb_x < s->mb_width; mb_x++) {

                ptr[4*mb_x+0] = buffer[mb_x][0];

                ptr[4*mb_x+1] = buffer[mb_x][1];

                ptr[4*mb_x+2] = buffer[mb_x][2];

            }

        }

    }

    return 0;

}

    uint16_t buffer[2048][4];
static int FUNC_0(MJpegDecodeContext *VAR_0, int VAR_1, int VAR_2){

    int VAR_3, VAR_4, VAR_5;

    uint16_t buffer[2048][4];

    int VAR_6[3], VAR_7[3], VAR_8[3];

    const int VAR_9= VAR_0->VAR_9[0];

    const int VAR_10= (1<<VAR_0->bits)-1;

    

    for(VAR_3=0; VAR_3<3; VAR_3++){

        buffer[0][VAR_3]= 1 << (VAR_0->bits + VAR_2 - 1);

    }

    for(VAR_5 = 0; VAR_5 < VAR_0->mb_height; VAR_5++) {

        const int modified_predictor= VAR_5 ? VAR_1 : 1;

        uint8_t *ptr = VAR_0->picture.data[0] + (VAR_9 * VAR_5);



        if (VAR_0->interlaced && VAR_0->bottom_field)

            ptr += VAR_9 >> 1;



        for(VAR_3=0; VAR_3<3; VAR_3++){

            VAR_7[VAR_3]= VAR_6[VAR_3]= VAR_8[VAR_3]= buffer[0][VAR_3];

        }

        for(VAR_4 = 0; VAR_4 < VAR_0->mb_width; VAR_4++) {

            if (VAR_0->restart_interval && !VAR_0->restart_count)

                VAR_0->restart_count = VAR_0->restart_interval;



            for(VAR_3=0;VAR_3<3;VAR_3++) {

                int pred;



                VAR_8[VAR_3]= VAR_7[VAR_3];

                VAR_7[VAR_3]= buffer[VAR_4][VAR_3];



                PREDICT(pred, VAR_8[VAR_3], VAR_7[VAR_3], VAR_6[VAR_3], modified_predictor);

                

                VAR_6[VAR_3]= 

                buffer[VAR_4][VAR_3]= VAR_10 & (pred + (mjpeg_decode_dc(VAR_0, VAR_0->dc_index[VAR_3]) << VAR_2));

            }



            if (VAR_0->restart_interval && !--VAR_0->restart_count) {

                align_get_bits(&VAR_0->gb);

                skip_bits(&VAR_0->gb, 16); 

            }

        }



        if(VAR_0->rct){

            for(VAR_4 = 0; VAR_4 < VAR_0->mb_width; VAR_4++) {

                ptr[4*VAR_4+1] = buffer[VAR_4][0] - ((buffer[VAR_4][1] + buffer[VAR_4][2] - 0x200)>>2);

                ptr[4*VAR_4+0] = buffer[VAR_4][1] + ptr[4*VAR_4+1];

                ptr[4*VAR_4+2] = buffer[VAR_4][2] + ptr[4*VAR_4+1];

            }

        }else if(VAR_0->pegasus_rct){

            for(VAR_4 = 0; VAR_4 < VAR_0->mb_width; VAR_4++) {

                ptr[4*VAR_4+1] = buffer[VAR_4][0] - ((buffer[VAR_4][1] + buffer[VAR_4][2])>>2);

                ptr[4*VAR_4+0] = buffer[VAR_4][1] + ptr[4*VAR_4+1];

                ptr[4*VAR_4+2] = buffer[VAR_4][2] + ptr[4*VAR_4+1];

            }

        }else{

            for(VAR_4 = 0; VAR_4 < VAR_0->mb_width; VAR_4++) {

                ptr[4*VAR_4+0] = buffer[VAR_4][0];

                ptr[4*VAR_4+1] = buffer[VAR_4][1];

                ptr[4*VAR_4+2] = buffer[VAR_4][2];

            }

        }

    }

    return 0;

}

static int FUNC_0(MJpegDecodeContext *VAR_0, int VAR_1, int VAR_2){ int VAR_3, VAR_4, VAR_5; uint16_t buffer[2048][4]; int VAR_6[3], VAR_7[3], VAR_8[3]; const int VAR_9= VAR_0->VAR_9[0]; const int VAR_10= (1<<VAR_0->bits)-1; for(VAR_3=0; VAR_3<3; VAR_3++){ buffer[0][VAR_3]= 1 << (VAR_0->bits + VAR_2 - 1); } for(VAR_5 = 0; VAR_5 < VAR_0->mb_height; VAR_5++) { const int modified_predictor= VAR_5 ? VAR_1 : 1; uint8_t *ptr = VAR_0->picture.data[0] + (VAR_9 * VAR_5); if (VAR_0->interlaced && VAR_0->bottom_field)
ptr += VAR_9 >> 1; for(VAR_3=0; VAR_3<3; VAR_3++){ VAR_7[VAR_3]= VAR_6[VAR_3]= VAR_8[VAR_3]= buffer[0][VAR_3]; } for(VAR_4 = 0; VAR_4 < VAR_0->mb_width; VAR_4++) { if (VAR_0->restart_interval && !VAR_0->restart_count)
VAR_0->restart_count = VAR_0->restart_interval; for(VAR_3=0;VAR_3<3;VAR_3++) { int pred; VAR_8[VAR_3]= VAR_7[VAR_3]; VAR_7[VAR_3]= buffer[VAR_4][VAR_3]; PREDICT(pred, VAR_8[VAR_3], VAR_7[VAR_3], VAR_6[VAR_3], modified_predictor); VAR_6[VAR_3]=
buffer[VAR_4][VAR_3]= VAR_10 & (pred + (mjpeg_decode_dc(VAR_0, VAR_0->dc_index[VAR_3]) << VAR_2)); } if (VAR_0->restart_interval && !--VAR_0->restart_count) { align_get_bits(&VAR_0->gb); skip_bits(&VAR_0->gb, 16); } } if(VAR_0->rct){ for(VAR_4 = 0; VAR_4 < VAR_0->mb_width; VAR_4++) { ptr[4*VAR_4+1] = buffer[VAR_4][0] - ((buffer[VAR_4][1] + buffer[VAR_4][2] - 0x200)>>2); ptr[4*VAR_4+0] = buffer[VAR_4][1] + ptr[4*VAR_4+1]; ptr[4*VAR_4+2] = buffer[VAR_4][2] + ptr[4*VAR_4+1]; } }else if(VAR_0->pegasus_rct){ for(VAR_4 = 0; VAR_4 < VAR_0->mb_width; VAR_4++) { ptr[4*VAR_4+1] = buffer[VAR_4][0] - ((buffer[VAR_4][1] + buffer[VAR_4][2])>>2); ptr[4*VAR_4+0] = buffer[VAR_4][1] + ptr[4*VAR_4+1]; ptr[4*VAR_4+2] = buffer[VAR_4][2] + ptr[4*VAR_4+1]; } }else{ for(VAR_4 = 0; VAR_4 < VAR_0->mb_width; VAR_4++) { ptr[4*VAR_4+0] = buffer[VAR_4][0]; ptr[4*VAR_4+1] = buffer[VAR_4][1]; ptr[4*VAR_4+2] = buffer[VAR_4][2]; } } } return 0; }