static int rv10_decode_frame(AVCodecContext *avctx,

                             void *data, int *data_size,

                             AVPacket *avpkt)

{

    const uint8_t *buf = avpkt->data;

    int buf_size = avpkt->size;

    MpegEncContext *s = avctx->priv_data;

    int i;

    AVFrame *pict = data;

    int slice_count;

    const uint8_t *slices_hdr = NULL;



    av_dlog(avctx, "*****frame %d size=%d\n", avctx->frame_number, buf_size);



    /* no supplementary picture */

    if (buf_size == 0) {

        return 0;

    }



    if(!avctx->slice_count){

        slice_count = (*buf++) + 1;

        slices_hdr = buf + 4;

        buf += 8 * slice_count;

    }else

        slice_count = avctx->slice_count;



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

        int offset= get_slice_offset(avctx, slices_hdr, i);

        int size, size2;



        if(i+1 == slice_count)

            size= buf_size - offset;

        else

            size= get_slice_offset(avctx, slices_hdr, i+1) - offset;



        if(i+2 >= slice_count)

            size2= buf_size - offset;

        else

            size2= get_slice_offset(avctx, slices_hdr, i+2) - offset;



        if(rv10_decode_packet(avctx, buf+offset, size, size2) > 8*size)

            i++;

    }



    if(s->current_picture_ptr != NULL && s->mb_y>=s->mb_height){

        ff_er_frame_end(s);

        MPV_frame_end(s);



        if (s->pict_type == AV_PICTURE_TYPE_B || s->low_delay) {

            *pict= *(AVFrame*)s->current_picture_ptr;

        } else if (s->last_picture_ptr != NULL) {

            *pict= *(AVFrame*)s->last_picture_ptr;

        }



        if(s->last_picture_ptr || s->low_delay){

            *data_size = sizeof(AVFrame);

            ff_print_debug_info(s, pict);

        }

        s->current_picture_ptr= NULL; //so we can detect if frame_end wasnt called (find some nicer solution...)

    }



    return buf_size;

}

static int rv10_decode_frame(AVCodecContext *avctx,

                             void *data, int *data_size,

                             AVPacket *avpkt)

{

    const uint8_t *buf = avpkt->data;

    int buf_size = avpkt->size;

    MpegEncContext *s = avctx->priv_data;

    int i;

    AVFrame *pict = data;

    int slice_count;

    const uint8_t *slices_hdr = NULL;



    av_dlog(avctx, "*****frame %d size=%d\n", avctx->frame_number, buf_size);



    

    if (buf_size == 0) {

        return 0;

    }



    if(!avctx->slice_count){

        slice_count = (*buf++) + 1;

        slices_hdr = buf + 4;

        buf += 8 * slice_count;

    }else

        slice_count = avctx->slice_count;



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

        int offset= get_slice_offset(avctx, slices_hdr, i);

        int size, size2;



        if(i+1 == slice_count)

            size= buf_size - offset;

        else

            size= get_slice_offset(avctx, slices_hdr, i+1) - offset;



        if(i+2 >= slice_count)

            size2= buf_size - offset;

        else

            size2= get_slice_offset(avctx, slices_hdr, i+2) - offset;



        if(rv10_decode_packet(avctx, buf+offset, size, size2) > 8*size)

            i++;

    }



    if(s->current_picture_ptr != NULL && s->mb_y>=s->mb_height){

        ff_er_frame_end(s);

        MPV_frame_end(s);



        if (s->pict_type == AV_PICTURE_TYPE_B || s->low_delay) {

            *pict= *(AVFrame*)s->current_picture_ptr;

        } else if (s->last_picture_ptr != NULL) {

            *pict= *(AVFrame*)s->last_picture_ptr;

        }



        if(s->last_picture_ptr || s->low_delay){

            *data_size = sizeof(AVFrame);

            ff_print_debug_info(s, pict);

        }

        s->current_picture_ptr= NULL; 

    }



    return buf_size;

}

        int offset= get_slice_offset(avctx, slices_hdr, i);
static int FUNC_0(AVCodecContext *VAR_0,

                             void *VAR_1, int *VAR_2,

                             AVPacket *VAR_3)

