diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2014-10-14 22:23:01 +0200 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2014-10-14 22:24:12 +0200 |
commit | 5552594a4466c1c9d283cb4943aeea34a12ed969 (patch) | |
tree | 2c8993bc54324e0e266265bb5249b2c9194cefb1 | |
parent | 99c26805e9e853937aa443c5f94303a261adc01d (diff) | |
parent | a74f8121d88e0bdf0d69c22e4b3713032da9300a (diff) | |
download | ffmpeg-5552594a4466c1c9d283cb4943aeea34a12ed969.tar.gz |
Merge commit 'a74f8121d88e0bdf0d69c22e4b3713032da9300a'
* commit 'a74f8121d88e0bdf0d69c22e4b3713032da9300a':
mov: Handle tfdt atoms
Merged-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r-- | libavformat/mov.c | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/libavformat/mov.c b/libavformat/mov.c index f7b10ecfb2..7393cb7c6f 100644 --- a/libavformat/mov.c +++ b/libavformat/mov.c @@ -2918,6 +2918,36 @@ static int mov_read_trex(MOVContext *c, AVIOContext *pb, MOVAtom atom) return 0; } +static int mov_read_tfdt(MOVContext *c, AVIOContext *pb, MOVAtom atom) +{ + MOVFragment *frag = &c->fragment; + AVStream *st = NULL; + MOVStreamContext *sc; + int version, i; + + for (i = 0; i < c->fc->nb_streams; i++) { + if (c->fc->streams[i]->id == frag->track_id) { + st = c->fc->streams[i]; + break; + } + } + if (!st) { + av_log(c->fc, AV_LOG_ERROR, "could not find corresponding track id %d\n", frag->track_id); + return AVERROR_INVALIDDATA; + } + sc = st->priv_data; + if (sc->pseudo_stream_id + 1 != frag->stsd_id) + return 0; + version = avio_r8(pb); + avio_rb24(pb); /* flags */ + if (version) { + sc->track_end = avio_rb64(pb); + } else { + sc->track_end = avio_rb32(pb); + } + return 0; +} + static int mov_read_trun(MOVContext *c, AVIOContext *pb, MOVAtom atom) { MOVFragment *frag = &c->fragment; @@ -3285,6 +3315,7 @@ static const MOVParseTableEntry mov_default_parse_table[] = { { MKTAG('s','t','t','s'), mov_read_stts }, { MKTAG('s','t','z','2'), mov_read_stsz }, /* compact sample size */ { MKTAG('t','k','h','d'), mov_read_tkhd }, /* track header */ +{ MKTAG('t','f','d','t'), mov_read_tfdt }, { MKTAG('t','f','h','d'), mov_read_tfhd }, /* track fragment header */ { MKTAG('t','r','a','k'), mov_read_trak }, { MKTAG('t','r','a','f'), mov_read_default }, |