int ff_h264_decode_seq_parameter_set(H264Context *h){

    MpegEncContext * const s = &h->s;

    int profile_idc, level_idc, constraint_set_flags = 0;

    unsigned int sps_id;

    int i, log2_max_frame_num_minus4;

    SPS *sps;



    profile_idc= get_bits(&s->gb, 8);

    constraint_set_flags |= get_bits1(&s->gb) << 0;   //constraint_set0_flag

    constraint_set_flags |= get_bits1(&s->gb) << 1;   //constraint_set1_flag

    constraint_set_flags |= get_bits1(&s->gb) << 2;   //constraint_set2_flag

    constraint_set_flags |= get_bits1(&s->gb) << 3;   //constraint_set3_flag

    get_bits(&s->gb, 4); // reserved

    level_idc= get_bits(&s->gb, 8);

    sps_id= get_ue_golomb_31(&s->gb);



    if(sps_id >= MAX_SPS_COUNT) {

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

        return -1;

    }

    sps= av_mallocz(sizeof(SPS));

    if(sps == NULL)

        return -1;



    sps->time_offset_length = 24;

    sps->profile_idc= profile_idc;

    sps->constraint_set_flags = constraint_set_flags;

    sps->level_idc= level_idc;



    memset(sps->scaling_matrix4, 16, sizeof(sps->scaling_matrix4));

    memset(sps->scaling_matrix8, 16, sizeof(sps->scaling_matrix8));

    sps->scaling_matrix_present = 0;



    if(sps->profile_idc >= 100){ //high profile

        sps->chroma_format_idc= get_ue_golomb_31(&s->gb);

        if(sps->chroma_format_idc > 3) {

            av_log(h->s.avctx, AV_LOG_ERROR, "chroma_format_idc (%u) out of range\n", sps->chroma_format_idc);

            goto fail;

        } else if(sps->chroma_format_idc == 3) {

            sps->residual_color_transform_flag = get_bits1(&s->gb);

        }

        sps->bit_depth_luma   = get_ue_golomb(&s->gb) + 8;

        sps->bit_depth_chroma = get_ue_golomb(&s->gb) + 8;

        sps->transform_bypass = get_bits1(&s->gb);

        decode_scaling_matrices(h, sps, NULL, 1, sps->scaling_matrix4, sps->scaling_matrix8);

    }else{

        sps->chroma_format_idc= 1;

        sps->bit_depth_luma   = 8;

        sps->bit_depth_chroma = 8;

    }



    log2_max_frame_num_minus4 = get_ue_golomb(&s->gb);

    if (log2_max_frame_num_minus4 < MIN_LOG2_MAX_FRAME_NUM - 4 ||

        log2_max_frame_num_minus4 > MAX_LOG2_MAX_FRAME_NUM - 4) {

        av_log(h->s.avctx, AV_LOG_ERROR,

               "log2_max_frame_num_minus4 out of range (0-12): %d\n",

               log2_max_frame_num_minus4);

        return AVERROR_INVALIDDATA;

    }

    sps->log2_max_frame_num = log2_max_frame_num_minus4 + 4;



    sps->poc_type= get_ue_golomb_31(&s->gb);



    if(sps->poc_type == 0){ //FIXME #define

        sps->log2_max_poc_lsb= get_ue_golomb(&s->gb) + 4;

    } else if(sps->poc_type == 1){//FIXME #define

        sps->delta_pic_order_always_zero_flag= get_bits1(&s->gb);

        sps->offset_for_non_ref_pic= get_se_golomb(&s->gb);

        sps->offset_for_top_to_bottom_field= get_se_golomb(&s->gb);

        sps->poc_cycle_length                = get_ue_golomb(&s->gb);



        if((unsigned)sps->poc_cycle_length >= FF_ARRAY_ELEMS(sps->offset_for_ref_frame)){

            av_log(h->s.avctx, AV_LOG_ERROR, "poc_cycle_length overflow %u\n", sps->poc_cycle_length);

            goto fail;

        }



        for(i=0; i<sps->poc_cycle_length; i++)

            sps->offset_for_ref_frame[i]= get_se_golomb(&s->gb);

    }else if(sps->poc_type != 2){

        av_log(h->s.avctx, AV_LOG_ERROR, "illegal POC type %d\n", sps->poc_type);

        goto fail;

    }



    sps->ref_frame_count= get_ue_golomb_31(&s->gb);

    if(sps->ref_frame_count > MAX_PICTURE_COUNT-2 || sps->ref_frame_count >= 32U){

        av_log(h->s.avctx, AV_LOG_ERROR, "too many reference frames\n");

        goto fail;

    }

    sps->gaps_in_frame_num_allowed_flag= get_bits1(&s->gb);

    sps->mb_width = get_ue_golomb(&s->gb) + 1;

    sps->mb_height= get_ue_golomb(&s->gb) + 1;

    if((unsigned)sps->mb_width >= INT_MAX/16 || (unsigned)sps->mb_height >= INT_MAX/16 ||

       av_image_check_size(16*sps->mb_width, 16*sps->mb_height, 0, h->s.avctx)){

        av_log(h->s.avctx, AV_LOG_ERROR, "mb_width/height overflow\n");

        goto fail;

    }



    sps->frame_mbs_only_flag= get_bits1(&s->gb);

    if(!sps->frame_mbs_only_flag)

        sps->mb_aff= get_bits1(&s->gb);

    else

        sps->mb_aff= 0;



    sps->direct_8x8_inference_flag= get_bits1(&s->gb);

    if(!sps->frame_mbs_only_flag && !sps->direct_8x8_inference_flag){

        av_log(h->s.avctx, AV_LOG_ERROR, "This stream was generated by a broken encoder, invalid 8x8 inference\n");

        goto fail;

    }



#ifndef ALLOW_INTERLACE

    if(sps->mb_aff)

        av_log(h->s.avctx, AV_LOG_ERROR, "MBAFF support not included; enable it at compile-time.\n");

#endif

    sps->crop= get_bits1(&s->gb);

    if(sps->crop){

        int crop_vertical_limit   = sps->chroma_format_idc  & 2 ? 16 : 8;

        int crop_horizontal_limit = sps->chroma_format_idc == 3 ? 16 : 8;

        sps->crop_left  = get_ue_golomb(&s->gb);

        sps->crop_right = get_ue_golomb(&s->gb);

        sps->crop_top   = get_ue_golomb(&s->gb);

        sps->crop_bottom= get_ue_golomb(&s->gb);

        if(sps->crop_left || sps->crop_top){

            av_log(h->s.avctx, AV_LOG_ERROR, "insane cropping not completely supported, this could look slightly wrong ...\n");

        }

        if(sps->crop_right >= crop_horizontal_limit || sps->crop_bottom >= crop_vertical_limit){

            av_log(h->s.avctx, AV_LOG_ERROR, "brainfart cropping not supported, this could look slightly wrong ...\n");

        }

    }else{

        sps->crop_left  =

        sps->crop_right =

        sps->crop_top   =

        sps->crop_bottom= 0;

    }



    sps->vui_parameters_present_flag= get_bits1(&s->gb);

    if( sps->vui_parameters_present_flag )

        if (decode_vui_parameters(h, sps) < 0)

            goto fail;



    if(!sps->sar.den)

        sps->sar.den= 1;



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

        static const char csp[4][5] = { "Gray", "420", "422", "444" };

        av_log(h->s.avctx, AV_LOG_DEBUG, "sps:%u profile:%d/%d poc:%d ref:%d %dx%d %s %s crop:%d/%d/%d/%d %s %s %d/%d\n",

               sps_id, sps->profile_idc, sps->level_idc,

               sps->poc_type,

               sps->ref_frame_count,

               sps->mb_width, sps->mb_height,

               sps->frame_mbs_only_flag ? "FRM" : (sps->mb_aff ? "MB-AFF" : "PIC-AFF"),

               sps->direct_8x8_inference_flag ? "8B8" : "",

               sps->crop_left, sps->crop_right,

               sps->crop_top, sps->crop_bottom,

               sps->vui_parameters_present_flag ? "VUI" : "",

               csp[sps->chroma_format_idc],

               sps->timing_info_present_flag ? sps->num_units_in_tick : 0,

               sps->timing_info_present_flag ? sps->time_scale : 0

               );

    }



    av_free(h->sps_buffers[sps_id]);

    h->sps_buffers[sps_id]= sps;

    h->sps = *sps;

    return 0;

