diff options
author | Stefano Sabatini <stefasab@gmail.com> | 2012-04-25 02:25:18 +0400 |
---|---|---|
committer | Stefano Sabatini <stefasab@gmail.com> | 2012-04-27 23:38:13 +0400 |
commit | 6b55aab01a5c2e4c9f2851fdb9b7583f184b5241 (patch) | |
tree | f7003f2883ea88506de887a9304ba633f9160dcc /libavfilter/vf_showinfo.c | |
parent | 6f3b1d7f8643932a4ffc582cc77d8c5fe81b904d (diff) |
lavfi: create buffer reference in filters which need to access the ref later
Also add internal function ff_null_start_frame_keep_ref().
Fix crash when a following filter (e.g. settb) will unref the reference
passed by start_frame(), and then the reference is accessed in
end_frame() through inlink->cur_buf.
Diffstat (limited to 'libavfilter/vf_showinfo.c')
-rw-r--r-- | libavfilter/vf_showinfo.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/libavfilter/vf_showinfo.c b/libavfilter/vf_showinfo.c index 657e6e6df2..ece6230877 100644 --- a/libavfilter/vf_showinfo.c +++ b/libavfilter/vf_showinfo.c @@ -27,6 +27,7 @@ #include "libavutil/pixdesc.h" #include "libavutil/timestamp.h" #include "avfilter.h" +#include "internal.h" typedef struct { unsigned int frame; @@ -79,6 +80,7 @@ static void end_frame(AVFilterLink *inlink) av_log(ctx, AV_LOG_INFO, "]\n"); showinfo->frame++; + avfilter_unref_buffer(picref); avfilter_end_frame(inlink->dst->outputs[0]); } @@ -92,7 +94,7 @@ AVFilter avfilter_vf_showinfo = { .inputs = (const AVFilterPad[]) {{ .name = "default", .type = AVMEDIA_TYPE_VIDEO, .get_video_buffer = avfilter_null_get_video_buffer, - .start_frame = avfilter_null_start_frame, + .start_frame = ff_null_start_frame_keep_ref, .end_frame = end_frame, .min_perms = AV_PERM_READ, }, { .name = NULL}}, |