Mercurial > libavformat.hg
changeset 4742:0496cbd94374 libavformat
Extend mov edit list support to work for a first padding entry with
time == -1 and duration. Complicated since time is relative to stream,
duration relative to container time base.
author | reimar |
---|---|
date | Mon, 16 Mar 2009 20:49:52 +0000 |
parents | 4f53f8346307 |
children | 5c65daa1c678 |
files | mov.c |
diffstat | 1 files changed, 6 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/mov.c Mon Mar 16 20:22:39 2009 +0000 +++ b/mov.c Mon Mar 16 20:49:52 2009 +0000 @@ -1278,8 +1278,9 @@ /* adjust first dts according to edit list */ if (sc->time_offset) { + int rescaled = sc->time_offset < 0 ? av_rescale(sc->time_offset, sc->time_scale, mov->time_scale) : sc->time_offset; assert(sc->time_offset % sc->time_rate == 0); - current_dts = - (sc->time_offset / sc->time_rate); + current_dts = - (rescaled / sc->time_rate); } /* only use old uncompressed audio chunk demuxing when stts specifies it */ @@ -1774,12 +1775,12 @@ for(i=0; i<edit_count; i++){ int time; - get_be32(pb); /* Track duration */ + int duration = get_be32(pb); /* Track duration */ time = get_be32(pb); /* Media time */ get_be32(pb); /* Media rate */ - if (i == 0 && time != -1) { - sc->time_offset = time; - sc->time_rate = av_gcd(sc->time_rate, time); + if (i == 0 && time >= -1) { + sc->time_offset = time != -1 ? time : -duration; + sc->time_rate = av_gcd(sc->time_rate, FFABS(sc->time_offset)); } }