lavf/dashenc: don't call flush_init_segment before avformat_write_header
authorRodger Combs <rodger.combs@gmail.com>
Fri, 27 Apr 2018 00:51:35 +0000 (03:51 +0300)
committerKarthick Jeyapal <kjeyapal@akamai.com>
Thu, 3 May 2018 05:09:39 +0000 (10:39 +0530)
Fixes crash when muxing MKV-in-DASH

libavformat/dashenc.c

index 211ef23..4f8f61b 100644 (file)
@@ -1026,13 +1026,6 @@ static int dash_init(AVFormatContext *s)
 
         av_log(s, AV_LOG_VERBOSE, "Representation %d init segment will be written to: %s\n", i, filename);
 
-        // Flush init segment
-        // except for mp4, since delay_moov is set and the init segment
-        // is then flushed after the first packets
-        if (strcmp(os->format_name, "mp4")) {
-            flush_init_segment(s, os);
-        }
-
         s->streams[i]->time_base = st->time_base;
         // If the muxer wants to shift timestamps, request to have them shifted
         // already before being handed to this muxer, so we don't have mismatches
@@ -1074,6 +1067,13 @@ static int dash_write_header(AVFormatContext *s)
         OutputStream *os = &c->streams[i];
         if ((ret = avformat_write_header(os->ctx, NULL)) < 0)
             return ret;
+
+        // Flush init segment
+        // Only for WebM segment, since for mp4 delay_moov is set and
+        // the init segment is thus flushed after the first packets.
+        if (strcmp(os->format_name, "mp4") &&
+            (ret = flush_init_segment(s, os)) < 0)
+            return ret;
     }
     return ret;
 }