[FFmpeg-cvslog] lavf/mov: ignore ctts entries that do not apply to a least one sample
Matthieu Bouron
git at videolan.org
Mon Jun 20 15:44:03 CEST 2016
ffmpeg | branch: master | Matthieu Bouron <matthieu.bouron at stupeflix.com> | Thu Jun 16 13:16:52 2016 +0200| [acfab2dce6d30ab30b953d10e2e0097d8f8cb29f] | committer: Matthieu Bouron
lavf/mov: ignore ctts entries that do not apply to a least one sample
Fixes packet pts of samples which contain ctts entries with count <= 0.
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=acfab2dce6d30ab30b953d10e2e0097d8f8cb29f
---
libavformat/mov.c | 16 ++++++++++++----
1 file changed, 12 insertions(+), 4 deletions(-)
diff --git a/libavformat/mov.c b/libavformat/mov.c
index 57a0354..3d59c0f 100644
--- a/libavformat/mov.c
+++ b/libavformat/mov.c
@@ -2574,7 +2574,7 @@ static int mov_read_ctts(MOVContext *c, AVIOContext *pb, MOVAtom atom)
{
AVStream *st;
MOVStreamContext *sc;
- unsigned int i, entries;
+ unsigned int i, entries, ctts_count = 0;
if (c->fc->nb_streams < 1)
return 0;
@@ -2600,8 +2600,16 @@ static int mov_read_ctts(MOVContext *c, AVIOContext *pb, MOVAtom atom)
int count =avio_rb32(pb);
int duration =avio_rb32(pb);
- sc->ctts_data[i].count = count;
- sc->ctts_data[i].duration= duration;
+ if (count <= 0) {
+ av_log(c->fc, AV_LOG_TRACE,
+ "ignoring CTTS entry with count=%d duration=%d\n",
+ count, duration);
+ continue;
+ }
+
+ sc->ctts_data[ctts_count].count = count;
+ sc->ctts_data[ctts_count].duration = duration;
+ ctts_count++;
av_log(c->fc, AV_LOG_TRACE, "count=%d, duration=%d\n",
count, duration);
@@ -2617,7 +2625,7 @@ static int mov_read_ctts(MOVContext *c, AVIOContext *pb, MOVAtom atom)
mov_update_dts_shift(sc, duration);
}
- sc->ctts_count = i;
+ sc->ctts_count = ctts_count;
if (pb->eof_reached)
return AVERROR_EOF;
More information about the ffmpeg-cvslog
mailing list