static inline int decode_vui_parameters(GetBitContext *gb, AVCodecContext *avctx,

                                        SPS *sps)

{

    int aspect_ratio_info_present_flag;

    unsigned int aspect_ratio_idc;



    aspect_ratio_info_present_flag = get_bits1(gb);



    if (aspect_ratio_info_present_flag) {

        aspect_ratio_idc = get_bits(gb, 8);

        if (aspect_ratio_idc == EXTENDED_SAR) {

            sps->sar.num = get_bits(gb, 16);

            sps->sar.den = get_bits(gb, 16);

        } else if (aspect_ratio_idc < FF_ARRAY_ELEMS(pixel_aspect)) {

            sps->sar = pixel_aspect[aspect_ratio_idc];

        } else {

            av_log(avctx, AV_LOG_ERROR, "illegal aspect ratio\n");

            return AVERROR_INVALIDDATA;

        }

    } else {

        sps->sar.num =

        sps->sar.den = 0;

    }



    if (get_bits1(gb))      /* overscan_info_present_flag */

        get_bits1(gb);      /* overscan_appropriate_flag */



    sps->video_signal_type_present_flag = get_bits1(gb);

    if (sps->video_signal_type_present_flag) {

        get_bits(gb, 3);                 /* video_format */

        sps->full_range = get_bits1(gb); /* video_full_range_flag */



        sps->colour_description_present_flag = get_bits1(gb);

        if (sps->colour_description_present_flag) {

            sps->color_primaries = get_bits(gb, 8); /* colour_primaries */

            sps->color_trc       = get_bits(gb, 8); /* transfer_characteristics */

            sps->colorspace      = get_bits(gb, 8); /* matrix_coefficients */

            if (sps->color_primaries >= AVCOL_PRI_NB)

                sps->color_primaries = AVCOL_PRI_UNSPECIFIED;

            if (sps->color_trc >= AVCOL_TRC_NB)

                sps->color_trc = AVCOL_TRC_UNSPECIFIED;

            if (sps->colorspace >= AVCOL_SPC_NB)

                sps->colorspace = AVCOL_SPC_UNSPECIFIED;

        }

    }



    /* chroma_location_info_present_flag */

    if (get_bits1(gb)) {

        /* chroma_sample_location_type_top_field */

        avctx->chroma_sample_location = get_ue_golomb(gb) + 1;

        get_ue_golomb(gb);  /* chroma_sample_location_type_bottom_field */

    }



    sps->timing_info_present_flag = get_bits1(gb);

    if (sps->timing_info_present_flag) {

        sps->num_units_in_tick = get_bits_long(gb, 32);

        sps->time_scale        = get_bits_long(gb, 32);

        if (!sps->num_units_in_tick || !sps->time_scale) {

            av_log(avctx, AV_LOG_ERROR,

                   "time_scale/num_units_in_tick invalid or unsupported (%"PRIu32"/%"PRIu32")\n",

                   sps->time_scale, sps->num_units_in_tick);

            return AVERROR_INVALIDDATA;

        }

        sps->fixed_frame_rate_flag = get_bits1(gb);

    }



    sps->nal_hrd_parameters_present_flag = get_bits1(gb);

    if (sps->nal_hrd_parameters_present_flag)

        if (decode_hrd_parameters(gb, avctx, sps) < 0)

            return AVERROR_INVALIDDATA;

    sps->vcl_hrd_parameters_present_flag = get_bits1(gb);

    if (sps->vcl_hrd_parameters_present_flag)

        if (decode_hrd_parameters(gb, avctx, sps) < 0)

            return AVERROR_INVALIDDATA;

    if (sps->nal_hrd_parameters_present_flag ||

        sps->vcl_hrd_parameters_present_flag)

        get_bits1(gb);     /* low_delay_hrd_flag */

    sps->pic_struct_present_flag = get_bits1(gb);



    sps->bitstream_restriction_flag = get_bits1(gb);

    if (sps->bitstream_restriction_flag) {

        get_bits1(gb);     /* motion_vectors_over_pic_boundaries_flag */

        get_ue_golomb(gb); /* max_bytes_per_pic_denom */

        get_ue_golomb(gb); /* max_bits_per_mb_denom */

        get_ue_golomb(gb); /* log2_max_mv_length_horizontal */

        get_ue_golomb(gb); /* log2_max_mv_length_vertical */

        sps->num_reorder_frames = get_ue_golomb(gb);

        get_ue_golomb(gb); /*max_dec_frame_buffering*/



        if (get_bits_left(gb) < 0) {

            sps->num_reorder_frames         = 0;

            sps->bitstream_restriction_flag = 0;

        }



        if (sps->num_reorder_frames > 16U

            /* max_dec_frame_buffering || max_dec_frame_buffering > 16 */) {

            av_log(avctx, AV_LOG_ERROR,

                   "Clipping illegal num_reorder_frames %d\n",

                   sps->num_reorder_frames);

            sps->num_reorder_frames = 16;

            return AVERROR_INVALIDDATA;

        }

    }

    if (get_bits_left(gb) < 0) {

        av_log(avctx, AV_LOG_ERROR,

               "Overread VUI by %d bits\n", -get_bits_left(gb));

        return AVERROR_INVALIDDATA;

    }



    return 0;

}

