From ed7bc5471b63b7e2f94047c2ff5d23486a068dce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20B=C5=93sch?= Date: Fri, 16 May 2014 06:53:18 +0200 Subject: [PATCH] avfilter/vignette: add direct rendering. --- libavfilter/vf_vignette.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/libavfilter/vf_vignette.c b/libavfilter/vf_vignette.c index 647051a07f..049bfa646a 100644 --- a/libavfilter/vf_vignette.c +++ b/libavfilter/vf_vignette.c @@ -197,18 +197,23 @@ static inline double get_dither_value(VignetteContext *s) static int filter_frame(AVFilterLink *inlink, AVFrame *in) { - unsigned x, y; + unsigned x, y, direct = 0; AVFilterContext *ctx = inlink->dst; VignetteContext *s = ctx->priv; AVFilterLink *outlink = ctx->outputs[0]; AVFrame *out; + if (av_frame_is_writable(in)) { + direct = 1; + out = in; + } else { out = ff_get_video_buffer(outlink, outlink->w, outlink->h); if (!out) { av_frame_free(&in); return AVERROR(ENOMEM); } av_frame_copy_props(out, in); + } if (s->eval_mode == EVAL_MODE_FRAME) update_context(s, inlink, in); @@ -268,7 +273,8 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in) } } - av_frame_free(&in); + if (!direct) + av_frame_free(&in); return ff_filter_frame(outlink, out); }