static void read_chapter(AVFormatContext *s, AVIOContext *pb, int len, char *ttag, ID3v2ExtraMeta **extra_meta)

{

    AVRational time_base = {1, 1000};

    uint32_t start, end;

    AVChapter *chapter;

    uint8_t *dst = NULL;

    int taglen;

    char tag[5];



    decode_str(s, pb, 0, &dst, &len);

    if (len < 16)

        return;



    start = avio_rb32(pb);

    end   = avio_rb32(pb);

    avio_skip(pb, 8);



    chapter = avpriv_new_chapter(s, s->nb_chapters + 1, time_base, start, end, dst);

    if (!chapter) {

        av_free(dst);

        return;

    }



    len -= 16;

    while (len > 10) {

        avio_read(pb, tag, 4);

        tag[4] = 0;

        taglen = avio_rb32(pb);

        avio_skip(pb, 2);

        len -= 10;

        if (taglen < 0 || taglen > len) {

            av_free(dst);

            return;

        }

        if (tag[0] == 'T')

            read_ttag(s, pb, taglen, &chapter->metadata, tag);

        else

            avio_skip(pb, taglen);

        len -= taglen;

    }



    ff_metadata_conv(&chapter->metadata, NULL, ff_id3v2_34_metadata_conv);

    ff_metadata_conv(&chapter->metadata, NULL, ff_id3v2_4_metadata_conv);

    av_free(dst);

}

static void read_chapter(AVFormatContext *s, AVIOContext *pb, int len, char *ttag, ID3v2ExtraMeta **extra_meta)

{

    AVRational time_base = {1, 1000};

    uint32_t start, end;

    AVChapter *chapter;

    uint8_t *dst = NULL;

    int taglen;

    char tag[5];



    decode_str(s, pb, 0, &dst, &len);

    if (len < 16)

        return;



    start = avio_rb32(pb);

    end   = avio_rb32(pb);

    avio_skip(pb, 8);



    chapter = avpriv_new_chapter(s, s->nb_chapters + 1, time_base, start, end, dst);

    if (!chapter) {

        av_free(dst);

        return;

    }



    len -= 16;

    while (len > 10) {

        avio_read(pb, tag, 4);

        tag[4] = 0;

        taglen = avio_rb32(pb);

        avio_skip(pb, 2);

        len -= 10;

        if (taglen < 0 || taglen > len) {

            av_free(dst);

            return;

        }

        if (tag[0] == 'T')

            read_ttag(s, pb, taglen, &chapter->metadata, tag);

        else

            avio_skip(pb, taglen);

        len -= taglen;

    }



    ff_metadata_conv(&chapter->metadata, NULL, ff_id3v2_34_metadata_conv);

    ff_metadata_conv(&chapter->metadata, NULL, ff_id3v2_4_metadata_conv);

    av_free(dst);

}

static void FUNC_0(AVFormatContext *VAR_0, AVIOContext *VAR_1, int VAR_2, char *VAR_3, ID3v2ExtraMeta **VAR_4)

{

    AVRational time_base = {1, 1000};

    uint32_t start, end;

    AVChapter *chapter;

    uint8_t *dst = NULL;

    int VAR_5;

    char VAR_6[5];



    decode_str(VAR_0, VAR_1, 0, &dst, &VAR_2);

    if (VAR_2 < 16)

        return;



    start = avio_rb32(VAR_1);

    end   = avio_rb32(VAR_1);

    avio_skip(VAR_1, 8);



    chapter = avpriv_new_chapter(VAR_0, VAR_0->nb_chapters + 1, time_base, start, end, dst);

    if (!chapter) {

        av_free(dst);

        return;

    }



    VAR_2 -= 16;

    while (VAR_2 > 10) {

        avio_read(VAR_1, VAR_6, 4);

        VAR_6[4] = 0;

        VAR_5 = avio_rb32(VAR_1);

        avio_skip(VAR_1, 2);

        VAR_2 -= 10;

        if (VAR_5 < 0 || VAR_5 > VAR_2) {

            av_free(dst);

            return;

        }

        if (VAR_6[0] == 'T')

            read_ttag(VAR_0, VAR_1, VAR_5, &chapter->metadata, VAR_6);

        else

            avio_skip(VAR_1, VAR_5);

        VAR_2 -= VAR_5;

    }



    ff_metadata_conv(&chapter->metadata, NULL, ff_id3v2_34_metadata_conv);

    ff_metadata_conv(&chapter->metadata, NULL, ff_id3v2_4_metadata_conv);

    av_free(dst);

}

static void FUNC_0(AVFormatContext *VAR_0, AVIOContext *VAR_1, int VAR_2, char *VAR_3, ID3v2ExtraMeta **VAR_4)
{ AVRational time_base = {1, 1000}; uint32_t start, end; AVChapter *chapter; uint8_t *dst = NULL; int VAR_5; char VAR_6[5]; decode_str(VAR_0, VAR_1, 0, &dst, &VAR_2); if (VAR_2 < 16)
return; start = avio_rb32(VAR_1); end   = avio_rb32(VAR_1); avio_skip(VAR_1, 8); chapter = avpriv_new_chapter(VAR_0, VAR_0->nb_chapters + 1, time_base, start, end, dst); if (!chapter) { av_free(dst); return; } VAR_2 -= 16; while (VAR_2 > 10) { avio_read(VAR_1, VAR_6, 4); VAR_6[4] = 0; VAR_5 = avio_rb32(VAR_1); avio_skip(VAR_1, 2); VAR_2 -= 10; if (VAR_5 < 0 || VAR_5 > VAR_2) { av_free(dst); return; } if (VAR_6[0] == 'T')
read_ttag(VAR_0, VAR_1, VAR_5, &chapter->metadata, VAR_6); else
avio_skip(VAR_1, VAR_5); VAR_2 -= VAR_5; } ff_metadata_conv(&chapter->metadata, NULL, ff_id3v2_34_metadata_conv); ff_metadata_conv(&chapter->metadata, NULL, ff_id3v2_4_metadata_conv); av_free(dst); }