static inline int decode_vui_parameters(GetBitContext *gb, AVCodecContext *avctx,

                                        SPS *sps)

{

    int aspect_ratio_info_present_flag;

    unsigned int aspect_ratio_idc;



    aspect_ratio_info_present_flag = get_bits1(gb);



    if (aspect_ratio_info_present_flag) {

        aspect_ratio_idc = get_bits(gb, 8);

        if (aspect_ratio_idc == EXTENDED_SAR) {

            sps->sar.num = get_bits(gb, 16);

            sps->sar.den = get_bits(gb, 16);

        } else if (aspect_ratio_idc < FF_ARRAY_ELEMS(pixel_aspect)) {

            sps->sar = pixel_aspect[aspect_ratio_idc];

        } else {

            av_log(avctx, AV_LOG_ERROR, "illegal aspect ratio\n");

            return AVERROR_INVALIDDATA;

        }

    } else {

        sps->sar.num =

        sps->sar.den = 0;

    }



    if (get_bits1(gb))      

        get_bits1(gb);      



    sps->video_signal_type_present_flag = get_bits1(gb);

    if (sps->video_signal_type_present_flag) {

        get_bits(gb, 3);                 

        sps->full_range = get_bits1(gb); 



        sps->colour_description_present_flag = get_bits1(gb);

        if (sps->colour_description_present_flag) {

            sps->color_primaries = get_bits(gb, 8); 

            sps->color_trc       = get_bits(gb, 8); 

            sps->colorspace      = get_bits(gb, 8); 

            if (sps->color_primaries >= AVCOL_PRI_NB)

                sps->color_primaries = AVCOL_PRI_UNSPECIFIED;

            if (sps->color_trc >= AVCOL_TRC_NB)

                sps->color_trc = AVCOL_TRC_UNSPECIFIED;

            if (sps->colorspace >= AVCOL_SPC_NB)

                sps->colorspace = AVCOL_SPC_UNSPECIFIED;

        }

    }



    

    if (get_bits1(gb)) {

        

        avctx->chroma_sample_location = get_ue_golomb(gb) + 1;

        get_ue_golomb(gb);  

    }



    sps->timing_info_present_flag = get_bits1(gb);

    if (sps->timing_info_present_flag) {

        sps->num_units_in_tick = get_bits_long(gb, 32);

        sps->time_scale        = get_bits_long(gb, 32);

        if (!sps->num_units_in_tick || !sps->time_scale) {

            av_log(avctx, AV_LOG_ERROR,

                   "time_scale/num_units_in_tick invalid or unsupported (%"PRIu32"/%"PRIu32")\n",

                   sps->time_scale, sps->num_units_in_tick);

            return AVERROR_INVALIDDATA;

        }

        sps->fixed_frame_rate_flag = get_bits1(gb);

    }



    sps->nal_hrd_parameters_present_flag = get_bits1(gb);

    if (sps->nal_hrd_parameters_present_flag)

        if (decode_hrd_parameters(gb, avctx, sps) < 0)

            return AVERROR_INVALIDDATA;

    sps->vcl_hrd_parameters_present_flag = get_bits1(gb);

    if (sps->vcl_hrd_parameters_present_flag)

        if (decode_hrd_parameters(gb, avctx, sps) < 0)

            return AVERROR_INVALIDDATA;

    if (sps->nal_hrd_parameters_present_flag ||

        sps->vcl_hrd_parameters_present_flag)

        get_bits1(gb);     

    sps->pic_struct_present_flag = get_bits1(gb);



    sps->bitstream_restriction_flag = get_bits1(gb);

    if (sps->bitstream_restriction_flag) {

        get_bits1(gb);     

        get_ue_golomb(gb); 

        get_ue_golomb(gb); 

        get_ue_golomb(gb); 

        get_ue_golomb(gb); 

        sps->num_reorder_frames = get_ue_golomb(gb);

        get_ue_golomb(gb); 



        if (get_bits_left(gb) < 0) {

            sps->num_reorder_frames         = 0;

            sps->bitstream_restriction_flag = 0;

        }



        if (sps->num_reorder_frames > 16U

            ) {

            av_log(avctx, AV_LOG_ERROR,

                   "Clipping illegal num_reorder_frames %d\n",

                   sps->num_reorder_frames);

            sps->num_reorder_frames = 16;

            return AVERROR_INVALIDDATA;

        }

    }

    if (get_bits_left(gb) < 0) {

        av_log(avctx, AV_LOG_ERROR,

               "Overread VUI by %d bits\n", -get_bits_left(gb));

        return AVERROR_INVALIDDATA;

    }



    return 0;

}

