aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVishwanath Dixit <vdixit@akamai.com>2018-01-02 10:45:28 +0800
committerSteven Liu <lq@chinaffmpeg.org>2018-01-02 10:45:28 +0800
commit26e1efb04f3864b813c74eaf85fbe1ea352bb7f0 (patch)
tree864b3f9412e91ea774a229e93f9548618ef1fe05
parent21b5990da461e4f83cf53994715ed42e22cce9e0 (diff)
downloadffmpeg-26e1efb04f3864b813c74eaf85fbe1ea352bb7f0.tar.gz
avformat/hlsenc: revamped master playlist url creation logic
-rw-r--r--libavformat/hlsenc.c34
1 files changed, 18 insertions, 16 deletions
diff --git a/libavformat/hlsenc.c b/libavformat/hlsenc.c
index e6f3241765..3ea16c6d7d 100644
--- a/libavformat/hlsenc.c
+++ b/libavformat/hlsenc.c
@@ -1689,28 +1689,30 @@ static int update_variant_stream_info(AVFormatContext *s) {
static int update_master_pl_info(AVFormatContext *s) {
HLSContext *hls = s->priv_data;
- int m3u8_name_size, ret;
- char *p;
+ const char *dir;
+ char *fn;
+ int ret = 0;
- m3u8_name_size = strlen(s->filename) + strlen(hls->master_pl_name) + 1;
- hls->master_m3u8_url = av_malloc(m3u8_name_size);
- if (!hls->master_m3u8_url) {
+ fn = av_strdup(s->filename);
+ if (!fn) {
ret = AVERROR(ENOMEM);
- return ret;
+ goto fail;
}
- av_strlcpy(hls->master_m3u8_url, s->filename, m3u8_name_size);
- p = strrchr(hls->master_m3u8_url, '/') ?
- strrchr(hls->master_m3u8_url, '/') :
- strrchr(hls->master_m3u8_url, '\\');
- if (p) {
- *(p + 1) = '\0';
- av_strlcat(hls->master_m3u8_url, hls->master_pl_name, m3u8_name_size);
- } else {
- av_strlcpy(hls->master_m3u8_url, hls->master_pl_name, m3u8_name_size);
+ dir = av_dirname(fn);
+ if (dir && strcmp(dir, "."))
+ hls->master_m3u8_url = av_append_path_component(dir, hls->master_pl_name);
+ else
+ hls->master_m3u8_url = av_strdup(hls->master_pl_name);
+
+ if (!hls->master_m3u8_url) {
+ ret = AVERROR(ENOMEM);
+ goto fail;
}
- return 0;
+fail:
+ av_freep(&fn);
+ return ret;
}
static int hls_write_header(AVFormatContext *s)