mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-11-21 10:55:51 +02:00
smvjpeg: use refcounted frames to avoid mem leaks
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
parent
1a405c683e
commit
d76fff7df7
@ -111,6 +111,7 @@ static av_cold int smvjpeg_decode_init(AVCodecContext *avctx)
|
|||||||
s->avctx = avcodec_alloc_context3(codec);
|
s->avctx = avcodec_alloc_context3(codec);
|
||||||
|
|
||||||
av_dict_set(&thread_opt, "threads", "1", 0);
|
av_dict_set(&thread_opt, "threads", "1", 0);
|
||||||
|
s->avctx->refcounted_frames = 1;
|
||||||
s->avctx->flags = avctx->flags;
|
s->avctx->flags = avctx->flags;
|
||||||
s->avctx->idct_algo = avctx->idct_algo;
|
s->avctx->idct_algo = avctx->idct_algo;
|
||||||
if (ff_codec_open2_recursive(s->avctx, codec, &thread_opt) < 0) {
|
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;
|
cur_frame = avpkt->pts % s->frames_per_jpeg;
|
||||||
|
|
||||||
/* Are we at the start of a block? */
|
/* 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);
|
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);
|
return AVERROR(EINVAL);
|
||||||
|
|
||||||
desc = av_pix_fmt_desc_get(s->avctx->pix_fmt);
|
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;
|
MJpegDecodeContext *jpg = &s->jpg;
|
||||||
|
|
||||||
jpg->picture_ptr = NULL;
|
jpg->picture_ptr = NULL;
|
||||||
|
av_frame_free(&s->picture[0]);
|
||||||
av_frame_free(&s->picture[1]);
|
av_frame_free(&s->picture[1]);
|
||||||
ff_codec_close_recursive(s->avctx);
|
ff_codec_close_recursive(s->avctx);
|
||||||
av_freep(&s->avctx);
|
av_freep(&s->avctx);
|
||||||
|
Loading…
Reference in New Issue
Block a user