diff options
author | Christian Suloway <csuloway@row44.com> | 2014-12-15 18:10:46 -0600 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2014-12-16 03:57:58 +0100 |
commit | 92a596f13bfa9136a58229f84ef8ec50d63ff536 (patch) | |
tree | a9bec92497a9e36db9f23a774e297b92c8630202 | |
parent | 402a61c9197b6d1199e3f12c41a99924b5811cfe (diff) | |
download | ffmpeg-92a596f13bfa9136a58229f84ef8ec50d63ff536.tar.gz |
avformat/hlsenc: fix hls_write_trailer() on hls_start() failure
Close segment I/O context and append segment in hls_write_trailer() only
when segment I/O context is allocated.
Signed-off-by: Christian Suloway <csuloway@globaleagleent.com>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r-- | libavformat/hlsenc.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/libavformat/hlsenc.c b/libavformat/hlsenc.c index 79f3a2311d..7645065bc2 100644 --- a/libavformat/hlsenc.c +++ b/libavformat/hlsenc.c @@ -449,7 +449,7 @@ static int hls_write_packet(AVFormatContext *s, AVPacket *pkt) av_opt_set(hls->avf->priv_data, "mpegts_flags", "resend_headers", 0); hls->number++; } else { - avio_close(oc->pb); + avio_closep(&oc->pb); ret = hls_start(s); } @@ -474,10 +474,12 @@ static int hls_write_trailer(struct AVFormatContext *s) AVFormatContext *oc = hls->avf; av_write_trailer(oc); - hls->size = avio_tell(hls->avf->pb) - hls->start_pos; - avio_closep(&oc->pb); + if (oc->pb) { + hls->size = avio_tell(hls->avf->pb) - hls->start_pos; + avio_closep(&oc->pb); + hls_append_segment(hls, hls->duration, hls->start_pos, hls->size); + } av_free(hls->basename); - hls_append_segment(hls, hls->duration, hls->start_pos, hls->size); avformat_free_context(oc); hls->avf = NULL; hls_window(s, 1); |