static inline int parse_nal_units(AVCodecParserContext *s,

                                  AVCodecContext *avctx,

                                  const uint8_t *buf, int buf_size)

{

    H264Context *h = s->priv_data;

    const uint8_t *buf_end = buf + buf_size;

    unsigned int pps_id;

    unsigned int slice_type;

    int state;

    const uint8_t *ptr;



    /* set some sane default values */

    s->pict_type = FF_I_TYPE;

    s->key_frame = 0;



    h->s.avctx= avctx;

    h->sei_recovery_frame_cnt = -1;

    h->sei_dpb_output_delay         =  0;

    h->sei_cpb_removal_delay        = -1;

    h->sei_buffering_period_present =  0;



    for(;;) {

        int src_length, dst_length, consumed;

        buf = ff_find_start_code(buf, buf_end, &state);

        if(buf >= buf_end)

            break;

        --buf;

        src_length = buf_end - buf;

        switch (state & 0x1f) {

        case NAL_SLICE:

        case NAL_IDR_SLICE:

            // Do not walk the whole buffer just to decode slice header

            if (src_length > 20)

                src_length = 20;

            break;

        }

        ptr= ff_h264_decode_nal(h, buf, &dst_length, &consumed, src_length);

        if (ptr==NULL || dst_length < 0)

            break;



        init_get_bits(&h->s.gb, ptr, 8*dst_length);

        switch(h->nal_unit_type) {

        case NAL_SPS:

            ff_h264_decode_seq_parameter_set(h);

            break;

        case NAL_PPS:

            ff_h264_decode_picture_parameter_set(h, h->s.gb.size_in_bits);

            break;

        case NAL_SEI:

            ff_h264_decode_sei(h);

            break;

        case NAL_IDR_SLICE:

            s->key_frame = 1;

            /* fall through */

        case NAL_SLICE:

            get_ue_golomb(&h->s.gb);  // skip first_mb_in_slice

            slice_type = get_ue_golomb_31(&h->s.gb);

            s->pict_type = golomb_to_pict_type[slice_type % 5];

            if (h->sei_recovery_frame_cnt >= 0) {

                /* key frame, since recovery_frame_cnt is set */

                s->key_frame = 1;

            }

            pps_id= get_ue_golomb(&h->s.gb);

            if(pps_id>=MAX_PPS_COUNT) {

                av_log(h->s.avctx, AV_LOG_ERROR, "pps_id out of range\n");

                return -1;

            }

            if(!h->pps_buffers[pps_id]) {

                av_log(h->s.avctx, AV_LOG_ERROR, "non-existing PPS referenced\n");

                return -1;

            }

            h->pps= *h->pps_buffers[pps_id];

            if(!h->sps_buffers[h->pps.sps_id]) {

                av_log(h->s.avctx, AV_LOG_ERROR, "non-existing SPS referenced\n");

                return -1;

            }

            h->sps = *h->sps_buffers[h->pps.sps_id];

            h->frame_num = get_bits(&h->s.gb, h->sps.log2_max_frame_num);



            if(h->sps.frame_mbs_only_flag){

                h->s.picture_structure= PICT_FRAME;

            }else{

                if(get_bits1(&h->s.gb)) { //field_pic_flag

                    h->s.picture_structure= PICT_TOP_FIELD + get_bits1(&h->s.gb); //bottom_field_flag

                } else {

                    h->s.picture_structure= PICT_FRAME;

                }

            }



            if(h->sps.pic_struct_present_flag) {

                switch (h->sei_pic_struct) {

                    case SEI_PIC_STRUCT_TOP_FIELD:

                    case SEI_PIC_STRUCT_BOTTOM_FIELD:

                        s->repeat_pict = 0;

                        break;

                    case SEI_PIC_STRUCT_FRAME:

                    case SEI_PIC_STRUCT_TOP_BOTTOM:

                    case SEI_PIC_STRUCT_BOTTOM_TOP:

                        s->repeat_pict = 1;

                        break;

                    case SEI_PIC_STRUCT_TOP_BOTTOM_TOP:

                    case SEI_PIC_STRUCT_BOTTOM_TOP_BOTTOM:

                        s->repeat_pict = 2;

                        break;

                    case SEI_PIC_STRUCT_FRAME_DOUBLING:

                        s->repeat_pict = 3;

                        break;

                    case SEI_PIC_STRUCT_FRAME_TRIPLING:

                        s->repeat_pict = 5;

                        break;

                    default:

                        s->repeat_pict = h->s.picture_structure == PICT_FRAME ? 1 : 0;

                        break;

                }

            } else {

                s->repeat_pict = h->s.picture_structure == PICT_FRAME ? 1 : 0;

            }



            return 0; /* no need to evaluate the rest */

        }

        buf += consumed;

    }

    /* didn't find a picture! */

    av_log(h->s.avctx, AV_LOG_ERROR, "missing picture in access unit\n");

    return -1;

}

