int ff_mpeg4_decode_picture_header(MpegEncContext * s, GetBitContext *gb)

{

    int startcode, v;



    /* search next start code */

    align_get_bits(gb);



    if(s->avctx->codec_tag == ff_get_fourcc("WV1F") && show_bits(gb, 24) == 0x575630){

        skip_bits(gb, 24);

        if(get_bits(gb, 8) == 0xF0)

            return decode_vop_header(s, gb);

    }



    startcode = 0xff;

    for(;;) {

        v = get_bits(gb, 8);

        startcode = ((startcode << 8) | v) & 0xffffffff;

        

        if(get_bits_count(gb) >= gb->size_in_bits){

            if(gb->size_in_bits==8 && (s->divx_version || s->xvid_build)){

                av_log(s->avctx, AV_LOG_ERROR, "frame skip %d\n", gb->size_in_bits);

                return FRAME_SKIPPED; //divx bug

            }else

                return -1; //end of stream

        }



        if((startcode&0xFFFFFF00) != 0x100)

            continue; //no startcode

        

        if(s->avctx->debug&FF_DEBUG_STARTCODE){

            av_log(s->avctx, AV_LOG_DEBUG, "startcode: %3X ", startcode);

            if     (startcode<=0x11F) av_log(s->avctx, AV_LOG_DEBUG, "Video Object Start");

            else if(startcode<=0x12F) av_log(s->avctx, AV_LOG_DEBUG, "Video Object Layer Start");

            else if(startcode<=0x13F) av_log(s->avctx, AV_LOG_DEBUG, "Reserved");

            else if(startcode<=0x15F) av_log(s->avctx, AV_LOG_DEBUG, "FGS bp start");

            else if(startcode<=0x1AF) av_log(s->avctx, AV_LOG_DEBUG, "Reserved");

            else if(startcode==0x1B0) av_log(s->avctx, AV_LOG_DEBUG, "Visual Object Seq Start");

            else if(startcode==0x1B1) av_log(s->avctx, AV_LOG_DEBUG, "Visual Object Seq End");

            else if(startcode==0x1B2) av_log(s->avctx, AV_LOG_DEBUG, "User Data");

            else if(startcode==0x1B3) av_log(s->avctx, AV_LOG_DEBUG, "Group of VOP start");

            else if(startcode==0x1B4) av_log(s->avctx, AV_LOG_DEBUG, "Video Session Error");

            else if(startcode==0x1B5) av_log(s->avctx, AV_LOG_DEBUG, "Visual Object Start");

            else if(startcode==0x1B6) av_log(s->avctx, AV_LOG_DEBUG, "Video Object Plane start");

            else if(startcode==0x1B7) av_log(s->avctx, AV_LOG_DEBUG, "slice start");

            else if(startcode==0x1B8) av_log(s->avctx, AV_LOG_DEBUG, "extension start");

            else if(startcode==0x1B9) av_log(s->avctx, AV_LOG_DEBUG, "fgs start");

            else if(startcode==0x1BA) av_log(s->avctx, AV_LOG_DEBUG, "FBA Object start");

            else if(startcode==0x1BB) av_log(s->avctx, AV_LOG_DEBUG, "FBA Object Plane start");

            else if(startcode==0x1BC) av_log(s->avctx, AV_LOG_DEBUG, "Mesh Object start");

            else if(startcode==0x1BD) av_log(s->avctx, AV_LOG_DEBUG, "Mesh Object Plane start");

            else if(startcode==0x1BE) av_log(s->avctx, AV_LOG_DEBUG, "Still Texture Object start");

            else if(startcode==0x1BF) av_log(s->avctx, AV_LOG_DEBUG, "Texture Spatial Layer start");

            else if(startcode==0x1C0) av_log(s->avctx, AV_LOG_DEBUG, "Texture SNR Layer start");

            else if(startcode==0x1C1) av_log(s->avctx, AV_LOG_DEBUG, "Texture Tile start");

            else if(startcode==0x1C2) av_log(s->avctx, AV_LOG_DEBUG, "Texture Shape Layer start");

            else if(startcode==0x1C3) av_log(s->avctx, AV_LOG_DEBUG, "stuffing start");

            else if(startcode<=0x1C5) av_log(s->avctx, AV_LOG_DEBUG, "reserved");

            else if(startcode<=0x1FF) av_log(s->avctx, AV_LOG_DEBUG, "System start");

            av_log(s->avctx, AV_LOG_DEBUG, " at %d\n", get_bits_count(gb));

        }



        if(startcode >= 0x120 && startcode <= 0x12F){

            if(decode_vol_header(s, gb) < 0) 

                return -1;

        }

        else if(startcode == USER_DATA_STARTCODE){

            decode_user_data(s, gb);

        }

        else if(startcode == GOP_STARTCODE){

            mpeg4_decode_gop_header(s, gb);

        }

        else if(startcode == VOP_STARTCODE){

            return decode_vop_header(s, gb);

        }



        align_get_bits(gb);

        startcode = 0xff;

    }

}