fail:

    av_free(sps);

    return -1;

}

int ff_h264_decode_seq_parameter_set(H264Context *h){

    MpegEncContext * const s = &h->s;

    int profile_idc, level_idc, constraint_set_flags = 0;

    unsigned int sps_id;

    int i, log2_max_frame_num_minus4;

    SPS *sps;



    profile_idc= get_bits(&s->gb, 8);

    constraint_set_flags |= get_bits1(&s->gb) << 0;   

    constraint_set_flags |= get_bits1(&s->gb) << 1;   

    constraint_set_flags |= get_bits1(&s->gb) << 2;   

    constraint_set_flags |= get_bits1(&s->gb) << 3;   

    get_bits(&s->gb, 4); 

    level_idc= get_bits(&s->gb, 8);

    sps_id= get_ue_golomb_31(&s->gb);



    if(sps_id >= MAX_SPS_COUNT) {

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

        return -1;

    }

    sps= av_mallocz(sizeof(SPS));

    if(sps == NULL)

        return -1;



    sps->time_offset_length = 24;

    sps->profile_idc= profile_idc;

    sps->constraint_set_flags = constraint_set_flags;

    sps->level_idc= level_idc;



    memset(sps->scaling_matrix4, 16, sizeof(sps->scaling_matrix4));

    memset(sps->scaling_matrix8, 16, sizeof(sps->scaling_matrix8));

    sps->scaling_matrix_present = 0;



    if(sps->profile_idc >= 100){ 

        sps->chroma_format_idc= get_ue_golomb_31(&s->gb);

        if(sps->chroma_format_idc > 3) {

            av_log(h->s.avctx, AV_LOG_ERROR, "chroma_format_idc (%u) out of range\n", sps->chroma_format_idc);

            goto fail;

        } else if(sps->chroma_format_idc == 3) {

            sps->residual_color_transform_flag = get_bits1(&s->gb);

        }

        sps->bit_depth_luma   = get_ue_golomb(&s->gb) + 8;

        sps->bit_depth_chroma = get_ue_golomb(&s->gb) + 8;

        sps->transform_bypass = get_bits1(&s->gb);

        decode_scaling_matrices(h, sps, NULL, 1, sps->scaling_matrix4, sps->scaling_matrix8);

    }else{

        sps->chroma_format_idc= 1;

        sps->bit_depth_luma   = 8;

        sps->bit_depth_chroma = 8;

    }



    log2_max_frame_num_minus4 = get_ue_golomb(&s->gb);

    if (log2_max_frame_num_minus4 < MIN_LOG2_MAX_FRAME_NUM - 4 ||

        log2_max_frame_num_minus4 > MAX_LOG2_MAX_FRAME_NUM - 4) {

        av_log(h->s.avctx, AV_LOG_ERROR,

               "log2_max_frame_num_minus4 out of range (0-12): %d\n",

               log2_max_frame_num_minus4);

        return AVERROR_INVALIDDATA;

    }

    sps->log2_max_frame_num = log2_max_frame_num_minus4 + 4;



    sps->poc_type= get_ue_golomb_31(&s->gb);



    if(sps->poc_type == 0){ 

        sps->log2_max_poc_lsb= get_ue_golomb(&s->gb) + 4;

    } else if(sps->poc_type == 1){

        sps->delta_pic_order_always_zero_flag= get_bits1(&s->gb);

        sps->offset_for_non_ref_pic= get_se_golomb(&s->gb);

        sps->offset_for_top_to_bottom_field= get_se_golomb(&s->gb);

        sps->poc_cycle_length                = get_ue_golomb(&s->gb);



        if((unsigned)sps->poc_cycle_length >= FF_ARRAY_ELEMS(sps->offset_for_ref_frame)){

            av_log(h->s.avctx, AV_LOG_ERROR, "poc_cycle_length overflow %u\n", sps->poc_cycle_length);

            goto fail;

        }



        for(i=0; i<sps->poc_cycle_length; i++)

            sps->offset_for_ref_frame[i]= get_se_golomb(&s->gb);

    }else if(sps->poc_type != 2){

        av_log(h->s.avctx, AV_LOG_ERROR, "illegal POC type %d\n", sps->poc_type);

        goto fail;

    }



    sps->ref_frame_count= get_ue_golomb_31(&s->gb);

    if(sps->ref_frame_count > MAX_PICTURE_COUNT-2 || sps->ref_frame_count >= 32U){

        av_log(h->s.avctx, AV_LOG_ERROR, "too many reference frames\n");

        goto fail;

    }

    sps->gaps_in_frame_num_allowed_flag= get_bits1(&s->gb);

    sps->mb_width = get_ue_golomb(&s->gb) + 1;

    sps->mb_height= get_ue_golomb(&s->gb) + 1;

    if((unsigned)sps->mb_width >= INT_MAX/16 || (unsigned)sps->mb_height >= INT_MAX/16 ||

       av_image_check_size(16*sps->mb_width, 16*sps->mb_height, 0, h->s.avctx)){

        av_log(h->s.avctx, AV_LOG_ERROR, "mb_width/height overflow\n");

        goto fail;

    }



    sps->frame_mbs_only_flag= get_bits1(&s->gb);

    if(!sps->frame_mbs_only_flag)

        sps->mb_aff= get_bits1(&s->gb);

    else

        sps->mb_aff= 0;



    sps->direct_8x8_inference_flag= get_bits1(&s->gb);

    if(!sps->frame_mbs_only_flag && !sps->direct_8x8_inference_flag){

        av_log(h->s.avctx, AV_LOG_ERROR, "This stream was generated by a broken encoder, invalid 8x8 inference\n");

        goto fail;

    }



#ifndef ALLOW_INTERLACE

    if(sps->mb_aff)

        av_log(h->s.avctx, AV_LOG_ERROR, "MBAFF support not included; enable it at compile-time.\n");

#endif

    sps->crop= get_bits1(&s->gb);

    if(sps->crop){

        int crop_vertical_limit   = sps->chroma_format_idc  & 2 ? 16 : 8;

        int crop_horizontal_limit = sps->chroma_format_idc == 3 ? 16 : 8;

        sps->crop_left  = get_ue_golomb(&s->gb);

        sps->crop_right = get_ue_golomb(&s->gb);

        sps->crop_top   = get_ue_golomb(&s->gb);

        sps->crop_bottom= get_ue_golomb(&s->gb);

        if(sps->crop_left || sps->crop_top){

            av_log(h->s.avctx, AV_LOG_ERROR, "insane cropping not completely supported, this could look slightly wrong ...\n");

        }

        if(sps->crop_right >= crop_horizontal_limit || sps->crop_bottom >= crop_vertical_limit){

            av_log(h->s.avctx, AV_LOG_ERROR, "brainfart cropping not supported, this could look slightly wrong ...\n");

        }

    }else{

        sps->crop_left  =

        sps->crop_right =

        sps->crop_top   =

        sps->crop_bottom= 0;

    }



    sps->vui_parameters_present_flag= get_bits1(&s->gb);

    if( sps->vui_parameters_present_flag )

        if (decode_vui_parameters(h, sps) < 0)

            goto fail;



    if(!sps->sar.den)

        sps->sar.den= 1;



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

        static const char csp[4][5] = { "Gray", "420", "422", "444" };

        av_log(h->s.avctx, AV_LOG_DEBUG, "sps:%u profile:%d/%d poc:%d ref:%d %dx%d %s %s crop:%d/%d/%d/%d %s %s %d/%d\n",

               sps_id, sps->profile_idc, sps->level_idc,

               sps->poc_type,

               sps->ref_frame_count,

               sps->mb_width, sps->mb_height,

               sps->frame_mbs_only_flag ? "FRM" : (sps->mb_aff ? "MB-AFF" : "PIC-AFF"),

               sps->direct_8x8_inference_flag ? "8B8" : "",

               sps->crop_left, sps->crop_right,

               sps->crop_top, sps->crop_bottom,

               sps->vui_parameters_present_flag ? "VUI" : "",

               csp[sps->chroma_format_idc],

               sps->timing_info_present_flag ? sps->num_units_in_tick : 0,

               sps->timing_info_present_flag ? sps->time_scale : 0

               );

    }



    av_free(h->sps_buffers[sps_id]);

    h->sps_buffers[sps_id]= sps;

    h->sps = *sps;

    return 0;