static inline int parse_nal_units(AVCodecParserContext *s,

                                  AVCodecContext *avctx,

                                  const uint8_t *buf, int buf_size)

{

    H264Context *h = s->priv_data;

    const uint8_t *buf_end = buf + buf_size;

    unsigned int pps_id;

    unsigned int slice_type;

    int state;

    const uint8_t *ptr;



    

    s->pict_type = FF_I_TYPE;

    s->key_frame = 0;



    h->s.avctx= avctx;

    h->sei_recovery_frame_cnt = -1;

    h->sei_dpb_output_delay         =  0;

    h->sei_cpb_removal_delay        = -1;

    h->sei_buffering_period_present =  0;



    for(;;) {

        int src_length, dst_length, consumed;

        buf = ff_find_start_code(buf, buf_end, &state);

        if(buf >= buf_end)

            break;

        --buf;

        src_length = buf_end - buf;

        switch (state & 0x1f) {

        case NAL_SLICE:

        case NAL_IDR_SLICE:

            

            if (src_length > 20)

                src_length = 20;

            break;

        }

        ptr= ff_h264_decode_nal(h, buf, &dst_length, &consumed, src_length);

        if (ptr==NULL || dst_length < 0)

            break;



        init_get_bits(&h->s.gb, ptr, 8*dst_length);

        switch(h->nal_unit_type) {

        case NAL_SPS:

            ff_h264_decode_seq_parameter_set(h);

            break;

        case NAL_PPS:

            ff_h264_decode_picture_parameter_set(h, h->s.gb.size_in_bits);

            break;

        case NAL_SEI:

            ff_h264_decode_sei(h);

            break;

        case NAL_IDR_SLICE:

            s->key_frame = 1;

            

        case NAL_SLICE:

            get_ue_golomb(&h->s.gb);  

            slice_type = get_ue_golomb_31(&h->s.gb);

            s->pict_type = golomb_to_pict_type[slice_type % 5];

            if (h->sei_recovery_frame_cnt >= 0) {

                

                s->key_frame = 1;

            }

            pps_id= get_ue_golomb(&h->s.gb);

            if(pps_id>=MAX_PPS_COUNT) {

                av_log(h->s.avctx, AV_LOG_ERROR, "pps_id out of range\n");

                return -1;

            }

            if(!h->pps_buffers[pps_id]) {

                av_log(h->s.avctx, AV_LOG_ERROR, "non-existing PPS referenced\n");

                return -1;

            }

            h->pps= *h->pps_buffers[pps_id];

            if(!h->sps_buffers[h->pps.sps_id]) {

                av_log(h->s.avctx, AV_LOG_ERROR, "non-existing SPS referenced\n");

                return -1;

            }

            h->sps = *h->sps_buffers[h->pps.sps_id];

            h->frame_num = get_bits(&h->s.gb, h->sps.log2_max_frame_num);



            if(h->sps.frame_mbs_only_flag){

                h->s.picture_structure= PICT_FRAME;

            }else{

                if(get_bits1(&h->s.gb)) { 

                    h->s.picture_structure= PICT_TOP_FIELD + get_bits1(&h->s.gb); 

                } else {

                    h->s.picture_structure= PICT_FRAME;

                }

            }



            if(h->sps.pic_struct_present_flag) {

                switch (h->sei_pic_struct) {

                    case SEI_PIC_STRUCT_TOP_FIELD:

                    case SEI_PIC_STRUCT_BOTTOM_FIELD:

                        s->repeat_pict = 0;

                        break;

                    case SEI_PIC_STRUCT_FRAME:

                    case SEI_PIC_STRUCT_TOP_BOTTOM:

                    case SEI_PIC_STRUCT_BOTTOM_TOP:

                        s->repeat_pict = 1;

                        break;

                    case SEI_PIC_STRUCT_TOP_BOTTOM_TOP:

                    case SEI_PIC_STRUCT_BOTTOM_TOP_BOTTOM:

                        s->repeat_pict = 2;

                        break;

                    case SEI_PIC_STRUCT_FRAME_DOUBLING:

                        s->repeat_pict = 3;

                        break;

                    case SEI_PIC_STRUCT_FRAME_TRIPLING:

                        s->repeat_pict = 5;

                        break;

                    default:

                        s->repeat_pict = h->s.picture_structure == PICT_FRAME ? 1 : 0;

                        break;

                }

            } else {

                s->repeat_pict = h->s.picture_structure == PICT_FRAME ? 1 : 0;

            }



            return 0; 

        }

        buf += consumed;

    }

    

    av_log(h->s.avctx, AV_LOG_ERROR, "missing picture in access unit\n");

    return -1;

}

    int state;
