From 5f44f47b7256659b45ae5e3edd558521fbf962e8 Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Sat, 25 May 2013 20:29:17 +0200 Subject: [PATCH] mpegvideo_enc: do not unreference frames before the code is done with them Fixes Ticket2592 Signed-off-by: Michael Niedermayer --- libavcodec/mpegvideo.c | 8 -------- libavcodec/mpegvideo_enc.c | 7 +++++++ 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/libavcodec/mpegvideo.c b/libavcodec/mpegvideo.c index a713099ae9..e76fc34c99 100644 --- a/libavcodec/mpegvideo.c +++ b/libavcodec/mpegvideo.c @@ -1714,7 +1714,6 @@ int ff_MPV_frame_start(MpegEncContext *s, AVCodecContext *avctx) * frame has been coded/decoded. */ void ff_MPV_frame_end(MpegEncContext *s) { - int i; /* redraw edges for the frame if decoding didn't complete */ // just to make sure that all data is rendered. if (CONFIG_MPEG_XVMC_DECODER && s->avctx->xvmc_acceleration) { @@ -1763,13 +1762,6 @@ void ff_MPV_frame_end(MpegEncContext *s) assert(i < MAX_PICTURE_COUNT); #endif - if (s->encoding) { - /* release non-reference frames */ - for (i = 0; i < MAX_PICTURE_COUNT; i++) { - if (!s->picture[i].reference) - ff_mpeg_unref_picture(s, &s->picture[i]); - } - } // clear copies, to avoid confusion #if 0 memset(&s->last_picture, 0, sizeof(Picture)); diff --git a/libavcodec/mpegvideo_enc.c b/libavcodec/mpegvideo_enc.c index 0db2f83d6b..6a0f3b50ce 100644 --- a/libavcodec/mpegvideo_enc.c +++ b/libavcodec/mpegvideo_enc.c @@ -1632,6 +1632,13 @@ vbv_retry: } else { s->frame_bits = 0; } + + /* release non-reference frames */ + for (i = 0; i < MAX_PICTURE_COUNT; i++) { + if (!s->picture[i].reference) + ff_mpeg_unref_picture(s, &s->picture[i]); + } + assert((s->frame_bits & 7) == 0); pkt->size = s->frame_bits / 8;