int ff_mpeg4_decode_picture_header(MpegEncContext * s, GetBitContext *gb)

{

    int startcode, v;



    

    align_get_bits(gb);



    if(s->avctx->codec_tag == ff_get_fourcc("WV1F") && show_bits(gb, 24) == 0x575630){

        skip_bits(gb, 24);

        if(get_bits(gb, 8) == 0xF0)

            return decode_vop_header(s, gb);

    }



    startcode = 0xff;

    for(;;) {

        v = get_bits(gb, 8);

        startcode = ((startcode << 8) | v) & 0xffffffff;

        

        if(get_bits_count(gb) >= gb->size_in_bits){

            if(gb->size_in_bits==8 && (s->divx_version || s->xvid_build)){

                av_log(s->avctx, AV_LOG_ERROR, "frame skip %d\n", gb->size_in_bits);

                return FRAME_SKIPPED; 

            }else

                return -1; 

        }



        if((startcode&0xFFFFFF00) != 0x100)

            continue; 

        

        if(s->avctx->debug&FF_DEBUG_STARTCODE){

            av_log(s->avctx, AV_LOG_DEBUG, "startcode: %3X ", startcode);

            if     (startcode<=0x11F) av_log(s->avctx, AV_LOG_DEBUG, "Video Object Start");

            else if(startcode<=0x12F) av_log(s->avctx, AV_LOG_DEBUG, "Video Object Layer Start");

            else if(startcode<=0x13F) av_log(s->avctx, AV_LOG_DEBUG, "Reserved");

            else if(startcode<=0x15F) av_log(s->avctx, AV_LOG_DEBUG, "FGS bp start");

            else if(startcode<=0x1AF) av_log(s->avctx, AV_LOG_DEBUG, "Reserved");

            else if(startcode==0x1B0) av_log(s->avctx, AV_LOG_DEBUG, "Visual Object Seq Start");

            else if(startcode==0x1B1) av_log(s->avctx, AV_LOG_DEBUG, "Visual Object Seq End");

            else if(startcode==0x1B2) av_log(s->avctx, AV_LOG_DEBUG, "User Data");

            else if(startcode==0x1B3) av_log(s->avctx, AV_LOG_DEBUG, "Group of VOP start");

            else if(startcode==0x1B4) av_log(s->avctx, AV_LOG_DEBUG, "Video Session Error");

            else if(startcode==0x1B5) av_log(s->avctx, AV_LOG_DEBUG, "Visual Object Start");

            else if(startcode==0x1B6) av_log(s->avctx, AV_LOG_DEBUG, "Video Object Plane start");

            else if(startcode==0x1B7) av_log(s->avctx, AV_LOG_DEBUG, "slice start");

            else if(startcode==0x1B8) av_log(s->avctx, AV_LOG_DEBUG, "extension start");

            else if(startcode==0x1B9) av_log(s->avctx, AV_LOG_DEBUG, "fgs start");

            else if(startcode==0x1BA) av_log(s->avctx, AV_LOG_DEBUG, "FBA Object start");

            else if(startcode==0x1BB) av_log(s->avctx, AV_LOG_DEBUG, "FBA Object Plane start");

            else if(startcode==0x1BC) av_log(s->avctx, AV_LOG_DEBUG, "Mesh Object start");

            else if(startcode==0x1BD) av_log(s->avctx, AV_LOG_DEBUG, "Mesh Object Plane start");

            else if(startcode==0x1BE) av_log(s->avctx, AV_LOG_DEBUG, "Still Texture Object start");

            else if(startcode==0x1BF) av_log(s->avctx, AV_LOG_DEBUG, "Texture Spatial Layer start");

            else if(startcode==0x1C0) av_log(s->avctx, AV_LOG_DEBUG, "Texture SNR Layer start");

            else if(startcode==0x1C1) av_log(s->avctx, AV_LOG_DEBUG, "Texture Tile start");

            else if(startcode==0x1C2) av_log(s->avctx, AV_LOG_DEBUG, "Texture Shape Layer start");

            else if(startcode==0x1C3) av_log(s->avctx, AV_LOG_DEBUG, "stuffing start");

            else if(startcode<=0x1C5) av_log(s->avctx, AV_LOG_DEBUG, "reserved");

            else if(startcode<=0x1FF) av_log(s->avctx, AV_LOG_DEBUG, "System start");

            av_log(s->avctx, AV_LOG_DEBUG, " at %d\n", get_bits_count(gb));

        }



        if(startcode >= 0x120 && startcode <= 0x12F){

            if(decode_vol_header(s, gb) < 0) 

                return -1;

        }

        else if(startcode == USER_DATA_STARTCODE){

            decode_user_data(s, gb);

        }

        else if(startcode == GOP_STARTCODE){

            mpeg4_decode_gop_header(s, gb);

        }

        else if(startcode == VOP_STARTCODE){

            return decode_vop_header(s, gb);

        }



        align_get_bits(gb);

        startcode = 0xff;

    }

}

        v = get_bits(gb, 8);         startcode = ((startcode << 8) | v) & 0xffffffff;