static inline int FUNC_0(AVCodecParserContext *VAR_0,

                                  AVCodecContext *VAR_1,

                                  const uint8_t *VAR_2, int VAR_3)

{

    H264Context *h = VAR_0->priv_data;

    const uint8_t *VAR_4 = VAR_2 + VAR_3;

    unsigned int VAR_5;

    unsigned int VAR_6;

    int VAR_7;

    const uint8_t *VAR_8;



    

    VAR_0->pict_type = FF_I_TYPE;

    VAR_0->key_frame = 0;



    h->VAR_0.VAR_1= VAR_1;

    h->sei_recovery_frame_cnt = -1;

    h->sei_dpb_output_delay         =  0;

    h->sei_cpb_removal_delay        = -1;

    h->sei_buffering_period_present =  0;



    for(;;) {

        int VAR_9, VAR_10, VAR_11;

        VAR_2 = ff_find_start_code(VAR_2, VAR_4, &VAR_7);

        if(VAR_2 >= VAR_4)

            break;

        --VAR_2;

        VAR_9 = VAR_4 - VAR_2;

        switch (VAR_7 & 0x1f) {

        case NAL_SLICE:

        case NAL_IDR_SLICE:

            

            if (VAR_9 > 20)

                VAR_9 = 20;

            break;

        }

        VAR_8= ff_h264_decode_nal(h, VAR_2, &VAR_10, &VAR_11, VAR_9);

        if (VAR_8==NULL || VAR_10 < 0)

            break;



        init_get_bits(&h->VAR_0.gb, VAR_8, 8*VAR_10);

        switch(h->nal_unit_type) {

        case NAL_SPS:

            ff_h264_decode_seq_parameter_set(h);

            break;

        case NAL_PPS:

            ff_h264_decode_picture_parameter_set(h, h->VAR_0.gb.size_in_bits);

            break;

        case NAL_SEI:

            ff_h264_decode_sei(h);

            break;

        case NAL_IDR_SLICE:

            VAR_0->key_frame = 1;

            

        case NAL_SLICE:

            get_ue_golomb(&h->VAR_0.gb);  

            VAR_6 = get_ue_golomb_31(&h->VAR_0.gb);

            VAR_0->pict_type = golomb_to_pict_type[VAR_6 % 5];

            if (h->sei_recovery_frame_cnt >= 0) {

                

                VAR_0->key_frame = 1;

            }

            VAR_5= get_ue_golomb(&h->VAR_0.gb);

            if(VAR_5>=MAX_PPS_COUNT) {

                av_log(h->VAR_0.VAR_1, AV_LOG_ERROR, "VAR_5 out of range\n");

                return -1;

            }

            if(!h->pps_buffers[VAR_5]) {

                av_log(h->VAR_0.VAR_1, AV_LOG_ERROR, "non-existing PPS referenced\n");

                return -1;

            }

            h->pps= *h->pps_buffers[VAR_5];

            if(!h->sps_buffers[h->pps.sps_id]) {

                av_log(h->VAR_0.VAR_1, AV_LOG_ERROR, "non-existing SPS referenced\n");

                return -1;

            }

            h->sps = *h->sps_buffers[h->pps.sps_id];

            h->frame_num = get_bits(&h->VAR_0.gb, h->sps.log2_max_frame_num);



            if(h->sps.frame_mbs_only_flag){

                h->VAR_0.picture_structure= PICT_FRAME;

            }else{

                if(get_bits1(&h->VAR_0.gb)) { 

                    h->VAR_0.picture_structure= PICT_TOP_FIELD + get_bits1(&h->VAR_0.gb); 

                } else {

                    h->VAR_0.picture_structure= PICT_FRAME;

                }

            }



            if(h->sps.pic_struct_present_flag) {

                switch (h->sei_pic_struct) {

                    case SEI_PIC_STRUCT_TOP_FIELD:

                    case SEI_PIC_STRUCT_BOTTOM_FIELD:

                        VAR_0->repeat_pict = 0;

                        break;

                    case SEI_PIC_STRUCT_FRAME:

                    case SEI_PIC_STRUCT_TOP_BOTTOM:

                    case SEI_PIC_STRUCT_BOTTOM_TOP:

                        VAR_0->repeat_pict = 1;

                        break;

                    case SEI_PIC_STRUCT_TOP_BOTTOM_TOP:

                    case SEI_PIC_STRUCT_BOTTOM_TOP_BOTTOM:

                        VAR_0->repeat_pict = 2;

                        break;

                    case SEI_PIC_STRUCT_FRAME_DOUBLING:

                        VAR_0->repeat_pict = 3;

                        break;

                    case SEI_PIC_STRUCT_FRAME_TRIPLING:

                        VAR_0->repeat_pict = 5;

                        break;

                    default:

                        VAR_0->repeat_pict = h->VAR_0.picture_structure == PICT_FRAME ? 1 : 0;

                        break;

                }

            } else {

                VAR_0->repeat_pict = h->VAR_0.picture_structure == PICT_FRAME ? 1 : 0;

            }



            return 0; 

        }

        VAR_2 += VAR_11;

    }

    

    av_log(h->VAR_0.VAR_1, AV_LOG_ERROR, "missing picture in access unit\n");

    return -1;

}

