]> git.sesse.net Git - ffmpeg/blobdiff - libavformat/dashenc.c
avformat/dashdec: Fix memleak when resolve_content_path
[ffmpeg] / libavformat / dashenc.c
index 56af9165552bd5c731bf89e8515276dfb5b4a9eb..ae57fd5493cd0ea011fe56127973009345010bae 100644 (file)
@@ -196,6 +196,16 @@ static const char *get_format_str(SegmentType segment_type) {
     return NULL;
 }
 
+static int check_file_extension(const char *filename, const char *extension) {
+    char *dot;
+    if (!filename || !extension)
+        return -1;
+    dot = strrchr(filename, '.');
+    if (dot && !strcmp(dot + 1, extension))
+        return 0;
+    return -1;
+}
+
 static void set_vp9_codec_str(AVFormatContext *s, AVCodecParameters *par,
                               AVRational *frame_rate, char *str, int size) {
     VPCC vpcc;
@@ -858,7 +868,7 @@ static int write_manifest(AVFormatContext *s, int final)
         int max_audio_bitrate = 0;
 
         if (*c->dirname)
-            snprintf(filename_hls, sizeof(filename_hls), "%s/master.m3u8", c->dirname);
+            snprintf(filename_hls, sizeof(filename_hls), "%smaster.m3u8", c->dirname);
         else
             snprintf(filename_hls, sizeof(filename_hls), "master.m3u8");
 
@@ -987,6 +997,17 @@ static int dash_init(AVFormatContext *s)
         c->format_name = get_format_str(c->segment_type);
         if (!c->format_name)
             return AVERROR_MUXER_NOT_FOUND;
+        if (c->segment_type == SEGMENT_TYPE_WEBM) {
+            if ((!c->single_file && check_file_extension(c->init_seg_name, c->format_name) != 0) ||
+                (!c->single_file && check_file_extension(c->media_seg_name, c->format_name) != 0) ||
+                (c->single_file && check_file_extension(c->single_file_name, c->format_name) != 0)) {
+                av_log(s, AV_LOG_WARNING,
+                       "One or many segment file names doesn't end with .webm. "
+                       "Override -init_seg_name and/or -media_seg_name and/or "
+                       "-single_file_name to end with the extension .webm\n");
+            }
+        }
+
         ctx->oformat = av_guess_format(c->format_name, NULL, NULL);
         if (!ctx->oformat)
             return AVERROR_MUXER_NOT_FOUND;