From patchwork Thu Aug 13 02:14:53 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alex Pokotilo X-Patchwork-Id: 21621 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id 79C43449466 for ; Thu, 13 Aug 2020 05:15:35 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 5602268B525; Thu, 13 Aug 2020 05:15:35 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wm1-f50.google.com (mail-wm1-f50.google.com [209.85.128.50]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id B40A468AE26 for ; Thu, 13 Aug 2020 05:15:29 +0300 (EEST) Received: by mail-wm1-f50.google.com with SMTP id 9so3375012wmj.5 for ; Wed, 12 Aug 2020 19:15:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=wmspanel.com; s=google; h=mime-version:from:date:message-id:subject:to; bh=Noglufk2isPzGckStz7+RZJT/Ohv8sQVc4wumLB/EEA=; b=N2JsfaOX27GMlUpV1qu2nOYYx/ajzPebQIJIkLrXEGHkYsKxnFxOZ4fBEZbBwc02qi Yo5UXyPh4g5gvegnev8zCQKoYR2D+5MZo2lzuxuKvqRQGhYHtF9nbx4g5uOHw6iky0ww Aan8YKcdiN6IsqxmmcMqXAXtUgEG5F2bBmANs= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=Noglufk2isPzGckStz7+RZJT/Ohv8sQVc4wumLB/EEA=; b=KyRAXI7PymwGs4mZm0HvdBtj8l81kG2RAoakfOLnv9wjOOiE4tcOmydnffvjSI1SLN ZK8GBE9TnUoLDG3gpDYHZe7PZyfsKw6cPCQvR2JdzotZ0FvfUPH7m6W4CWaR2jORx3w1 LGuPfuM4S0C1o3WDsmt+moQCMcvF1zEnrlG5kcRzdzMaXLaCgvSvbqQbFpo79MTyUROE CohfWNm6HAKrX6gmuP2u898HKu97UPZWH6CUSwaiV9kw7TnGFk0tecnCLTK4sZ0Kg/uL rxGj8NDbN2VIkHcBj2/208vr/REJOQcVr+PXMsHbP9IycE0pzZwkoRFN9huSC5s+ccdj gjoA== X-Gm-Message-State: AOAM531vJMcjuOhsxoBf72E26Av5AyIIxlUpuJjohyp9gzfXOFJmbb7T oSqVhIqFk6zB5aJFzrdBcMVLof2XYWfy3ykwlnUYqXNV X-Google-Smtp-Source: ABdhPJwpQ3dfC8h1OPU0QWK0yyT1LjNxqHxRt8QS0EOlCGzdco6HLh5lsW9XL81HRKi3E3Tak9Pn1up7ITsshSigdZc= X-Received: by 2002:a7b:cc95:: with SMTP id p21mr1981423wma.167.1597284928860; Wed, 12 Aug 2020 19:15:28 -0700 (PDT) MIME-Version: 1.0 From: Alex Pokotilo Date: Thu, 13 Aug 2020 12:14:53 +1000 Message-ID: To: ffmpeg-devel@ffmpeg.org X-Content-Filtered-By: Mailman/MimeDel 2.1.20 Subject: [FFmpeg-devel] [PATCH] fix memory leak in qsvenc.c X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Subject: [PATCH] fix memory leak in qsvenc.c "ff_qsv_enc_close" function called at the end of qsv encoding session and it frees q->async_fifo content content. "bs" item has two linked pointers and they should be freed the same way as in ff_qsv_encode. To reproduce just close h264 encoding session with pending frames --- libavcodec/qsvenc.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/libavcodec/qsvenc.c b/libavcodec/qsvenc.c index 1ed8f5d973..9ea2c7b1b9 100644 --- a/libavcodec/qsvenc.c +++ b/libavcodec/qsvenc.c @@ -1612,6 +1612,10 @@ FF_ENABLE_DEPRECATION_WARNINGS int ff_qsv_enc_close(AVCodecContext *avctx, QSVEncContext *q) { QSVFrame *cur; +#if QSV_VERSION_ATLEAST(1, 26) + mfxExtAVCEncodedFrameInfo *enc_info; + mfxExtBuffer **enc_buf; +#endif if (q->session) MFXVideoENCODE_Close(q->session); @@ -1640,8 +1644,16 @@ int ff_qsv_enc_close(AVCodecContext *avctx, QSVEncContext *q) av_fifo_generic_read(q->async_fifo, &sync, sizeof(sync), NULL); av_fifo_generic_read(q->async_fifo, &bs, sizeof(bs), NULL); - av_freep(&sync); +#if QSV_VERSION_ATLEAST(1, 26) + if (avctx->codec_id == AV_CODEC_ID_H264) { + enc_buf = bs->ExtParam; + enc_info = (mfxExtAVCEncodedFrameInfo *)(*bs->ExtParam); + av_freep(&enc_info); + av_freep(&enc_buf); + } +#endif av_freep(&bs); + av_freep(&sync); av_packet_unref(&pkt); } av_fifo_free(q->async_fifo);