From c7d2a3abf037f0bd7755f2ac39ee6dead979c596 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20B=C5=93sch?= Date: Wed, 24 Apr 2013 17:55:55 +0200 Subject: [PATCH] lavfi/vidstabdetect: fix direct path. The frame must be writable if the show option is set, otherwise pass the frame unchanged. --- libavfilter/vf_vidstabdetect.c | 25 +++---------------------- 1 file changed, 3 insertions(+), 22 deletions(-) diff --git a/libavfilter/vf_vidstabdetect.c b/libavfilter/vf_vidstabdetect.c index bbc8ef4762..d96ca8e9f6 100644 --- a/libavfilter/vf_vidstabdetect.c +++ b/libavfilter/vf_vidstabdetect.c @@ -160,22 +160,11 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in) LocalMotions localmotions; AVFilterLink *outlink = inlink->dst->outputs[0]; - int direct = 0; - AVFrame *out; VSFrame frame; int plane; - 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 (sd->conf.show > 0 && !av_frame_is_writable(in)) + av_frame_make_writable(in); for (plane = 0; plane < md->fi.planes; plane++) { frame.data[plane] = in->data[plane]; @@ -191,16 +180,8 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in) } vs_vector_del(&localmotions); } - if (sd->conf.show > 0 && !direct) { - av_image_copy(out->data, out->linesize, - (void*)in->data, in->linesize, - in->format, in->width, in->height); - } - if (!direct) - av_frame_free(&in); - - return ff_filter_frame(outlink, out); + return ff_filter_frame(outlink, in); } static const AVFilterPad avfilter_vf_vidstabdetect_inputs[] = {