static int mpeg4_decode_video_packet_header(MpegEncContext *s)

{

    int mb_num_bits= av_log2(s->mb_num - 1) + 1;

    int header_extension=0, mb_num, len;

    

    /* is there enough space left for a video packet + header */

    if( get_bits_count(&s->gb) > s->gb.size*8-20) return -1;



    for(len=0; len<32; len++){

        if(get_bits1(&s->gb)) break;

    }



    if(len!=ff_mpeg4_get_video_packet_prefix_length(s)){

        printf("marker does not match f_code\n");

        return -1;

    }

    

    if(s->shape != RECT_SHAPE){

        header_extension= get_bits1(&s->gb);

        //FIXME more stuff here

    }



    mb_num= get_bits(&s->gb, mb_num_bits);

    if(mb_num>=s->mb_num){

        fprintf(stderr, "illegal mb_num in video packet (%d %d) \n", mb_num, s->mb_num);

        return -1;

    }

    s->mb_x= mb_num % s->mb_width;

    s->mb_y= mb_num / s->mb_width;



    if(s->shape != BIN_ONLY_SHAPE){

        int qscale= get_bits(&s->gb, s->quant_precision); 

        if(qscale)

            s->qscale= qscale;

    }



    if(s->shape == RECT_SHAPE){

        header_extension= get_bits1(&s->gb);

    }

    if(header_extension){

        int time_increment;

        int time_incr=0;



        while (get_bits1(&s->gb) != 0) 

            time_incr++;



        check_marker(&s->gb, "before time_increment in video packed header");

        time_increment= get_bits(&s->gb, s->time_increment_bits);

        check_marker(&s->gb, "before vop_coding_type in video packed header");

        

        skip_bits(&s->gb, 2); /* vop coding type */

        //FIXME not rect stuff here



        if(s->shape != BIN_ONLY_SHAPE){

            skip_bits(&s->gb, 3); /* intra dc vlc threshold */

//FIXME dont just ignore everything

            if(s->pict_type == S_TYPE && s->vol_sprite_usage==GMC_SPRITE){

                mpeg4_decode_sprite_trajectory(s);

                fprintf(stderr, "untested\n");

            }



            //FIXME reduced res stuff here

            

            if (s->pict_type != I_TYPE) {

                int f_code = get_bits(&s->gb, 3);	/* fcode_for */

                if(f_code==0){

                    printf("Error, video packet header damaged (f_code=0)\n");

                }

            }

            if (s->pict_type == B_TYPE) {

                int b_code = get_bits(&s->gb, 3);

                if(b_code==0){

                    printf("Error, video packet header damaged (b_code=0)\n");

                }

            }       

        }

    }

    //FIXME new-pred stuff

    

//printf("parse ok %d %d %d %d\n", mb_num, s->mb_x + s->mb_y*s->mb_width, get_bits_count(gb), get_bits_count(&s->gb));



    return 0;

}

static int mpeg4_decode_video_packet_header(MpegEncContext *s)

{

    int mb_num_bits= av_log2(s->mb_num - 1) + 1;

    int header_extension=0, mb_num, len;

    

    

    if( get_bits_count(&s->gb) > s->gb.size*8-20) return -1;



    for(len=0; len<32; len++){

        if(get_bits1(&s->gb)) break;

    }



    if(len!=ff_mpeg4_get_video_packet_prefix_length(s)){

        printf("marker does not match f_code\n");

        return -1;

    }

    

    if(s->shape != RECT_SHAPE){

        header_extension= get_bits1(&s->gb);

        

    }



    mb_num= get_bits(&s->gb, mb_num_bits);

    if(mb_num>=s->mb_num){

        fprintf(stderr, "illegal mb_num in video packet (%d %d) \n", mb_num, s->mb_num);

        return -1;

    }

    s->mb_x= mb_num % s->mb_width;

    s->mb_y= mb_num / s->mb_width;



    if(s->shape != BIN_ONLY_SHAPE){

        int qscale= get_bits(&s->gb, s->quant_precision); 

        if(qscale)

            s->qscale= qscale;

    }



    if(s->shape == RECT_SHAPE){

        header_extension= get_bits1(&s->gb);

    }

    if(header_extension){

        int time_increment;

        int time_incr=0;



        while (get_bits1(&s->gb) != 0) 

            time_incr++;



        check_marker(&s->gb, "before time_increment in video packed header");

        time_increment= get_bits(&s->gb, s->time_increment_bits);

        check_marker(&s->gb, "before vop_coding_type in video packed header");

        

        skip_bits(&s->gb, 2); 

        



        if(s->shape != BIN_ONLY_SHAPE){

            skip_bits(&s->gb, 3); 



            if(s->pict_type == S_TYPE && s->vol_sprite_usage==GMC_SPRITE){

                mpeg4_decode_sprite_trajectory(s);

                fprintf(stderr, "untested\n");

            }



            

            

            if (s->pict_type != I_TYPE) {

                int f_code = get_bits(&s->gb, 3);	

                if(f_code==0){

                    printf("Error, video packet header damaged (f_code=0)\n");

                }

            }

            if (s->pict_type == B_TYPE) {

                int b_code = get_bits(&s->gb, 3);

                if(b_code==0){

                    printf("Error, video packet header damaged (b_code=0)\n");

                }

            }       

        }

    }

    

    





    return 0;

}

static int FUNC_0(MpegEncContext *VAR_0)