fail:

    av_free(sps);

    return -1;

}

    h->sps_buffers[sps_id]= sps;     h->sps = *sps;
int FUNC_0(H264Context *VAR_0){

    MpegEncContext * const s = &VAR_0->s;

    int VAR_1, VAR_2, VAR_3 = 0;

    unsigned int VAR_4;

    int VAR_5, VAR_6;

    SPS *sps;



    VAR_1= get_bits(&s->gb, 8);

    VAR_3 |= get_bits1(&s->gb) << 0;   

    VAR_3 |= get_bits1(&s->gb) << 1;   

    VAR_3 |= get_bits1(&s->gb) << 2;   

    VAR_3 |= get_bits1(&s->gb) << 3;   

    get_bits(&s->gb, 4); 

    VAR_2= get_bits(&s->gb, 8);

    VAR_4= get_ue_golomb_31(&s->gb);



    if(VAR_4 >= MAX_SPS_COUNT) {

        av_log(VAR_0->s.avctx, AV_LOG_ERROR, "VAR_4 (%d) out of range\n", VAR_4);

        return -1;

    }

    sps= av_mallocz(sizeof(SPS));

    if(sps == NULL)

        return -1;



    sps->time_offset_length = 24;

    sps->VAR_1= VAR_1;

    sps->VAR_3 = VAR_3;

    sps->VAR_2= VAR_2;



    memset(sps->scaling_matrix4, 16, sizeof(sps->scaling_matrix4));

    memset(sps->scaling_matrix8, 16, sizeof(sps->scaling_matrix8));

    sps->scaling_matrix_present = 0;



    if(sps->VAR_1 >= 100){ 

        sps->chroma_format_idc= get_ue_golomb_31(&s->gb);

        if(sps->chroma_format_idc > 3) {

            av_log(VAR_0->s.avctx, AV_LOG_ERROR, "chroma_format_idc (%u) out of range\n", sps->chroma_format_idc);

            goto fail;

        } else if(sps->chroma_format_idc == 3) {

            sps->residual_color_transform_flag = get_bits1(&s->gb);

        }

        sps->bit_depth_luma   = get_ue_golomb(&s->gb) + 8;

        sps->bit_depth_chroma = get_ue_golomb(&s->gb) + 8;

        sps->transform_bypass = get_bits1(&s->gb);

        decode_scaling_matrices(VAR_0, sps, NULL, 1, sps->scaling_matrix4, sps->scaling_matrix8);

    }else{

        sps->chroma_format_idc= 1;

        sps->bit_depth_luma   = 8;

        sps->bit_depth_chroma = 8;

    }



    VAR_6 = get_ue_golomb(&s->gb);

    if (VAR_6 < MIN_LOG2_MAX_FRAME_NUM - 4 ||

        VAR_6 > MAX_LOG2_MAX_FRAME_NUM - 4) {

        av_log(VAR_0->s.avctx, AV_LOG_ERROR,

               "VAR_6 out of range (0-12): %d\n",

               VAR_6);

        return AVERROR_INVALIDDATA;

    }

    sps->log2_max_frame_num = VAR_6 + 4;



    sps->poc_type= get_ue_golomb_31(&s->gb);



    if(sps->poc_type == 0){ 

        sps->log2_max_poc_lsb= get_ue_golomb(&s->gb) + 4;

    } else if(sps->poc_type == 1){

        sps->delta_pic_order_always_zero_flag= get_bits1(&s->gb);

        sps->offset_for_non_ref_pic= get_se_golomb(&s->gb);

        sps->offset_for_top_to_bottom_field= get_se_golomb(&s->gb);

        sps->poc_cycle_length                = get_ue_golomb(&s->gb);



        if((unsigned)sps->poc_cycle_length >= FF_ARRAY_ELEMS(sps->offset_for_ref_frame)){

            av_log(VAR_0->s.avctx, AV_LOG_ERROR, "poc_cycle_length overflow %u\n", sps->poc_cycle_length);

            goto fail;

        }



        for(VAR_5=0; VAR_5<sps->poc_cycle_length; VAR_5++)

            sps->offset_for_ref_frame[VAR_5]= get_se_golomb(&s->gb);

    }else if(sps->poc_type != 2){

        av_log(VAR_0->s.avctx, AV_LOG_ERROR, "illegal POC type %d\n", sps->poc_type);

        goto fail;

    }



    sps->ref_frame_count= get_ue_golomb_31(&s->gb);

    if(sps->ref_frame_count > MAX_PICTURE_COUNT-2 || sps->ref_frame_count >= 32U){

        av_log(VAR_0->s.avctx, AV_LOG_ERROR, "too many reference frames\n");

        goto fail;

    }

    sps->gaps_in_frame_num_allowed_flag= get_bits1(&s->gb);

    sps->mb_width = get_ue_golomb(&s->gb) + 1;

    sps->mb_height= get_ue_golomb(&s->gb) + 1;

    if((unsigned)sps->mb_width >= INT_MAX/16 || (unsigned)sps->mb_height >= INT_MAX/16 ||

       av_image_check_size(16*sps->mb_width, 16*sps->mb_height, 0, VAR_0->s.avctx)){

        av_log(VAR_0->s.avctx, AV_LOG_ERROR, "mb_width/height overflow\n");

        goto fail;

    }



    sps->frame_mbs_only_flag= get_bits1(&s->gb);

    if(!sps->frame_mbs_only_flag)

        sps->mb_aff= get_bits1(&s->gb);

    else

        sps->mb_aff= 0;



    sps->direct_8x8_inference_flag= get_bits1(&s->gb);

    if(!sps->frame_mbs_only_flag && !sps->direct_8x8_inference_flag){

        av_log(VAR_0->s.avctx, AV_LOG_ERROR, "This stream was generated by a broken encoder, invalid 8x8 inference\n");

        goto fail;

    }



#ifndef ALLOW_INTERLACE

    if(sps->mb_aff)

        av_log(VAR_0->s.avctx, AV_LOG_ERROR, "MBAFF support not included; enable it at compile-time.\n");

#endif

    sps->crop= get_bits1(&s->gb);

    if(sps->crop){

        int VAR_7   = sps->chroma_format_idc  & 2 ? 16 : 8;

        int VAR_8 = sps->chroma_format_idc == 3 ? 16 : 8;

        sps->crop_left  = get_ue_golomb(&s->gb);

        sps->crop_right = get_ue_golomb(&s->gb);

        sps->crop_top   = get_ue_golomb(&s->gb);

        sps->crop_bottom= get_ue_golomb(&s->gb);

        if(sps->crop_left || sps->crop_top){

            av_log(VAR_0->s.avctx, AV_LOG_ERROR, "insane cropping not completely supported, this could look slightly wrong ...\n");

        }

        if(sps->crop_right >= VAR_8 || sps->crop_bottom >= VAR_7){

            av_log(VAR_0->s.avctx, AV_LOG_ERROR, "brainfart cropping not supported, this could look slightly wrong ...\n");

        }

    }else{

        sps->crop_left  =

        sps->crop_right =

        sps->crop_top   =

        sps->crop_bottom= 0;

    }



    sps->vui_parameters_present_flag= get_bits1(&s->gb);

    if( sps->vui_parameters_present_flag )

        if (decode_vui_parameters(VAR_0, sps) < 0)

            goto fail;



    if(!sps->sar.den)

        sps->sar.den= 1;



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

        static const char VAR_9[4][5] = { "Gray", "420", "422", "444" };

        av_log(VAR_0->s.avctx, AV_LOG_DEBUG, "sps:%u profile:%d/%d poc:%d ref:%d %dx%d %s %s crop:%d/%d/%d/%d %s %s %d/%d\n",

               VAR_4, sps->VAR_1, sps->VAR_2,

               sps->poc_type,

               sps->ref_frame_count,

               sps->mb_width, sps->mb_height,

               sps->frame_mbs_only_flag ? "FRM" : (sps->mb_aff ? "MB-AFF" : "PIC-AFF"),

               sps->direct_8x8_inference_flag ? "8B8" : "",

               sps->crop_left, sps->crop_right,

               sps->crop_top, sps->crop_bottom,

               sps->vui_parameters_present_flag ? "VUI" : "",

               VAR_9[sps->chroma_format_idc],

               sps->timing_info_present_flag ? sps->num_units_in_tick : 0,

               sps->timing_info_present_flag ? sps->time_scale : 0

               );

    }



    av_free(VAR_0->sps_buffers[VAR_4]);

    VAR_0->sps_buffers[VAR_4]= sps;

    VAR_0->sps = *sps;

    return 0;

