aboutsummaryrefslogtreecommitdiffstats
path: root/libavformat
diff options
context:
space:
mode:
authorMichael Niedermayer <michael@niedermayer.cc>2016-01-21 13:07:07 +0100
committerMichael Niedermayer <michael@niedermayer.cc>2016-01-21 13:16:24 +0100
commit56c182c4d716b8b72156ff57a0c8d72087db8549 (patch)
tree028eb924c6a74ded16f572cbfefd1322c5236607 /libavformat
parentadc7d2a4ce8ff09431d22441b1a41f1cc9dff0e4 (diff)
downloadffmpeg-56c182c4d716b8b72156ff57a0c8d72087db8549.tar.gz
avformat/nutenc: implement deinit()
Should prevent some leaks if header writing fails Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
Diffstat (limited to 'libavformat')
-rw-r--r--libavformat/nut.c6
-rw-r--r--libavformat/nutenc.c18
2 files changed, 17 insertions, 7 deletions
diff --git a/libavformat/nut.c b/libavformat/nut.c
index 30989a4c96..7d5f1ba56d 100644
--- a/libavformat/nut.c
+++ b/libavformat/nut.c
@@ -288,8 +288,10 @@ static int enu_free(void *opaque, void *elem)
void ff_nut_free_sp(NUTContext *nut)
{
- av_tree_enumerate(nut->syncpoints, NULL, NULL, enu_free);
- av_tree_destroy(nut->syncpoints);
+ if (nut->syncpoints) {
+ av_tree_enumerate(nut->syncpoints, NULL, NULL, enu_free);
+ av_tree_destroy(nut->syncpoints);
+ }
}
const Dispositions ff_nut_dispositions[] = {
diff --git a/libavformat/nutenc.c b/libavformat/nutenc.c
index ae097b3edf..b6582efb4c 100644
--- a/libavformat/nutenc.c
+++ b/libavformat/nutenc.c
@@ -1174,7 +1174,7 @@ static int nut_write_trailer(AVFormatContext *s)
{
NUTContext *nut = s->priv_data;
AVIOContext *bc = s->pb, *dyn_bc;
- int i, ret;
+ int ret;
while (nut->header_count < 3)
write_headers(s, bc);
@@ -1186,15 +1186,22 @@ static int nut_write_trailer(AVFormatContext *s)
put_packet(nut, bc, dyn_bc, 1, INDEX_STARTCODE);
}
+ return 0;
+}
+
+static void nut_write_deinit(AVFormatContext *s)
+{
+ NUTContext *nut = s->priv_data;
+ int i;
+
ff_nut_free_sp(nut);
- for (i=0; i<s->nb_streams; i++)
- av_freep(&nut->stream[i].keyframe_pts);
+ if (nut->stream)
+ for (i=0; i<s->nb_streams; i++)
+ av_freep(&nut->stream[i].keyframe_pts);
av_freep(&nut->stream);
av_freep(&nut->chapter);
av_freep(&nut->time_base);
-
- return 0;
}
#define OFFSET(x) offsetof(NUTContext, x)
@@ -1227,6 +1234,7 @@ AVOutputFormat ff_nut_muxer = {
.write_header = nut_write_header,
.write_packet = nut_write_packet,
.write_trailer = nut_write_trailer,
+ .deinit = nut_write_deinit,
.flags = AVFMT_GLOBALHEADER | AVFMT_VARIABLE_FPS,
.codec_tag = ff_nut_codec_tags,
.priv_class = &class,