mov: Handle tfdt atoms

Signed-off-by: Martin Storsjö <martin@martin.st>
pull/89/head
Martin Storsjö 10 years ago
parent c2c22c75cf
commit a74f8121d8
  1. 31
      libavformat/mov.c

@ -2618,6 +2618,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;
@ -2870,6 +2900,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 },

Loading…
Cancel
Save