fail:

    av_free(sps);

    return -1;

}

int FUNC_0(H264Context *VAR_0){ MpegEncContext * const s = &VAR_0->s; int VAR_1, VAR_2, VAR_3 = 0; unsigned int VAR_4; int VAR_5, VAR_6; SPS *sps; VAR_1= get_bits(&s->gb, 8); VAR_3 |= get_bits1(&s->gb) << 0; VAR_3 |= get_bits1(&s->gb) << 1; VAR_3 |= get_bits1(&s->gb) << 2; VAR_3 |= get_bits1(&s->gb) << 3; get_bits(&s->gb, 4); VAR_2= get_bits(&s->gb, 8); VAR_4= get_ue_golomb_31(&s->gb); if(VAR_4 >= MAX_SPS_COUNT) { av_log(VAR_0->s.avctx, AV_LOG_ERROR, "VAR_4 (%d) out of range\n", VAR_4); return -1; } sps= av_mallocz(sizeof(SPS)); if(sps == NULL)
return -1; sps->time_offset_length = 24; sps->VAR_1= VAR_1; sps->VAR_3 = VAR_3; sps->VAR_2= VAR_2; memset(sps->scaling_matrix4, 16, sizeof(sps->scaling_matrix4)); memset(sps->scaling_matrix8, 16, sizeof(sps->scaling_matrix8)); sps->scaling_matrix_present = 0; if(sps->VAR_1 >= 100){ sps->chroma_format_idc= get_ue_golomb_31(&s->gb); if(sps->chroma_format_idc > 3) { av_log(VAR_0->s.avctx, AV_LOG_ERROR, "chroma_format_idc (%u) out of range\n", sps->chroma_format_idc); goto fail; } else if(sps->chroma_format_idc == 3) { sps->residual_color_transform_flag = get_bits1(&s->gb); } sps->bit_depth_luma   = get_ue_golomb(&s->gb) + 8; sps->bit_depth_chroma = get_ue_golomb(&s->gb) + 8; sps->transform_bypass = get_bits1(&s->gb); decode_scaling_matrices(VAR_0, sps, NULL, 1, sps->scaling_matrix4, sps->scaling_matrix8); }else{ sps->chroma_format_idc= 1; sps->bit_depth_luma   = 8; sps->bit_depth_chroma = 8; } VAR_6 = get_ue_golomb(&s->gb); if (VAR_6 < MIN_LOG2_MAX_FRAME_NUM - 4 ||
VAR_6 > MAX_LOG2_MAX_FRAME_NUM - 4) { av_log(VAR_0->s.avctx, AV_LOG_ERROR,
"VAR_6 out of range (0-12): %d\n",
VAR_6); return AVERROR_INVALIDDATA; } sps->log2_max_frame_num = VAR_6 + 4; sps->poc_type= get_ue_golomb_31(&s->gb); if(sps->poc_type == 0){ sps->log2_max_poc_lsb= get_ue_golomb(&s->gb) + 4; } else if(sps->poc_type == 1){ sps->delta_pic_order_always_zero_flag= get_bits1(&s->gb); sps->offset_for_non_ref_pic= get_se_golomb(&s->gb); sps->offset_for_top_to_bottom_field= get_se_golomb(&s->gb); sps->poc_cycle_length                = get_ue_golomb(&s->gb); if((unsigned)sps->poc_cycle_length >= FF_ARRAY_ELEMS(sps->offset_for_ref_frame)){ av_log(VAR_0->s.avctx, AV_LOG_ERROR, "poc_cycle_length overflow %u\n", sps->poc_cycle_length); goto fail; } for(VAR_5=0; VAR_5<sps->poc_cycle_length; VAR_5++) sps->offset_for_ref_frame[VAR_5]= get_se_golomb(&s->gb); }else if(sps->poc_type != 2){ av_log(VAR_0->s.avctx, AV_LOG_ERROR, "illegal POC type %d\n", sps->poc_type); goto fail; } sps->ref_frame_count= get_ue_golomb_31(&s->gb); if(sps->ref_frame_count > MAX_PICTURE_COUNT-2 || sps->ref_frame_count >= 32U){ av_log(VAR_0->s.avctx, AV_LOG_ERROR, "too many reference frames\n"); goto fail; } sps->gaps_in_frame_num_allowed_flag= get_bits1(&s->gb); sps->mb_width = get_ue_golomb(&s->gb) + 1; sps->mb_height= get_ue_golomb(&s->gb) + 1; if((unsigned)sps->mb_width >= INT_MAX/16 || (unsigned)sps->mb_height >= INT_MAX/16 ||
av_image_check_size(16*sps->mb_width, 16*sps->mb_height, 0, VAR_0->s.avctx)){ av_log(VAR_0->s.avctx, AV_LOG_ERROR, "mb_width/height overflow\n"); goto fail; } sps->frame_mbs_only_flag= get_bits1(&s->gb); if(!sps->frame_mbs_only_flag)
sps->mb_aff= get_bits1(&s->gb); else
sps->mb_aff= 0; sps->direct_8x8_inference_flag= get_bits1(&s->gb); if(!sps->frame_mbs_only_flag && !sps->direct_8x8_inference_flag){ av_log(VAR_0->s.avctx, AV_LOG_ERROR, "This stream was generated by a broken encoder, invalid 8x8 inference\n"); goto fail; } #ifndef ALLOW_INTERLACE
if(sps->mb_aff)
av_log(VAR_0->s.avctx, AV_LOG_ERROR, "MBAFF support not included; enable it at compile-time.\n"); #endif
sps->crop= get_bits1(&s->gb); if(sps->crop){ int VAR_7   = sps->chroma_format_idc  & 2 ? 16 : 8; int VAR_8 = sps->chroma_format_idc == 3 ? 16 : 8; sps->crop_left  = get_ue_golomb(&s->gb); sps->crop_right = get_ue_golomb(&s->gb); sps->crop_top   = get_ue_golomb(&s->gb); sps->crop_bottom= get_ue_golomb(&s->gb); if(sps->crop_left || sps->crop_top){ av_log(VAR_0->s.avctx, AV_LOG_ERROR, "insane cropping not completely supported, this could look slightly wrong ...\n"); } if(sps->crop_right >= VAR_8 || sps->crop_bottom >= VAR_7){ av_log(VAR_0->s.avctx, AV_LOG_ERROR, "brainfart cropping not supported, this could look slightly wrong ...\n"); } }else{ sps->crop_left  =
sps->crop_right =
sps->crop_top   =
sps->crop_bottom= 0; } sps->vui_parameters_present_flag= get_bits1(&s->gb); if( sps->vui_parameters_present_flag )
if (decode_vui_parameters(VAR_0, sps) < 0)
goto fail; if(!sps->sar.den)
sps->sar.den= 1; if(s->avctx->debug&FF_DEBUG_PICT_INFO){ static const char VAR_9[4][5] = { "Gray", "420", "422", "444" }; av_log(VAR_0->s.avctx, AV_LOG_DEBUG, "sps:%u profile:%d/%d poc:%d ref:%d %dx%d %s %s crop:%d/%d/%d/%d %s %s %d/%d\n",
VAR_4, sps->VAR_1, sps->VAR_2,
sps->poc_type,
sps->ref_frame_count,
sps->mb_width, sps->mb_height,
sps->frame_mbs_only_flag ? "FRM" : (sps->mb_aff ? "MB-AFF" : "PIC-AFF"),
sps->direct_8x8_inference_flag ? "8B8" : "",
sps->crop_left, sps->crop_right,
sps->crop_top, sps->crop_bottom,
sps->vui_parameters_present_flag ? "VUI" : "",
VAR_9[sps->chroma_format_idc],
sps->timing_info_present_flag ? sps->num_units_in_tick : 0,
sps->timing_info_present_flag ? sps->time_scale : 0
); } av_free(VAR_0->sps_buffers[VAR_4]); VAR_0->sps_buffers[VAR_4]= sps; VAR_0->sps = *sps; return 0; fail:
av_free(sps); return -1; }