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

    int i, mb_x, mb_y;

    uint16_t (*buffer)[4];

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

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

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



    av_fast_malloc(&s->ljpeg_buffer, &s->ljpeg_buffer_size, (unsigned)s->mb_width * 4 * sizeof(s->ljpeg_buffer[0][0]));

    buffer= s->ljpeg_buffer;



    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[3*mb_x+1] = buffer[mb_x][0] - ((buffer[mb_x][1] + buffer[mb_x][2] - 0x200)>>2);

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

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

            }

        }else if(s->pegasus_rct){

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

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

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

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

            }

        }else{

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

                ptr[3*mb_x+0] = buffer[mb_x][2];

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

                ptr[3*mb_x+2] = buffer[mb_x][0];

            }

        }

    }

    return 0;

}

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

    int i, mb_x, mb_y;

    uint16_t (*buffer)[4];

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

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

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



    av_fast_malloc(&s->ljpeg_buffer, &s->ljpeg_buffer_size, (unsigned)s->mb_width * 4 * sizeof(s->ljpeg_buffer[0][0]));

    buffer= s->ljpeg_buffer;



    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[3*mb_x+1] = buffer[mb_x][0] - ((buffer[mb_x][1] + buffer[mb_x][2] - 0x200)>>2);

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

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

            }

        }else if(s->pegasus_rct){

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

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

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

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

            }

        }else{

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

                ptr[3*mb_x+0] = buffer[mb_x][2];

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

                ptr[3*mb_x+2] = buffer[mb_x][0];

            }

        }

    }

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



    av_fast_malloc(&VAR_0->ljpeg_buffer, &VAR_0->ljpeg_buffer_size, (unsigned)VAR_0->mb_width * 4 * sizeof(VAR_0->ljpeg_buffer[0][0]));

    buffer= VAR_0->ljpeg_buffer;



    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[3*VAR_4+1] = buffer[VAR_4][0] - ((buffer[VAR_4][1] + buffer[VAR_4][2] - 0x200)>>2);

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

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

            }

        }else if(VAR_0->pegasus_rct){

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

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

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

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

            }

        }else{

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

                ptr[3*VAR_4+0] = buffer[VAR_4][2];

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

                ptr[3*VAR_4+2] = buffer[VAR_4][0];

            }

        }

    }

    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)[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; av_fast_malloc(&VAR_0->ljpeg_buffer, &VAR_0->ljpeg_buffer_size, (unsigned)VAR_0->mb_width * 4 * sizeof(VAR_0->ljpeg_buffer[0][0])); buffer= VAR_0->ljpeg_buffer; 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[3*VAR_4+1] = buffer[VAR_4][0] - ((buffer[VAR_4][1] + buffer[VAR_4][2] - 0x200)>>2); ptr[3*VAR_4+0] = buffer[VAR_4][1] + ptr[3*VAR_4+1]; ptr[3*VAR_4+2] = buffer[VAR_4][2] + ptr[3*VAR_4+1]; } }else if(VAR_0->pegasus_rct){ for(VAR_4 = 0; VAR_4 < VAR_0->mb_width; VAR_4++) { ptr[3*VAR_4+1] = buffer[VAR_4][0] - ((buffer[VAR_4][1] + buffer[VAR_4][2])>>2); ptr[3*VAR_4+0] = buffer[VAR_4][1] + ptr[3*VAR_4+1]; ptr[3*VAR_4+2] = buffer[VAR_4][2] + ptr[3*VAR_4+1]; } }else{ for(VAR_4 = 0; VAR_4 < VAR_0->mb_width; VAR_4++) { ptr[3*VAR_4+0] = buffer[VAR_4][2]; ptr[3*VAR_4+1] = buffer[VAR_4][1]; ptr[3*VAR_4+2] = buffer[VAR_4][0]; } } } return 0; }