movenc: Adjust edit lists to trim out parts of tracks with negative pts
authorMichael Niedermayer <michaelni@gmx.at>
Sat, 29 Sep 2012 04:31:18 +0000 (06:31 +0200)
committerMartin Storsjö <martin@martin.st>
Sun, 12 Oct 2014 14:45:55 +0000 (17:45 +0300)
This makes sure that audio preroll for e.g. AAC is signaled correctly.

Previously we only wrote the edit list correctly if we had negative
dts but started with pts == 0 (e.g. for video with B-frames).

Signed-off-by: Martin Storsjö <martin@martin.st>
libavformat/movenc.c

index 6c95b4b..4017a56 100644 (file)
@@ -1628,6 +1628,13 @@ static int mov_write_edts_tag(AVIOContext *pb, MOVTrack *track)
             avio_wb32(pb, -1);
         }
         avio_wb32(pb, 0x00010000);
+    } else {
+        /* Avoid accidentally ending up with start_ct = -1 which has got a
+         * special meaning. Normally start_ct should end up positive or zero
+         * here, but use FFMIN in case dts is a a small positive integer
+         * rounded to 0 when represented in MOV_TIMESCALE units. */
+        start_ct  = -FFMIN(track->cluster[0].dts, 0);
+        duration += delay;
     }
 
     /* duration */