diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2011-04-02 01:51:44 +0200 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2011-04-02 01:54:27 +0200 |
commit | 4defa68fe25eae4d7c27341e3b35811c047dcd3f (patch) | |
tree | 9d4d37343ec4c99801c1b76b813b0a5b2b04576b /libavformat/utils.c | |
parent | a2f5e14a867768019b49b830e29801f1bfb2abb7 (diff) | |
parent | aa05f2126e18d23432bde77e6f44e41691472fef (diff) | |
download | ffmpeg-4defa68fe25eae4d7c27341e3b35811c047dcd3f.tar.gz |
Merge remote branch 'qatar/master'
* qatar/master:
ac3enc: ARM optimised ac3_compute_matissa_size
ac3: armv6 optimised bit_alloc_calc_bap
fate: simplify fft test rules
avio: document avio_alloc_context.
lavf: make compute_chapters_end less picky.
sierravmd: fix Indeo3 videos
FFT: simplify fft8()
fate: add fixed-point fft/mdct tests
Fixed-point support in fft-test
ape: check that number of seektable entries is equal to number of frames
Merged-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavformat/utils.c')
-rw-r--r-- | libavformat/utils.c | 27 |
1 files changed, 14 insertions, 13 deletions
diff --git a/libavformat/utils.c b/libavformat/utils.c index 9399bcbce5..61226f73da 100644 --- a/libavformat/utils.c +++ b/libavformat/utils.c @@ -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){ |