Commit 1fedd4b5 authored by reimar's avatar reimar

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.


git-svn-id: file:///var/local/repositories/ffmpeg/trunk@18019 9553f0bf-9b14-0410-a0b8-cfaf0461ba5b
parent 2587cee6
...@@ -1278,8 +1278,9 @@ static void mov_build_index(MOVContext *mov, AVStream *st) ...@@ -1278,8 +1278,9 @@ static void mov_build_index(MOVContext *mov, AVStream *st)
/* adjust first dts according to edit list */ /* adjust first dts according to edit list */
if (sc->time_offset) { 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); 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 */ /* only use old uncompressed audio chunk demuxing when stts specifies it */
...@@ -1774,12 +1775,12 @@ static int mov_read_elst(MOVContext *c, ByteIOContext *pb, MOVAtom atom) ...@@ -1774,12 +1775,12 @@ static int mov_read_elst(MOVContext *c, ByteIOContext *pb, MOVAtom atom)
for(i=0; i<edit_count; i++){ for(i=0; i<edit_count; i++){
int time; int time;
get_be32(pb); /* Track duration */ int duration = get_be32(pb); /* Track duration */
time = get_be32(pb); /* Media time */ time = get_be32(pb); /* Media time */
get_be32(pb); /* Media rate */ get_be32(pb); /* Media rate */
if (i == 0 && time != -1) { if (i == 0 && time >= -1) {
sc->time_offset = time; sc->time_offset = time != -1 ? time : -duration;
sc->time_rate = av_gcd(sc->time_rate, time); sc->time_rate = av_gcd(sc->time_rate, FFABS(sc->time_offset));
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment