[FFmpeg-cvslog] lavc: clear AVBuffers on decoded frames if refcounted_frames is not set

Anton Khirnov git at videolan.org
Wed May 1 10:11:24 CEST 2013


ffmpeg | branch: master | Anton Khirnov <anton at khirnov.net> | Wed Apr 24 10:19:54 2013 +0200| [e036bb7899d0faca9159206be9bf5552e76e7633] | committer: Anton Khirnov

lavc: clear AVBuffers on decoded frames if refcounted_frames is not set

Otherwise some code might mistakenly think it is allowed to unref those
buffers, which would lead to double unref.

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

 libavcodec/utils.c |    4 ++++
 1 file changed, 4 insertions(+)

diff --git a/libavcodec/utils.c b/libavcodec/utils.c
index 32ca703..67e5165 100644
--- a/libavcodec/utils.c
+++ b/libavcodec/utils.c
@@ -1407,6 +1407,7 @@ int attribute_align_arg avcodec_decode_video2(AVCodecContext *avctx, AVFrame *pi
             if (!avctx->refcounted_frames) {
                 avci->to_free = *picture;
                 avci->to_free.extended_data = avci->to_free.data;
+                memset(picture->buf, 0, sizeof(picture->buf));
             }
 
             avctx->frame_number++;
@@ -1457,6 +1458,9 @@ int attribute_align_arg avcodec_decode_audio4(AVCodecContext *avctx,
             if (!avctx->refcounted_frames) {
                 avci->to_free = *frame;
                 avci->to_free.extended_data = avci->to_free.data;
+                memset(frame->buf, 0, sizeof(frame->buf));
+                frame->extended_buf    = NULL;
+                frame->nb_extended_buf = 0;
             }
         }
 



More information about the ffmpeg-cvslog mailing list