{

    const uint8_t *VAR_4 = VAR_3->VAR_1;

    int VAR_5 = VAR_3->VAR_10;

    MpegEncContext *s = VAR_0->priv_data;

    int VAR_6;

    AVFrame *pict = VAR_1;

    int VAR_7;

    const uint8_t *VAR_8 = NULL;



    av_dlog(VAR_0, "*****frame %d VAR_10=%d\n", VAR_0->frame_number, VAR_5);



    

    if (VAR_5 == 0) {

        return 0;

    }



    if(!VAR_0->VAR_7){

        VAR_7 = (*VAR_4++) + 1;

        VAR_8 = VAR_4 + 4;

        VAR_4 += 8 * VAR_7;

    }else

        VAR_7 = VAR_0->VAR_7;



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

        int VAR_9= get_slice_offset(VAR_0, VAR_8, VAR_6);

        int VAR_10, VAR_11;



        if(VAR_6+1 == VAR_7)

            VAR_10= VAR_5 - VAR_9;

        else

            VAR_10= get_slice_offset(VAR_0, VAR_8, VAR_6+1) - VAR_9;



        if(VAR_6+2 >= VAR_7)

            VAR_11= VAR_5 - VAR_9;

        else

            VAR_11= get_slice_offset(VAR_0, VAR_8, VAR_6+2) - VAR_9;



        if(rv10_decode_packet(VAR_0, VAR_4+VAR_9, VAR_10, VAR_11) > 8*VAR_10)

            VAR_6++;

    }



    if(s->current_picture_ptr != NULL && s->mb_y>=s->mb_height){

        ff_er_frame_end(s);

        MPV_frame_end(s);



        if (s->pict_type == AV_PICTURE_TYPE_B || s->low_delay) {

            *pict= *(AVFrame*)s->current_picture_ptr;

        } else if (s->last_picture_ptr != NULL) {

            *pict= *(AVFrame*)s->last_picture_ptr;

        }



        if(s->last_picture_ptr || s->low_delay){

            *VAR_2 = sizeof(AVFrame);

            ff_print_debug_info(s, pict);

        }

        s->current_picture_ptr= NULL; 

    }



    return VAR_5;

}

static int FUNC_0(AVCodecContext *VAR_0,
void *VAR_1, int *VAR_2,
AVPacket *VAR_3)
{ const uint8_t *VAR_4 = VAR_3->VAR_1; int VAR_5 = VAR_3->VAR_10; MpegEncContext *s = VAR_0->priv_data; int VAR_6; AVFrame *pict = VAR_1; int VAR_7; const uint8_t *VAR_8 = NULL; av_dlog(VAR_0, "*****frame %d VAR_10=%d\n", VAR_0->frame_number, VAR_5); if (VAR_5 == 0) { return 0; } if(!VAR_0->VAR_7){ VAR_7 = (*VAR_4++) + 1; VAR_8 = VAR_4 + 4; VAR_4 += 8 * VAR_7; }else VAR_7 = VAR_0->VAR_7; for(VAR_6=0; VAR_6<VAR_7; VAR_6++){ int VAR_9= get_slice_offset(VAR_0, VAR_8, VAR_6); int VAR_10, VAR_11; if(VAR_6+1 == VAR_7)
VAR_10= VAR_5 - VAR_9; else
VAR_10= get_slice_offset(VAR_0, VAR_8, VAR_6+1) - VAR_9; if(VAR_6+2 >= VAR_7)
VAR_11= VAR_5 - VAR_9; else
VAR_11= get_slice_offset(VAR_0, VAR_8, VAR_6+2) - VAR_9; if(rv10_decode_packet(VAR_0, VAR_4+VAR_9, VAR_10, VAR_11) > 8*VAR_10)
VAR_6++; } if(s->current_picture_ptr != NULL && s->mb_y>=s->mb_height){ ff_er_frame_end(s); MPV_frame_end(s); if (s->pict_type == AV_PICTURE_TYPE_B || s->low_delay) { *pict= *(AVFrame*)s->current_picture_ptr; } else if (s->last_picture_ptr != NULL) { *pict= *(AVFrame*)s->last_picture_ptr; } if(s->last_picture_ptr || s->low_delay){ *VAR_2 = sizeof(AVFrame); ff_print_debug_info(s, pict); } s->current_picture_ptr= NULL; } return VAR_5; }