static inline int FUNC_0(GetBitContext *VAR_0, AVCodecContext *VAR_1,

                                        SPS *VAR_2)

{

    int VAR_3;

    unsigned int VAR_4;



    VAR_3 = get_bits1(VAR_0);



    if (VAR_3) {

        VAR_4 = get_bits(VAR_0, 8);

        if (VAR_4 == EXTENDED_SAR) {

            VAR_2->sar.num = get_bits(VAR_0, 16);

            VAR_2->sar.den = get_bits(VAR_0, 16);

        } else if (VAR_4 < FF_ARRAY_ELEMS(pixel_aspect)) {

            VAR_2->sar = pixel_aspect[VAR_4];

        } else {

            av_log(VAR_1, AV_LOG_ERROR, "illegal aspect ratio\n");

            return AVERROR_INVALIDDATA;

        }

    } else {

        VAR_2->sar.num =

        VAR_2->sar.den = 0;

    }



    if (get_bits1(VAR_0))      

        get_bits1(VAR_0);      



    VAR_2->video_signal_type_present_flag = get_bits1(VAR_0);

    if (VAR_2->video_signal_type_present_flag) {

        get_bits(VAR_0, 3);                 

        VAR_2->full_range = get_bits1(VAR_0); 



        VAR_2->colour_description_present_flag = get_bits1(VAR_0);

        if (VAR_2->colour_description_present_flag) {

            VAR_2->color_primaries = get_bits(VAR_0, 8); 

            VAR_2->color_trc       = get_bits(VAR_0, 8); 

            VAR_2->colorspace      = get_bits(VAR_0, 8); 

            if (VAR_2->color_primaries >= AVCOL_PRI_NB)

                VAR_2->color_primaries = AVCOL_PRI_UNSPECIFIED;

            if (VAR_2->color_trc >= AVCOL_TRC_NB)

                VAR_2->color_trc = AVCOL_TRC_UNSPECIFIED;

            if (VAR_2->colorspace >= AVCOL_SPC_NB)

                VAR_2->colorspace = AVCOL_SPC_UNSPECIFIED;

        }

    }



    

    if (get_bits1(VAR_0)) {

        

        VAR_1->chroma_sample_location = get_ue_golomb(VAR_0) + 1;

        get_ue_golomb(VAR_0);  

    }



    VAR_2->timing_info_present_flag = get_bits1(VAR_0);

    if (VAR_2->timing_info_present_flag) {

        VAR_2->num_units_in_tick = get_bits_long(VAR_0, 32);

        VAR_2->time_scale        = get_bits_long(VAR_0, 32);

        if (!VAR_2->num_units_in_tick || !VAR_2->time_scale) {

            av_log(VAR_1, AV_LOG_ERROR,

                   "time_scale/num_units_in_tick invalid or unsupported (%"PRIu32"/%"PRIu32")\n",

                   VAR_2->time_scale, VAR_2->num_units_in_tick);

            return AVERROR_INVALIDDATA;

        }

        VAR_2->fixed_frame_rate_flag = get_bits1(VAR_0);

    }



    VAR_2->nal_hrd_parameters_present_flag = get_bits1(VAR_0);

    if (VAR_2->nal_hrd_parameters_present_flag)

        if (decode_hrd_parameters(VAR_0, VAR_1, VAR_2) < 0)

            return AVERROR_INVALIDDATA;

    VAR_2->vcl_hrd_parameters_present_flag = get_bits1(VAR_0);

    if (VAR_2->vcl_hrd_parameters_present_flag)

        if (decode_hrd_parameters(VAR_0, VAR_1, VAR_2) < 0)

            return AVERROR_INVALIDDATA;

    if (VAR_2->nal_hrd_parameters_present_flag ||

        VAR_2->vcl_hrd_parameters_present_flag)

        get_bits1(VAR_0);     

    VAR_2->pic_struct_present_flag = get_bits1(VAR_0);



    VAR_2->bitstream_restriction_flag = get_bits1(VAR_0);

    if (VAR_2->bitstream_restriction_flag) {

        get_bits1(VAR_0);     

        get_ue_golomb(VAR_0); 

        get_ue_golomb(VAR_0); 

        get_ue_golomb(VAR_0); 

        get_ue_golomb(VAR_0); 

        VAR_2->num_reorder_frames = get_ue_golomb(VAR_0);

        get_ue_golomb(VAR_0); 



        if (get_bits_left(VAR_0) < 0) {

            VAR_2->num_reorder_frames         = 0;

            VAR_2->bitstream_restriction_flag = 0;

        }



        if (VAR_2->num_reorder_frames > 16U

            ) {

            av_log(VAR_1, AV_LOG_ERROR,

                   "Clipping illegal num_reorder_frames %d\n",

                   VAR_2->num_reorder_frames);

            VAR_2->num_reorder_frames = 16;

            return AVERROR_INVALIDDATA;

        }

    }

    if (get_bits_left(VAR_0) < 0) {

        av_log(VAR_1, AV_LOG_ERROR,

               "Overread VUI by %d bits\n", -get_bits_left(VAR_0));

        return AVERROR_INVALIDDATA;

    }



    return 0;

}

