summaryrefslogtreecommitdiff
path: root/libavfilter/vf_showinfo.c
diff options
context:
space:
mode:
authorStefano Sabatini <stefasab@gmail.com>2012-04-25 00:25:18 +0200
committerStefano Sabatini <stefasab@gmail.com>2012-04-27 21:38:13 +0200
commit6b55aab01a5c2e4c9f2851fdb9b7583f184b5241 (patch)
treef7003f2883ea88506de887a9304ba633f9160dcc /libavfilter/vf_showinfo.c
parent6f3b1d7f8643932a4ffc582cc77d8c5fe81b904d (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.c4
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}},