From f0f2218dce194ff50d1fe7ed39011595660143ad Mon Sep 17 00:00:00 2001 From: Baptiste Coudurier Date: Sun, 15 Mar 2009 07:21:22 +0000 Subject: [PATCH] do not modify sample_count, check against index entries Originally committed as revision 17972 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavformat/mov.c | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/libavformat/mov.c b/libavformat/mov.c index b37678a..112d8dd 100644 --- a/libavformat/mov.c +++ b/libavformat/mov.c @@ -1170,7 +1170,7 @@ static void mov_build_index(MOVContext *mov, AVStream *st) for (j = 0; j < sc->stsc_data[stsc_index].count; j++) { if (current_sample >= sc->sample_count) { av_log(mov->fc, AV_LOG_ERROR, "wrong sample count\n"); - goto out; + return; } keyframe = !sc->keyframe_count || current_sample+key_off == sc->keyframes[stss_index]; if (keyframe) { @@ -1245,9 +1245,6 @@ static void mov_build_index(MOVContext *mov, AVStream *st) } } } - out: - /* adjust sample count to avindex entries */ - sc->sample_count = st->nb_index_entries; } static int mov_read_trak(MOVContext *c, ByteIOContext *pb, MOVAtom atom) @@ -1273,7 +1270,6 @@ static int mov_read_trak(MOVContext *c, ByteIOContext *pb, MOVAtom atom) (!sc->sample_size && !sc->sample_count))){ av_log(c->fc, AV_LOG_ERROR, "stream %d, missing mandatory atoms, broken header\n", st->index); - sc->sample_count = 0; //ignore track return 0; } if(!sc->time_rate) @@ -1608,7 +1604,6 @@ static int mov_read_trun(MOVContext *c, ByteIOContext *pb, MOVAtom atom) offset += sample_size; } frag->moof_offset = offset; - sc->sample_count = st->nb_index_entries; st->duration = dts; return 0; } @@ -1865,7 +1860,7 @@ static int mov_read_packet(AVFormatContext *s, AVPacket *pkt) for (i = 0; i < s->nb_streams; i++) { AVStream *st = s->streams[i]; MOVStreamContext *msc = st->priv_data; - if (st->discard != AVDISCARD_ALL && msc->pb && msc->current_sample < msc->sample_count) { + if (st->discard != AVDISCARD_ALL && msc->pb && msc->current_sample < st->nb_index_entries) { AVIndexEntry *current_sample = &st->index_entries[msc->current_sample]; int64_t dts = av_rescale(current_sample->timestamp * (int64_t)msc->time_rate, AV_TIME_BASE, msc->time_scale); @@ -1925,7 +1920,7 @@ static int mov_read_packet(AVFormatContext *s, AVPacket *pkt) pkt->dts = AV_NOPTS_VALUE; } else { AVStream *st = s->streams[sc->ffindex]; - int64_t next_dts = (sc->current_sample < sc->sample_count) ? + int64_t next_dts = (sc->current_sample < st->nb_index_entries) ? st->index_entries[sc->current_sample].timestamp : st->duration; pkt->duration = next_dts - pkt->dts; pkt->pts = pkt->dts; -- 2.7.4