int FUNC_0(MpegEncContext * VAR_0, GetBitContext *VAR_1)

{

    int VAR_2, VAR_3;



    

    align_get_bits(VAR_1);



    if(VAR_0->avctx->codec_tag == ff_get_fourcc("WV1F") && show_bits(VAR_1, 24) == 0x575630){

        skip_bits(VAR_1, 24);

        if(get_bits(VAR_1, 8) == 0xF0)

            return decode_vop_header(VAR_0, VAR_1);

    }



    VAR_2 = 0xff;

    for(;;) {

        VAR_3 = get_bits(VAR_1, 8);

        VAR_2 = ((VAR_2 << 8) | VAR_3) & 0xffffffff;

        

        if(get_bits_count(VAR_1) >= VAR_1->size_in_bits){

            if(VAR_1->size_in_bits==8 && (VAR_0->divx_version || VAR_0->xvid_build)){

                av_log(VAR_0->avctx, AV_LOG_ERROR, "frame skip %d\n", VAR_1->size_in_bits);

                return FRAME_SKIPPED; 

            }else

                return -1; 

        }



        if((VAR_2&0xFFFFFF00) != 0x100)

            continue; 

        

        if(VAR_0->avctx->debug&FF_DEBUG_STARTCODE){

            av_log(VAR_0->avctx, AV_LOG_DEBUG, "VAR_2: %3X ", VAR_2);

            if     (VAR_2<=0x11F) av_log(VAR_0->avctx, AV_LOG_DEBUG, "Video Object Start");

            else if(VAR_2<=0x12F) av_log(VAR_0->avctx, AV_LOG_DEBUG, "Video Object Layer Start");

            else if(VAR_2<=0x13F) av_log(VAR_0->avctx, AV_LOG_DEBUG, "Reserved");

            else if(VAR_2<=0x15F) av_log(VAR_0->avctx, AV_LOG_DEBUG, "FGS bp start");

            else if(VAR_2<=0x1AF) av_log(VAR_0->avctx, AV_LOG_DEBUG, "Reserved");

            else if(VAR_2==0x1B0) av_log(VAR_0->avctx, AV_LOG_DEBUG, "Visual Object Seq Start");

            else if(VAR_2==0x1B1) av_log(VAR_0->avctx, AV_LOG_DEBUG, "Visual Object Seq End");

            else if(VAR_2==0x1B2) av_log(VAR_0->avctx, AV_LOG_DEBUG, "User Data");

            else if(VAR_2==0x1B3) av_log(VAR_0->avctx, AV_LOG_DEBUG, "Group of VOP start");

            else if(VAR_2==0x1B4) av_log(VAR_0->avctx, AV_LOG_DEBUG, "Video Session Error");

            else if(VAR_2==0x1B5) av_log(VAR_0->avctx, AV_LOG_DEBUG, "Visual Object Start");

            else if(VAR_2==0x1B6) av_log(VAR_0->avctx, AV_LOG_DEBUG, "Video Object Plane start");

            else if(VAR_2==0x1B7) av_log(VAR_0->avctx, AV_LOG_DEBUG, "slice start");

            else if(VAR_2==0x1B8) av_log(VAR_0->avctx, AV_LOG_DEBUG, "extension start");

            else if(VAR_2==0x1B9) av_log(VAR_0->avctx, AV_LOG_DEBUG, "fgs start");

            else if(VAR_2==0x1BA) av_log(VAR_0->avctx, AV_LOG_DEBUG, "FBA Object start");

            else if(VAR_2==0x1BB) av_log(VAR_0->avctx, AV_LOG_DEBUG, "FBA Object Plane start");

            else if(VAR_2==0x1BC) av_log(VAR_0->avctx, AV_LOG_DEBUG, "Mesh Object start");

            else if(VAR_2==0x1BD) av_log(VAR_0->avctx, AV_LOG_DEBUG, "Mesh Object Plane start");

            else if(VAR_2==0x1BE) av_log(VAR_0->avctx, AV_LOG_DEBUG, "Still Texture Object start");

            else if(VAR_2==0x1BF) av_log(VAR_0->avctx, AV_LOG_DEBUG, "Texture Spatial Layer start");

            else if(VAR_2==0x1C0) av_log(VAR_0->avctx, AV_LOG_DEBUG, "Texture SNR Layer start");

            else if(VAR_2==0x1C1) av_log(VAR_0->avctx, AV_LOG_DEBUG, "Texture Tile start");

            else if(VAR_2==0x1C2) av_log(VAR_0->avctx, AV_LOG_DEBUG, "Texture Shape Layer start");

            else if(VAR_2==0x1C3) av_log(VAR_0->avctx, AV_LOG_DEBUG, "stuffing start");

            else if(VAR_2<=0x1C5) av_log(VAR_0->avctx, AV_LOG_DEBUG, "reserved");

            else if(VAR_2<=0x1FF) av_log(VAR_0->avctx, AV_LOG_DEBUG, "System start");

            av_log(VAR_0->avctx, AV_LOG_DEBUG, " at %d\n", get_bits_count(VAR_1));

        }



        if(VAR_2 >= 0x120 && VAR_2 <= 0x12F){

            if(decode_vol_header(VAR_0, VAR_1) < 0) 

                return -1;

        }

        else if(VAR_2 == USER_DATA_STARTCODE){

            decode_user_data(VAR_0, VAR_1);

        }

        else if(VAR_2 == GOP_STARTCODE){

            mpeg4_decode_gop_header(VAR_0, VAR_1);

        }

        else if(VAR_2 == VOP_STARTCODE){

            return decode_vop_header(VAR_0, VAR_1);

        }



        align_get_bits(VAR_1);

        VAR_2 = 0xff;

    }

}