static inline int FUNC_0(GetBitContext *VAR_0, AVCodecContext *VAR_1,
SPS *VAR_2)
{ int VAR_3; unsigned int VAR_4; VAR_3 = get_bits1(VAR_0); if (VAR_3) { VAR_4 = get_bits(VAR_0, 8); if (VAR_4 == EXTENDED_SAR) { VAR_2->sar.num = get_bits(VAR_0, 16); VAR_2->sar.den = get_bits(VAR_0, 16); } else if (VAR_4 < FF_ARRAY_ELEMS(pixel_aspect)) { VAR_2->sar = pixel_aspect[VAR_4]; } else { av_log(VAR_1, AV_LOG_ERROR, "illegal aspect ratio\n"); return AVERROR_INVALIDDATA; } } else { VAR_2->sar.num =
VAR_2->sar.den = 0; } if (get_bits1(VAR_0))
get_bits1(VAR_0); VAR_2->video_signal_type_present_flag = get_bits1(VAR_0); if (VAR_2->video_signal_type_present_flag) { get_bits(VAR_0, 3); VAR_2->full_range = get_bits1(VAR_0); VAR_2->colour_description_present_flag = get_bits1(VAR_0); if (VAR_2->colour_description_present_flag) { VAR_2->color_primaries = get_bits(VAR_0, 8); VAR_2->color_trc       = get_bits(VAR_0, 8); VAR_2->colorspace      = get_bits(VAR_0, 8); if (VAR_2->color_primaries >= AVCOL_PRI_NB)
VAR_2->color_primaries = AVCOL_PRI_UNSPECIFIED; if (VAR_2->color_trc >= AVCOL_TRC_NB)
VAR_2->color_trc = AVCOL_TRC_UNSPECIFIED; if (VAR_2->colorspace >= AVCOL_SPC_NB)
VAR_2->colorspace = AVCOL_SPC_UNSPECIFIED; } } if (get_bits1(VAR_0)) { VAR_1->chroma_sample_location = get_ue_golomb(VAR_0) + 1; get_ue_golomb(VAR_0); } VAR_2->timing_info_present_flag = get_bits1(VAR_0); if (VAR_2->timing_info_present_flag) { VAR_2->num_units_in_tick = get_bits_long(VAR_0, 32); VAR_2->time_scale        = get_bits_long(VAR_0, 32); if (!VAR_2->num_units_in_tick || !VAR_2->time_scale) { av_log(VAR_1, AV_LOG_ERROR,
"time_scale/num_units_in_tick invalid or unsupported (%"PRIu32"/%"PRIu32")\n",
VAR_2->time_scale, VAR_2->num_units_in_tick); return AVERROR_INVALIDDATA; } VAR_2->fixed_frame_rate_flag = get_bits1(VAR_0); } VAR_2->nal_hrd_parameters_present_flag = get_bits1(VAR_0); if (VAR_2->nal_hrd_parameters_present_flag)
if (decode_hrd_parameters(VAR_0, VAR_1, VAR_2) < 0)
return AVERROR_INVALIDDATA; VAR_2->vcl_hrd_parameters_present_flag = get_bits1(VAR_0); if (VAR_2->vcl_hrd_parameters_present_flag)
if (decode_hrd_parameters(VAR_0, VAR_1, VAR_2) < 0)
return AVERROR_INVALIDDATA; if (VAR_2->nal_hrd_parameters_present_flag ||
VAR_2->vcl_hrd_parameters_present_flag)
get_bits1(VAR_0); VAR_2->pic_struct_present_flag = get_bits1(VAR_0); VAR_2->bitstream_restriction_flag = get_bits1(VAR_0); if (VAR_2->bitstream_restriction_flag) { get_bits1(VAR_0); get_ue_golomb(VAR_0); get_ue_golomb(VAR_0); get_ue_golomb(VAR_0); get_ue_golomb(VAR_0); VAR_2->num_reorder_frames = get_ue_golomb(VAR_0); get_ue_golomb(VAR_0); if (get_bits_left(VAR_0) < 0) { VAR_2->num_reorder_frames         = 0; VAR_2->bitstream_restriction_flag = 0; } if (VAR_2->num_reorder_frames > 16U
) { av_log(VAR_1, AV_LOG_ERROR,
"Clipping illegal num_reorder_frames %d\n",
VAR_2->num_reorder_frames); VAR_2->num_reorder_frames = 16; return AVERROR_INVALIDDATA; } } if (get_bits_left(VAR_0) < 0) { av_log(VAR_1, AV_LOG_ERROR,
"Overread VUI by %d bits\n", -get_bits_left(VAR_0)); return AVERROR_INVALIDDATA; } return 0; }