static inline int FUNC_0(AVCodecParserContext *VAR_0,
AVCodecContext *VAR_1,
const uint8_t *VAR_2, int VAR_3)
{ H264Context *h = VAR_0->priv_data; const uint8_t *VAR_4 = VAR_2 + VAR_3; unsigned int VAR_5; unsigned int VAR_6; int VAR_7; const uint8_t *VAR_8; VAR_0->pict_type = FF_I_TYPE; VAR_0->key_frame = 0; h->VAR_0.VAR_1= VAR_1; h->sei_recovery_frame_cnt = -1; h->sei_dpb_output_delay         =  0; h->sei_cpb_removal_delay        = -1; h->sei_buffering_period_present =  0; for(;;) { int VAR_9, VAR_10, VAR_11; VAR_2 = ff_find_start_code(VAR_2, VAR_4, &VAR_7); if(VAR_2 >= VAR_4)
break; --VAR_2; VAR_9 = VAR_4 - VAR_2; switch (VAR_7 & 0x1f) { case NAL_SLICE:
case NAL_IDR_SLICE:
if (VAR_9 > 20)
VAR_9 = 20; break; } VAR_8= ff_h264_decode_nal(h, VAR_2, &VAR_10, &VAR_11, VAR_9); if (VAR_8==NULL || VAR_10 < 0)
break; init_get_bits(&h->VAR_0.gb, VAR_8, 8*VAR_10); switch(h->nal_unit_type) { case NAL_SPS:
ff_h264_decode_seq_parameter_set(h); break; case NAL_PPS:
ff_h264_decode_picture_parameter_set(h, h->VAR_0.gb.size_in_bits); break; case NAL_SEI:
ff_h264_decode_sei(h); break; case NAL_IDR_SLICE:
VAR_0->key_frame = 1; case NAL_SLICE:
get_ue_golomb(&h->VAR_0.gb); VAR_6 = get_ue_golomb_31(&h->VAR_0.gb); VAR_0->pict_type = golomb_to_pict_type[VAR_6 % 5]; if (h->sei_recovery_frame_cnt >= 0) { VAR_0->key_frame = 1; } VAR_5= get_ue_golomb(&h->VAR_0.gb); if(VAR_5>=MAX_PPS_COUNT) { av_log(h->VAR_0.VAR_1, AV_LOG_ERROR, "VAR_5 out of range\n"); return -1; } if(!h->pps_buffers[VAR_5]) { av_log(h->VAR_0.VAR_1, AV_LOG_ERROR, "non-existing PPS referenced\n"); return -1; } h->pps= *h->pps_buffers[VAR_5]; if(!h->sps_buffers[h->pps.sps_id]) { av_log(h->VAR_0.VAR_1, AV_LOG_ERROR, "non-existing SPS referenced\n"); return -1; } h->sps = *h->sps_buffers[h->pps.sps_id]; h->frame_num = get_bits(&h->VAR_0.gb, h->sps.log2_max_frame_num); if(h->sps.frame_mbs_only_flag){ h->VAR_0.picture_structure= PICT_FRAME; }else{ if(get_bits1(&h->VAR_0.gb)) { h->VAR_0.picture_structure= PICT_TOP_FIELD + get_bits1(&h->VAR_0.gb); } else { h->VAR_0.picture_structure= PICT_FRAME; } } if(h->sps.pic_struct_present_flag) { switch (h->sei_pic_struct) { case SEI_PIC_STRUCT_TOP_FIELD:
case SEI_PIC_STRUCT_BOTTOM_FIELD:
VAR_0->repeat_pict = 0; break; case SEI_PIC_STRUCT_FRAME:
case SEI_PIC_STRUCT_TOP_BOTTOM:
case SEI_PIC_STRUCT_BOTTOM_TOP:
VAR_0->repeat_pict = 1; break; case SEI_PIC_STRUCT_TOP_BOTTOM_TOP:
case SEI_PIC_STRUCT_BOTTOM_TOP_BOTTOM:
VAR_0->repeat_pict = 2; break; case SEI_PIC_STRUCT_FRAME_DOUBLING:
VAR_0->repeat_pict = 3; break; case SEI_PIC_STRUCT_FRAME_TRIPLING:
VAR_0->repeat_pict = 5; break; default:
VAR_0->repeat_pict = h->VAR_0.picture_structure == PICT_FRAME ? 1 : 0; break; } } else { VAR_0->repeat_pict = h->VAR_0.picture_structure == PICT_FRAME ? 1 : 0; } return 0; } VAR_2 += VAR_11; } av_log(h->VAR_0.VAR_1, AV_LOG_ERROR, "missing picture in access unit\n"); return -1; }