static void compute_chapters_end(AVFormatContext *s)

{

    unsigned int i, j;

    int64_t max_time = s->duration +

                       ((s->start_time == AV_NOPTS_VALUE) ? 0 : s->start_time);



    for (i = 0; i < s->nb_chapters; i++)

        if (s->chapters[i]->end == AV_NOPTS_VALUE) {

            AVChapter *ch = s->chapters[i];

            int64_t end = max_time ? av_rescale_q(max_time, AV_TIME_BASE_Q,

                                                  ch->time_base)

                                   : INT64_MAX;



            for (j = 0; j < s->nb_chapters; j++) {

                AVChapter *ch1     = s->chapters[j];

                int64_t next_start = av_rescale_q(ch1->start, ch1->time_base,

                                                  ch->time_base);

                if (j != i && next_start > ch->start && next_start < end)

                    end = next_start;

            }

            ch->end = (end == INT64_MAX) ? ch->start : end;

        }

}
