# HG changeset patch # User aurel # Date 1211665469 0 # Node ID 13333599b04b0f061084502f9b349386be63cbd5 # Parent 670503410b6ba4b2813e5f0847062b211065d79b compute the end of all chapters when end is not specified in the container diff -r 670503410b6b -r 13333599b04b utils.c --- a/utils.c Sat May 24 12:56:05 2008 +0000 +++ b/utils.c Sat May 24 21:44:29 2008 +0000 @@ -1805,6 +1805,26 @@ return CODEC_ID_NONE; } +static void compute_chapters_end(AVFormatContext *s) +{ + unsigned int i; + + for (i=0; i+1nb_chapters; i++) + if (s->chapters[i]->end == AV_NOPTS_VALUE) { + assert(s->chapters[i]->start <= s->chapters[i+1]->start); + assert(!av_cmp_q(s->chapters[i]->time_base, s->chapters[i+1]->time_base)); + s->chapters[i]->end = s->chapters[i+1]->start; + } + + if (s->nb_chapters && s->chapters[i]->end == AV_NOPTS_VALUE) { + assert(s->start_time != AV_NOPTS_VALUE); + assert(s->duration > 0); + s->chapters[i]->end = av_rescale_q(s->start_time + s->duration, + AV_TIME_BASE_Q, + s->chapters[i]->time_base); + } +} + /* absolute maximum size we read until we abort */ #define MAX_READ_SIZE 5000000 @@ -2075,6 +2095,8 @@ url_fseek(ic->pb, ic->data_offset, SEEK_SET); } + compute_chapters_end(ic); + #if 0 /* correct DTS for B-frame streams with no timestamps */ for(i=0;inb_streams;i++) {