|
|
|
@@ -2168,22 +2168,23 @@ enum CodecID av_codec_get_id(const AVCodecTag * const *tags, unsigned int tag) |
|
|
|
|
|
|
|
static void compute_chapters_end(AVFormatContext *s) |
|
|
|
{ |
|
|
|
unsigned int i; |
|
|
|
unsigned int i, j; |
|
|
|
int64_t max_time = s->duration + (s->start_time == AV_NOPTS_VALUE) ? 0 : s->start_time; |
|
|
|
|
|
|
|
for (i=0; i+1<s->nb_chapters; i++) |
|
|
|
for (i = 0; i < s->nb_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; |
|
|
|
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; |
|
|
|
} |
|
|
|
|
|
|
|
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); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
static int get_std_framerate(int i){ |
|
|
|
|