[FFmpeg-cvslog] vf_drawtext: don't give up its own reference to the input buffer.

Anton Khirnov git at videolan.org
Sat Jul 21 22:32:07 CEST 2012


ffmpeg | branch: master | Anton Khirnov <anton at khirnov.net> | Sun Jul  8 04:20:22 2012 +0200| [7155763b78fcc1f158e02f4d44d251a1e597f0cc] | committer: Anton Khirnov

vf_drawtext: don't give up its own reference to the input buffer.

Directly forwarding the input buffer to the next filter means that
drawtext no longer owns any references to it and thus shouldn't refer to
it in any way.

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

 libavfilter/vf_drawtext.c |    5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/libavfilter/vf_drawtext.c b/libavfilter/vf_drawtext.c
index 22a9480..fd2ec8d 100644
--- a/libavfilter/vf_drawtext.c
+++ b/libavfilter/vf_drawtext.c
@@ -812,6 +812,7 @@ static void start_frame(AVFilterLink *inlink, AVFilterBufferRef *inpicref)
 {
     AVFilterContext *ctx = inlink->dst;
     DrawTextContext *dtext = ctx->priv;
+    AVFilterBufferRef *buf_out;
     int fail = 0;
 
     if (dtext_prepare_text(ctx) < 0) {
@@ -850,7 +851,8 @@ static void start_frame(AVFilterLink *inlink, AVFilterBufferRef *inpicref)
             (int)dtext->var_values[VAR_N], dtext->var_values[VAR_T],
             dtext->x, dtext->y, dtext->x+dtext->w, dtext->y+dtext->h);
 
-    ff_start_frame(inlink->dst->outputs[0], inpicref);
+    buf_out = avfilter_ref_buffer(inpicref, ~0);
+    ff_start_frame(inlink->dst->outputs[0], buf_out);
 }
 
 static void end_frame(AVFilterLink *inlink)
@@ -866,6 +868,7 @@ static void end_frame(AVFilterLink *inlink)
 
     ff_draw_slice(outlink, 0, picref->video->h, 1);
     ff_end_frame(outlink);
+    avfilter_unref_buffer(inlink->cur_buf);
 }
 
 AVFilter avfilter_vf_drawtext = {



More information about the ffmpeg-cvslog mailing list