{

    int VAR_1= av_log2(VAR_0->VAR_3 - 1) + 1;

    int VAR_2=0, VAR_3, VAR_4;

    

    

    if( get_bits_count(&VAR_0->gb) > VAR_0->gb.size*8-20) return -1;



    for(VAR_4=0; VAR_4<32; VAR_4++){

        if(get_bits1(&VAR_0->gb)) break;

    }



    if(VAR_4!=ff_mpeg4_get_video_packet_prefix_length(VAR_0)){

        printf("marker does not match VAR_8\n");

        return -1;

    }

    

    if(VAR_0->shape != RECT_SHAPE){

        VAR_2= get_bits1(&VAR_0->gb);

        

    }



    VAR_3= get_bits(&VAR_0->gb, VAR_1);

    if(VAR_3>=VAR_0->VAR_3){

        fprintf(stderr, "illegal VAR_3 in video packet (%d %d) \n", VAR_3, VAR_0->VAR_3);

        return -1;

    }

    VAR_0->mb_x= VAR_3 % VAR_0->mb_width;

    VAR_0->mb_y= VAR_3 / VAR_0->mb_width;



    if(VAR_0->shape != BIN_ONLY_SHAPE){

        int VAR_5= get_bits(&VAR_0->gb, VAR_0->quant_precision); 

        if(VAR_5)

            VAR_0->VAR_5= VAR_5;

    }



    if(VAR_0->shape == RECT_SHAPE){

        VAR_2= get_bits1(&VAR_0->gb);

    }

    if(VAR_2){

        int VAR_6;

        int VAR_7=0;



        while (get_bits1(&VAR_0->gb) != 0) 

            VAR_7++;



        check_marker(&VAR_0->gb, "before VAR_6 in video packed header");

        VAR_6= get_bits(&VAR_0->gb, VAR_0->time_increment_bits);

        check_marker(&VAR_0->gb, "before vop_coding_type in video packed header");

        

        skip_bits(&VAR_0->gb, 2); 

        



        if(VAR_0->shape != BIN_ONLY_SHAPE){

            skip_bits(&VAR_0->gb, 3); 



            if(VAR_0->pict_type == S_TYPE && VAR_0->vol_sprite_usage==GMC_SPRITE){

                mpeg4_decode_sprite_trajectory(VAR_0);

                fprintf(stderr, "untested\n");

            }



            

            

            if (VAR_0->pict_type != I_TYPE) {

                int VAR_8 = get_bits(&VAR_0->gb, 3);	

                if(VAR_8==0){

                    printf("Error, video packet header damaged (VAR_8=0)\n");

                }

            }

            if (VAR_0->pict_type == B_TYPE) {

                int VAR_9 = get_bits(&VAR_0->gb, 3);

                if(VAR_9==0){

                    printf("Error, video packet header damaged (VAR_9=0)\n");

                }

            }       

        }

    }

    

    





    return 0;

}

static int FUNC_0(MpegEncContext *VAR_0)
{ int VAR_1= av_log2(VAR_0->VAR_3 - 1) + 1; int VAR_2=0, VAR_3, VAR_4; if( get_bits_count(&VAR_0->gb) > VAR_0->gb.size*8-20) return -1; for(VAR_4=0; VAR_4<32; VAR_4++){ if(get_bits1(&VAR_0->gb)) break; } if(VAR_4!=ff_mpeg4_get_video_packet_prefix_length(VAR_0)){ printf("marker does not match VAR_8\n"); return -1; } if(VAR_0->shape != RECT_SHAPE){ VAR_2= get_bits1(&VAR_0->gb); } VAR_3= get_bits(&VAR_0->gb, VAR_1); if(VAR_3>=VAR_0->VAR_3){ fprintf(stderr, "illegal VAR_3 in video packet (%d %d) \n", VAR_3, VAR_0->VAR_3); return -1; } VAR_0->mb_x= VAR_3 % VAR_0->mb_width; VAR_0->mb_y= VAR_3 / VAR_0->mb_width; if(VAR_0->shape != BIN_ONLY_SHAPE){ int VAR_5= get_bits(&VAR_0->gb, VAR_0->quant_precision); if(VAR_5)
VAR_0->VAR_5= VAR_5; } if(VAR_0->shape == RECT_SHAPE){ VAR_2= get_bits1(&VAR_0->gb); } if(VAR_2){ int VAR_6; int VAR_7=0; while (get_bits1(&VAR_0->gb) != 0)
VAR_7++; check_marker(&VAR_0->gb, "before VAR_6 in video packed header"); VAR_6= get_bits(&VAR_0->gb, VAR_0->time_increment_bits); check_marker(&VAR_0->gb, "before vop_coding_type in video packed header"); skip_bits(&VAR_0->gb, 2); if(VAR_0->shape != BIN_ONLY_SHAPE){ skip_bits(&VAR_0->gb, 3); if(VAR_0->pict_type == S_TYPE && VAR_0->vol_sprite_usage==GMC_SPRITE){ mpeg4_decode_sprite_trajectory(VAR_0); fprintf(stderr, "untested\n"); } if (VAR_0->pict_type != I_TYPE) { int VAR_8 = get_bits(&VAR_0->gb, 3); if(VAR_8==0){ printf("Error, video packet header damaged (VAR_8=0)\n"); } } if (VAR_0->pict_type == B_TYPE) { int VAR_9 = get_bits(&VAR_0->gb, 3); if(VAR_9==0){ printf("Error, video packet header damaged (VAR_9=0)\n"); } } } } return 0; }