From d76fff7df72dc458a331709707fc5292ac609aa7 Mon Sep 17 00:00:00 2001 From: Hendrik Leppkes Date: Fri, 21 Jun 2013 21:56:18 +0200 Subject: [PATCH] smvjpeg: use refcounted frames to avoid mem leaks Signed-off-by: Michael Niedermayer --- libavcodec/smvjpegdec.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/libavcodec/smvjpegdec.c b/libavcodec/smvjpegdec.c index d815ef18ca..d7178d77c3 100644 --- a/libavcodec/smvjpegdec.c +++ b/libavcodec/smvjpegdec.c @@ -111,6 +111,7 @@ static av_cold int smvjpeg_decode_init(AVCodecContext *avctx) s->avctx = avcodec_alloc_context3(codec); av_dict_set(&thread_opt, "threads", "1", 0); + s->avctx->refcounted_frames = 1; s->avctx->flags = avctx->flags; s->avctx->idct_algo = avctx->idct_algo; if (ff_codec_open2_recursive(s->avctx, codec, &thread_opt) < 0) { @@ -133,9 +134,10 @@ static int smvjpeg_decode_frame(AVCodecContext *avctx, void *data, int *data_siz cur_frame = avpkt->pts % s->frames_per_jpeg; /* Are we at the start of a block? */ - if (!cur_frame) + if (!cur_frame) { + av_frame_unref(mjpeg_data); ret = avcodec_decode_video2(s->avctx, mjpeg_data, &s->mjpeg_data_size, avpkt); - else if (!s->mjpeg_data_size) + } else if (!s->mjpeg_data_size) return AVERROR(EINVAL); desc = av_pix_fmt_desc_get(s->avctx->pix_fmt); @@ -177,6 +179,7 @@ static av_cold int smvjpeg_decode_end(AVCodecContext *avctx) MJpegDecodeContext *jpg = &s->jpg; jpg->picture_ptr = NULL; + av_frame_free(&s->picture[0]); av_frame_free(&s->picture[1]); ff_codec_close_recursive(s->avctx); av_freep(&s->avctx);