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>
This commit is contained in:
Christian Suloway 2014-12-15 18:10:46 -06:00 committed by Michael Niedermayer
parent 402a61c919
commit 92a596f13b
1 changed files with 6 additions and 4 deletions

View File

@ -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); av_opt_set(hls->avf->priv_data, "mpegts_flags", "resend_headers", 0);
hls->number++; hls->number++;
} else { } else {
avio_close(oc->pb); avio_closep(&oc->pb);
ret = hls_start(s); ret = hls_start(s);
} }
@ -474,10 +474,12 @@ static int hls_write_trailer(struct AVFormatContext *s)
AVFormatContext *oc = hls->avf; AVFormatContext *oc = hls->avf;
av_write_trailer(oc); av_write_trailer(oc);
hls->size = avio_tell(hls->avf->pb) - hls->start_pos; if (oc->pb) {
avio_closep(&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); av_free(hls->basename);
hls_append_segment(hls, hls->duration, hls->start_pos, hls->size);
avformat_free_context(oc); avformat_free_context(oc);
hls->avf = NULL; hls->avf = NULL;
hls_window(s, 1); hls_window(s, 1);