[FFmpeg-cvslog] smvjpeg: use refcounted frames to avoid mem leaks

Hendrik Leppkes git at videolan.org
Sat Jun 22 12:07:39 CEST 2013


ffmpeg | branch: master | Hendrik Leppkes <h.leppkes at gmail.com> | Fri Jun 21 21:56:18 2013 +0200| [d76fff7df72dc458a331709707fc5292ac609aa7] | committer: Michael Niedermayer

smvjpeg: use refcounted frames to avoid mem leaks

Signed-off-by: Michael Niedermayer <michaelni at gmx.at>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=d76fff7df72dc458a331709707fc5292ac609aa7
---

 libavcodec/smvjpegdec.c |    7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/libavcodec/smvjpegdec.c b/libavcodec/smvjpegdec.c
index d815ef1..d7178d7 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);



More information about the ffmpeg-cvslog mailing list