From 071f47649ce39897f18ce034dd428067f29d9b66 Mon Sep 17 00:00:00 2001 From: Steven Liu Date: Mon, 4 Dec 2017 12:03:37 +0800 Subject: [PATCH] avformat/hlsplaylist: add int type of API ff_hls_write_file_entry Signed-off-by: Steven Liu --- libavformat/dashenc.c | 6 +++++- libavformat/hlsenc.c | 12 ++++++++---- libavformat/hlsplaylist.c | 6 ++++-- libavformat/hlsplaylist.h | 2 +- 4 files changed, 18 insertions(+), 8 deletions(-) diff --git a/libavformat/dashenc.c b/libavformat/dashenc.c index 1783675d00f..22ef3103dce 100644 --- a/libavformat/dashenc.c +++ b/libavformat/dashenc.c @@ -342,6 +342,7 @@ static void output_segment_list(OutputStream *os, AVIOContext *out, DASHContext AVIOContext *out_hls = NULL; AVDictionary *http_opts = NULL; int target_duration = 0; + int ret = 0; const char *proto = avio_find_protocol_name(c->dirname); int use_rename = proto && !strcmp(proto, "file"); @@ -368,11 +369,14 @@ static void output_segment_list(OutputStream *os, AVIOContext *out, DASHContext for (i = start_index; i < os->nb_segments; i++) { Segment *seg = os->segments[i]; - ff_hls_write_file_entry(out_hls, 0, c->single_file, + ret = ff_hls_write_file_entry(out_hls, 0, c->single_file, (double) seg->duration / timescale, 0, seg->range_length, seg->start_pos, NULL, c->single_file ? os->initfile : seg->file, NULL); + if (ret < 0) { + av_log(os->ctx, AV_LOG_WARNING, "ff_hls_write_file_entry get error\n"); + } } if (final) diff --git a/libavformat/hlsenc.c b/libavformat/hlsenc.c index dc8bf48791f..aeeed5bcd22 100644 --- a/libavformat/hlsenc.c +++ b/libavformat/hlsenc.c @@ -1236,11 +1236,13 @@ static int hls_window(AVFormatContext *s, int last, VariantStream *vs) hls->flags & HLS_SINGLE_FILE, en->size, en->pos); } - ff_hls_write_file_entry(out, en->discont, byterange_mode, + ret = ff_hls_write_file_entry(out, en->discont, byterange_mode, en->duration, hls->flags & HLS_ROUND_DURATIONS, en->size, en->pos, vs->baseurl, en->filename, prog_date_time_p); - + if (ret < 0) { + av_log(s, AV_LOG_WARNING, "ff_hls_write_file_entry get error\n"); + } } if (last && (hls->flags & HLS_OMIT_ENDLIST)==0) @@ -1251,11 +1253,13 @@ static int hls_window(AVFormatContext *s, int last, VariantStream *vs) goto fail; ff_hls_write_playlist_header(sub_out, hls->version, hls->allowcache, target_duration, sequence, PLAYLIST_TYPE_NONE); - for (en = vs->segments; en; en = en->next) { - ff_hls_write_file_entry(sub_out, 0, byterange_mode, + ret = ff_hls_write_file_entry(sub_out, 0, byterange_mode, en->duration, 0, en->size, en->pos, vs->baseurl, en->sub_filename, NULL); + if (ret < 0) { + av_log(s, AV_LOG_WARNING, "ff_hls_write_file_entry get error\n"); + } } if (last) diff --git a/libavformat/hlsplaylist.c b/libavformat/hlsplaylist.c index 235e519a9ef..96a8afbe1d8 100644 --- a/libavformat/hlsplaylist.c +++ b/libavformat/hlsplaylist.c @@ -82,14 +82,14 @@ void ff_hls_write_init_file(AVIOContext *out, char *filename, avio_printf(out, "\n"); } -void ff_hls_write_file_entry(AVIOContext *out, int insert_discont, +int ff_hls_write_file_entry(AVIOContext *out, int insert_discont, int byterange_mode, double duration, int round_duration, int64_t size, int64_t pos, //Used only if HLS_SINGLE_FILE flag is set char *baseurl, //Ignored if NULL char *filename, double *prog_date_time) { if (!out || !filename) - return; + return AVERROR(EINVAL); if (insert_discont) { avio_printf(out, "#EXT-X-DISCONTINUITY\n"); @@ -128,6 +128,8 @@ void ff_hls_write_file_entry(AVIOContext *out, int insert_discont, if (baseurl) avio_printf(out, "%s", baseurl); avio_printf(out, "%s\n", filename); + + return 0; } void ff_hls_write_end_list (AVIOContext *out) { diff --git a/libavformat/hlsplaylist.h b/libavformat/hlsplaylist.h index 4cbc8cacc91..48d71b7c776 100644 --- a/libavformat/hlsplaylist.h +++ b/libavformat/hlsplaylist.h @@ -49,7 +49,7 @@ void ff_hls_write_playlist_header(AVIOContext *out, int version, int allowcache, uint32_t playlist_type); void ff_hls_write_init_file(AVIOContext *out, char *filename, int byterange_mode, int64_t size, int64_t pos); -void ff_hls_write_file_entry(AVIOContext *out, int insert_discont, +int ff_hls_write_file_entry(AVIOContext *out, int insert_discont, int byterange_mode, double duration, int round_duration, int64_t size, int64_t pos, //Used only if HLS_SINGLE_FILE flag is set -- 2.39.2