utils: fix avcodec_flush_buffers pre-reference counting compatibility
authorJanne Grunau <janne-libav@jannau.net>
Sat, 15 Jun 2013 19:11:55 +0000 (22:11 +0300)
committerLuca Barbato <lu_zero@gentoo.org>
Sun, 16 Jun 2013 13:10:58 +0000 (15:10 +0200)
The to_free AVframe must be freed just like the other ones.
Indeed, the calling application may expect all frames to be
released.

(This regression caused use-after-free in VLC with hwaccel.)

Signed-off-by: RĂ©mi Denis-Courmont <remi@remlab.net>
Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
libavcodec/utils.c

index accb6b3..3dddafc 100644 (file)
@@ -1804,6 +1804,9 @@ void avcodec_flush_buffers(AVCodecContext *avctx)
         ff_thread_flush(avctx);
     else if (avctx->codec->flush)
         avctx->codec->flush(avctx);
         ff_thread_flush(avctx);
     else if (avctx->codec->flush)
         avctx->codec->flush(avctx);
+
+    if (!avctx->refcounted_frames)
+        av_frame_unref(&avctx->internal->to_free);
 }
 
 int av_get_exact_bits_per_sample(enum AVCodecID codec_id)
 }
 
 int av_get_exact_bits_per_sample(enum AVCodecID codec_id)