From 1b8870852eda7f88d62b32ead8e67ae51fae444f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Duval?= Date: Tue, 14 Nov 2023 19:22:16 +0100 Subject: [PATCH] ffmpeg: fix leak when decoding audio frames removing the memset in _DecodeSomeAudioFramesIntoEmptyDecodedDataBuffer fixes #18654 also free correctly resources in AVCodecDecoder destructor. Change-Id: I2d6de6b50ba6767f669eb765dad96d28d43100fb Reviewed-on: https://review.haiku-os.org/c/haiku/+/7108 Reviewed-by: Adrien Destugues Tested-by: Commit checker robot --- src/add-ons/media/plugins/ffmpeg/AVCodecDecoder.cpp | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/add-ons/media/plugins/ffmpeg/AVCodecDecoder.cpp b/src/add-ons/media/plugins/ffmpeg/AVCodecDecoder.cpp index 6bfb68d4ed..e1beccc645 100644 --- a/src/add-ons/media/plugins/ffmpeg/AVCodecDecoder.cpp +++ b/src/add-ons/media/plugins/ffmpeg/AVCodecDecoder.cpp @@ -154,12 +154,12 @@ AVCodecDecoder::~AVCodecDecoder() free(fChunkBuffer); free(fDecodedData); - av_free(fPostProcessedDecodedPicture); - av_free(fRawDecodedPicture); + av_frame_free(&fPostProcessedDecodedPicture); + av_frame_free(&fRawDecodedPicture); av_free(fRawDecodedAudio->opaque); - av_free(fRawDecodedAudio); - av_free(fCodecContext); - av_free(fDecodedDataBuffer); + av_frame_free(&fRawDecodedAudio); + avcodec_free_context(&fCodecContext); + av_frame_free(&fDecodedDataBuffer); av_frame_free(&fFilterFrame); avfilter_graph_free(&fFilterGraph); @@ -1123,8 +1123,7 @@ AVCodecDecoder::_DecodeSomeAudioFramesIntoEmptyDecodedDataBuffer() { assert(fDecodedDataBufferSize == 0); - memset(fDecodedDataBuffer, 0, sizeof(AVFrame)); - av_frame_unref(fDecodedDataBuffer); + av_frame_unref(fDecodedDataBuffer); fDecodedDataBufferOffset = 0; int error = avcodec_receive_frame(fCodecContext, fDecodedDataBuffer);