From beff8fa729ae3a849202b3084a730b9a6cac30df Mon Sep 17 00:00:00 2001 From: PulkoMandy Date: Thu, 22 Dec 2022 15:34:04 +0100 Subject: [PATCH] ffmpeg: leak when re-allocating ffmpeg context The _Setup method can be called several times if the parameters are changed (for example when calling SetQuality). But it always allocated a new context without freeinthe previous one, resulting in a leak. Part of #9458, it fixes the largest leak there (10K bytes for each loop of the provided test) but there are other leaks left as well, some of which apparently need an update to a newer ffmpeg version removing some deprecated fields. Change-Id: Iad119dbda9cff1ce023b602a1978b100a1263f7d Reviewed-on: https://review.haiku-os.org/c/haiku/+/5953 Reviewed-by: waddlesplash --- src/add-ons/media/plugins/ffmpeg/AVCodecEncoder.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/add-ons/media/plugins/ffmpeg/AVCodecEncoder.cpp b/src/add-ons/media/plugins/ffmpeg/AVCodecEncoder.cpp index a432daf566..93bde34020 100644 --- a/src/add-ons/media/plugins/ffmpeg/AVCodecEncoder.cpp +++ b/src/add-ons/media/plugins/ffmpeg/AVCodecEncoder.cpp @@ -271,6 +271,11 @@ AVCodecEncoder::_Setup() int rawBitRate; + if (fCodecContext != NULL) { + avcodec_close(fCodecContext); + avcodec_free_context(&fCodecContext); + } + fCodecContext = avcodec_alloc_context3(fCodec); if (fCodecContext == NULL) return B_NO_INIT;