int FUNC_0(MpegEncContext * VAR_0, GetBitContext *VAR_1)
{ int VAR_2, VAR_3; align_get_bits(VAR_1); if(VAR_0->avctx->codec_tag == ff_get_fourcc("WV1F") && show_bits(VAR_1, 24) == 0x575630){ skip_bits(VAR_1, 24); if(get_bits(VAR_1, 8) == 0xF0)
return decode_vop_header(VAR_0, VAR_1); } VAR_2 = 0xff; for(;;) { VAR_3 = get_bits(VAR_1, 8); VAR_2 = ((VAR_2 << 8) | VAR_3) & 0xffffffff; if(get_bits_count(VAR_1) >= VAR_1->size_in_bits){ if(VAR_1->size_in_bits==8 && (VAR_0->divx_version || VAR_0->xvid_build)){ av_log(VAR_0->avctx, AV_LOG_ERROR, "frame skip %d\n", VAR_1->size_in_bits); return FRAME_SKIPPED; }else return -1; } if((VAR_2&0xFFFFFF00) != 0x100)
continue; if(VAR_0->avctx->debug&FF_DEBUG_STARTCODE){ av_log(VAR_0->avctx, AV_LOG_DEBUG, "VAR_2: %3X ", VAR_2); if     (VAR_2<=0x11F) av_log(VAR_0->avctx, AV_LOG_DEBUG, "Video Object Start"); else if(VAR_2<=0x12F) av_log(VAR_0->avctx, AV_LOG_DEBUG, "Video Object Layer Start"); else if(VAR_2<=0x13F) av_log(VAR_0->avctx, AV_LOG_DEBUG, "Reserved"); else if(VAR_2<=0x15F) av_log(VAR_0->avctx, AV_LOG_DEBUG, "FGS bp start"); else if(VAR_2<=0x1AF) av_log(VAR_0->avctx, AV_LOG_DEBUG, "Reserved"); else if(VAR_2==0x1B0) av_log(VAR_0->avctx, AV_LOG_DEBUG, "Visual Object Seq Start"); else if(VAR_2==0x1B1) av_log(VAR_0->avctx, AV_LOG_DEBUG, "Visual Object Seq End"); else if(VAR_2==0x1B2) av_log(VAR_0->avctx, AV_LOG_DEBUG, "User Data"); else if(VAR_2==0x1B3) av_log(VAR_0->avctx, AV_LOG_DEBUG, "Group of VOP start"); else if(VAR_2==0x1B4) av_log(VAR_0->avctx, AV_LOG_DEBUG, "Video Session Error"); else if(VAR_2==0x1B5) av_log(VAR_0->avctx, AV_LOG_DEBUG, "Visual Object Start"); else if(VAR_2==0x1B6) av_log(VAR_0->avctx, AV_LOG_DEBUG, "Video Object Plane start"); else if(VAR_2==0x1B7) av_log(VAR_0->avctx, AV_LOG_DEBUG, "slice start"); else if(VAR_2==0x1B8) av_log(VAR_0->avctx, AV_LOG_DEBUG, "extension start"); else if(VAR_2==0x1B9) av_log(VAR_0->avctx, AV_LOG_DEBUG, "fgs start"); else if(VAR_2==0x1BA) av_log(VAR_0->avctx, AV_LOG_DEBUG, "FBA Object start"); else if(VAR_2==0x1BB) av_log(VAR_0->avctx, AV_LOG_DEBUG, "FBA Object Plane start"); else if(VAR_2==0x1BC) av_log(VAR_0->avctx, AV_LOG_DEBUG, "Mesh Object start"); else if(VAR_2==0x1BD) av_log(VAR_0->avctx, AV_LOG_DEBUG, "Mesh Object Plane start"); else if(VAR_2==0x1BE) av_log(VAR_0->avctx, AV_LOG_DEBUG, "Still Texture Object start"); else if(VAR_2==0x1BF) av_log(VAR_0->avctx, AV_LOG_DEBUG, "Texture Spatial Layer start"); else if(VAR_2==0x1C0) av_log(VAR_0->avctx, AV_LOG_DEBUG, "Texture SNR Layer start"); else if(VAR_2==0x1C1) av_log(VAR_0->avctx, AV_LOG_DEBUG, "Texture Tile start"); else if(VAR_2==0x1C2) av_log(VAR_0->avctx, AV_LOG_DEBUG, "Texture Shape Layer start"); else if(VAR_2==0x1C3) av_log(VAR_0->avctx, AV_LOG_DEBUG, "stuffing start"); else if(VAR_2<=0x1C5) av_log(VAR_0->avctx, AV_LOG_DEBUG, "reserved"); else if(VAR_2<=0x1FF) av_log(VAR_0->avctx, AV_LOG_DEBUG, "System start"); av_log(VAR_0->avctx, AV_LOG_DEBUG, " at %d\n", get_bits_count(VAR_1)); } if(VAR_2 >= 0x120 && VAR_2 <= 0x12F){ if(decode_vol_header(VAR_0, VAR_1) < 0)
return -1; } else if(VAR_2 == USER_DATA_STARTCODE){ decode_user_data(VAR_0, VAR_1); } else if(VAR_2 == GOP_STARTCODE){ mpeg4_decode_gop_header(VAR_0, VAR_1); } else if(VAR_2 == VOP_STARTCODE){ return decode_vop_header(VAR_0, VAR_1); } align_get_bits(VAR_1); VAR_2 = 0xff; } }