diff options
author | Andreas Rheinhardt <andreas.rheinhardt@outlook.com> | 2021-09-22 01:52:23 +0200 |
---|---|---|
committer | Andreas Rheinhardt <andreas.rheinhardt@outlook.com> | 2021-09-27 06:04:39 +0200 |
commit | dd1975b0bbcfdd7d02808b3deac43f8f4073731d (patch) | |
tree | c7823d0f87afed56e77e649b9414aa37d72ac3e9 | |
parent | 4e135347a7c2defaa62e27f7d0533d8963f6d539 (diff) | |
download | ffmpeg-dd1975b0bbcfdd7d02808b3deac43f8f4073731d.tar.gz |
avformat/chromaprint: Add deinit function
Fixes memleaks in case the trailer is never written.
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
-rw-r--r-- | libavformat/chromaprint.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/libavformat/chromaprint.c b/libavformat/chromaprint.c index 399de725d3..b7a943e126 100644 --- a/libavformat/chromaprint.c +++ b/libavformat/chromaprint.c @@ -47,8 +47,10 @@ typedef struct ChromaprintMuxContext { #endif } ChromaprintMuxContext; -static void cleanup(ChromaprintMuxContext *cpr) +static void deinit(AVFormatContext *s) { + ChromaprintMuxContext *const cpr = s->priv_data; + if (cpr->ctx) { ff_lock_avformat(); chromaprint_free(cpr->ctx); @@ -107,7 +109,6 @@ static int write_header(AVFormatContext *s) return 0; fail: - cleanup(cpr); return AVERROR(EINVAL); } @@ -156,7 +157,6 @@ fail: chromaprint_dealloc(fp); if (enc_fp) chromaprint_dealloc(enc_fp); - cleanup(cpr); return ret; } @@ -187,6 +187,7 @@ const AVOutputFormat ff_chromaprint_muxer = { .write_header = write_header, .write_packet = write_packet, .write_trailer = write_trailer, + .deinit = deinit, .flags = AVFMT_NOTIMESTAMPS, .priv_class = &chromaprint_class, }; |