Merge commit '456e93bfdd4cbc5e995dea415019abd0703d0e16'
authorMichael Niedermayer <michaelni@gmx.at>
Wed, 17 Dec 2014 10:57:35 +0000 (11:57 +0100)
committerMichael Niedermayer <michaelni@gmx.at>
Wed, 17 Dec 2014 11:05:00 +0000 (12:05 +0100)
* commit '456e93bfdd4cbc5e995dea415019abd0703d0e16':
  dashenc: Adjust the start time of a segment to the end of the previous segment

Merged-by: Michael Niedermayer <michaelni@gmx.at>
libavformat/dashenc.c

index ec3ceac9afd1cc075fd92a4a8156686968696031..e11cf69719e8a42bc330dab3017d910d4ae97be7 100644 (file)
@@ -654,6 +654,7 @@ static int dash_write_header(AVFormatContext *s)
 
         set_codec_str(s, os->ctx->streams[0]->codec, os->codec_str, sizeof(os->codec_str));
         os->first_dts = AV_NOPTS_VALUE;
+        os->end_dts = AV_NOPTS_VALUE;
         os->segment_index = 1;
     }
 
@@ -863,8 +864,15 @@ static int dash_write_packet(AVFormatContext *s, AVPacket *pkt)
             return ret;
     }
 
-    if (!os->packets_written)
-        os->start_dts = pkt->dts;
+    if (!os->packets_written) {
+        // If we wrote a previous segment, adjust the start time of the segment
+        // to the end of the previous one (which is the same as the mp4 muxer
+        // does). This avoids gaps in the timeline.
+        if (os->end_dts != AV_NOPTS_VALUE)
+            os->start_dts = os->end_dts;
+        else
+            os->start_dts = pkt->dts;
+    }
     os->end_dts = pkt->dts + pkt->duration;
     os->packets_written++;
     return ff_write_chained(os->ctx, 0, pkt, s, 0);