Unified · Split
| @@ -2618,6 +2618,36 @@ static int mov_read_trex(MOVContext *c, AVIOContext *pb, MOVAtom atom) · 2617 unmodified lines | ||
| 2618 | 2618 | return 0; |
| 2619 | 2619 | } |
| 2620 | 2620 | |
| 2621 | +static int mov_read_tfdt(MOVContext *c, AVIOContext *pb, MOVAtom atom) | |
| 2622 | +{ | |
| 2623 | + MOVFragment *frag = &c->fragment; | |
| 2624 | + AVStream *st = NULL; | |
| 2625 | + MOVStreamContext *sc; | |
| 2626 | + int version, i; | |
| 2627 | + | |
| 2628 | + for (i = 0; i < c->fc->nb_streams; i++) { | |
| 2629 | + if (c->fc->streams[i]->id == frag->track_id) { | |
| 2630 | + st = c->fc->streams[i]; | |
| 2631 | + break; | |
| 2632 | + } | |
| 2633 | + } | |
| 2634 | + if (!st) { | |
| 2635 | + av_log(c->fc, AV_LOG_ERROR, "could not find corresponding track id %d\n", frag->track_id); | |
| 2636 | + return AVERROR_INVALIDDATA; | |
| 2637 | + } | |
| 2638 | + sc = st->priv_data; | |
| 2639 | + if (sc->pseudo_stream_id + 1 != frag->stsd_id) | |
| 2640 | + return 0; | |
| 2641 | + version = avio_r8(pb); | |
| 2642 | + avio_rb24(pb); /* flags */ | |
| 2643 | + if (version) { | |
| 2644 | + sc->track_end = avio_rb64(pb); | |
| 2645 | + } else { | |
| 2646 | + sc->track_end = avio_rb32(pb); | |
| 2647 | + } | |
| 2648 | + return 0; | |
| 2649 | +} | |
| 2650 | + | |
| 2621 | 2651 | static int mov_read_trun(MOVContext *c, AVIOContext *pb, MOVAtom atom) |
| 2622 | 2652 | { |
| 2623 | 2653 | MOVFragment *frag = &c->fragment; |
| @@ -2870,6 +2900,7 @@ static const MOVParseTableEntry mov_default_parse_table[] = { · 246 unmodified lines | ||
| 2870 | 2900 | { MKTAG('s','t','t','s'), mov_read_stts }, |
| 2871 | 2901 | { MKTAG('s','t','z','2'), mov_read_stsz }, /* compact sample size */ |
| 2872 | 2902 | { MKTAG('t','k','h','d'), mov_read_tkhd }, /* track header */ |
| 2903 | +{ MKTAG('t','f','d','t'), mov_read_tfdt }, | |
| 2873 | 2904 | { MKTAG('t','f','h','d'), mov_read_tfhd }, /* track fragment header */ |
| 2874 | 2905 | { MKTAG('t','r','a','k'), mov_read_trak }, |
| 2875 | 2906 | { MKTAG('t','r','a','f'), mov_read_default }, |