static int metadata_parse(FLACContext *s)

{

    int i, metadata_last, metadata_type, metadata_size;

    int initial_pos= get_bits_count(&s->gb);



    if (show_bits_long(&s->gb, 32) == MKBETAG('f','L','a','C')) {

        skip_bits_long(&s->gb, 32);



        do {

            metadata_last = get_bits1(&s->gb);

            metadata_type = get_bits(&s->gb, 7);

            metadata_size = get_bits_long(&s->gb, 24);



            if (get_bits_count(&s->gb) + 8*metadata_size > s->gb.size_in_bits) {

                skip_bits_long(&s->gb, initial_pos - get_bits_count(&s->gb));

                break;

            }



            if (metadata_size) {

                switch (metadata_type) {

                case FLAC_METADATA_TYPE_STREAMINFO:

                    if (!s->got_streaminfo) {

                        ff_flac_parse_streaminfo(s->avctx, (FLACStreaminfo *)s,

                                                 s->gb.buffer+get_bits_count(&s->gb)/8);

                        allocate_buffers(s);

                        s->got_streaminfo = 1;

                    }

                default:

                    for (i = 0; i < metadata_size; i++)

                        skip_bits(&s->gb, 8);

                }

            }

        } while (!metadata_last);



        return 1;

    }

    return 0;

}

static int metadata_parse(FLACContext *s)

{

    int i, metadata_last, metadata_type, metadata_size;

    int initial_pos= get_bits_count(&s->gb);



    if (show_bits_long(&s->gb, 32) == MKBETAG('f','L','a','C')) {

        skip_bits_long(&s->gb, 32);



        do {

            metadata_last = get_bits1(&s->gb);

            metadata_type = get_bits(&s->gb, 7);

            metadata_size = get_bits_long(&s->gb, 24);



            if (get_bits_count(&s->gb) + 8*metadata_size > s->gb.size_in_bits) {

                skip_bits_long(&s->gb, initial_pos - get_bits_count(&s->gb));

                break;

            }



            if (metadata_size) {

                switch (metadata_type) {

                case FLAC_METADATA_TYPE_STREAMINFO:

                    if (!s->got_streaminfo) {

                        ff_flac_parse_streaminfo(s->avctx, (FLACStreaminfo *)s,

                                                 s->gb.buffer+get_bits_count(&s->gb)/8);

                        allocate_buffers(s);

                        s->got_streaminfo = 1;

                    }

                default:

                    for (i = 0; i < metadata_size; i++)

                        skip_bits(&s->gb, 8);

                }

            }

        } while (!metadata_last);



        return 1;

    }

    return 0;

}

static int FUNC_0(FLACContext *VAR_0)

{

    int VAR_1, VAR_2, VAR_3, VAR_4;

    int VAR_5= get_bits_count(&VAR_0->gb);



    if (show_bits_long(&VAR_0->gb, 32) == MKBETAG('f','L','a','C')) {

        skip_bits_long(&VAR_0->gb, 32);



        do {

            VAR_2 = get_bits1(&VAR_0->gb);

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

            VAR_4 = get_bits_long(&VAR_0->gb, 24);



            if (get_bits_count(&VAR_0->gb) + 8*VAR_4 > VAR_0->gb.size_in_bits) {

                skip_bits_long(&VAR_0->gb, VAR_5 - get_bits_count(&VAR_0->gb));

                break;

            }



            if (VAR_4) {

                switch (VAR_3) {

                case FLAC_METADATA_TYPE_STREAMINFO:

                    if (!VAR_0->got_streaminfo) {

                        ff_flac_parse_streaminfo(VAR_0->avctx, (FLACStreaminfo *)VAR_0,

                                                 VAR_0->gb.buffer+get_bits_count(&VAR_0->gb)/8);

                        allocate_buffers(VAR_0);

                        VAR_0->got_streaminfo = 1;

                    }

                default:

                    for (VAR_1 = 0; VAR_1 < VAR_4; VAR_1++)

                        skip_bits(&VAR_0->gb, 8);

                }

            }

        } while (!VAR_2);



        return 1;

    }

    return 0;

}

static int FUNC_0(FLACContext *VAR_0)
{ int VAR_1, VAR_2, VAR_3, VAR_4; int VAR_5= get_bits_count(&VAR_0->gb); if (show_bits_long(&VAR_0->gb, 32) == MKBETAG('f','L','a','C')) { skip_bits_long(&VAR_0->gb, 32); do { VAR_2 = get_bits1(&VAR_0->gb); VAR_3 = get_bits(&VAR_0->gb, 7); VAR_4 = get_bits_long(&VAR_0->gb, 24); if (get_bits_count(&VAR_0->gb) + 8*VAR_4 > VAR_0->gb.size_in_bits) { skip_bits_long(&VAR_0->gb, VAR_5 - get_bits_count(&VAR_0->gb)); break; } if (VAR_4) { switch (VAR_3) { case FLAC_METADATA_TYPE_STREAMINFO:
if (!VAR_0->got_streaminfo) { ff_flac_parse_streaminfo(VAR_0->avctx, (FLACStreaminfo *)VAR_0,
VAR_0->gb.buffer+get_bits_count(&VAR_0->gb)/8); allocate_buffers(VAR_0); VAR_0->got_streaminfo = 1; } default:
for (VAR_1 = 0; VAR_1 < VAR_4; VAR_1++) skip_bits(&VAR_0->gb, 8); } } } while (!VAR_2); return 1; } return 0; }