From patchwork Sat Jul 27 12:18:16 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lance Wang X-Patchwork-Id: 14095 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id B327444976E for ; Sat, 27 Jul 2019 15:24:25 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 9935B68AC41; Sat, 27 Jul 2019 15:24:25 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pf1-f195.google.com (mail-pf1-f195.google.com [209.85.210.195]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id A5FC168A98D for ; Sat, 27 Jul 2019 15:24:18 +0300 (EEST) Received: by mail-pf1-f195.google.com with SMTP id y15so25768427pfn.5 for ; Sat, 27 Jul 2019 05:24:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=ABeN6UnfMpEC3XRyI1MJnM+0UbSYodnSnsYR399gJ6I=; b=qT7/wMsrIGKJf2ugVGGz57dJpcLCHW0nMXoWu0rJGbXFc23e5VZ35WnIcXlgu9GFx/ wPcrL8vbLhtLKkpd+B+IED7qBYfnwghOHG94LqVS14ZZYGqTMjokSuzQb2Ro169gTlyL kRG+IHYppBS/QPIfapeILiNvaAztn0PXxi9LhBveACOtwfKnR6XAoo1CQFomVUx+OsIO CwzGjWudKubH2WEjv5XfizD7T6UlDVzFAMrCBVy0dcZjk0FnG7HxLQZjTwNBMPrlv1Rs ulPDVaa28ZiKdQoUc9pfvqkDp8yLy0Xvc7k10hrIt8TpR4Y/C1+il7ci7MjOReCX2W2i 9ALQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=ABeN6UnfMpEC3XRyI1MJnM+0UbSYodnSnsYR399gJ6I=; b=Dt+wsriv9CjAgzLBAt6502fPjnSs0I/FJwM3q8JAY32s9Eiz22uuEsrk6YU0wMtN+Z P7Oa840LUSzblmoTQzu/gGkopUHtL3qbi56kzueATHF5zlMaewPOR/50NQd0e+/YcLua VLX/9JV7/lsz03opXUSAOWExVwSv5jYJmSS1GeLIDQR2Tk7kFb9djmslUY/ZuwVUsrde OUWcGRqHln0qvwelb3AngS8K4M5zJpc2+ktVMfejxflQaWpR/2q09Ui6nrdegHpyU/fy VqIKpf2U+feNKtr/FBaWV+Z79L5YXEJU2H6ZZdLfkcQgJamAHVPaC+z6oHkvu96ibA0A zXMg== X-Gm-Message-State: APjAAAWoOnxxVLU3y8UNK/kqzcy6XMpPkw/cyi/4dYSRR1FYfOcvxJqn UOG8fPf9TKI+jDdukUd3KNpitTkm X-Google-Smtp-Source: APXvYqwq+FZ/+5UIF9gdCQSFftuaVu/QzyZYjmETprT4h3thPwtLZvkdrVhHrEb6lIzYzaICP+ZX4Q== X-Received: by 2002:a17:90a:cf0d:: with SMTP id h13mr50951415pju.63.1564229908342; Sat, 27 Jul 2019 05:18:28 -0700 (PDT) Received: from vpn.localdomain ([47.90.99.151]) by smtp.gmail.com with ESMTPSA id p67sm65004331pfg.124.2019.07.27.05.18.26 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 27 Jul 2019 05:18:27 -0700 (PDT) From: lance.lmwang@gmail.com To: ffmpeg-devel@ffmpeg.org Date: Sat, 27 Jul 2019 20:18:16 +0800 Message-Id: <20190727121817.22390-1-lance.lmwang@gmail.com> X-Mailer: git-send-email 2.9.5 Subject: [FFmpeg-devel] [PATCH v1 1/2] avfilter/vf_scale: split the scale_frame function from filter_frame for activate function support X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Limin Wang MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" From: Limin Wang Signed-off-by: Limin Wang --- libavfilter/vf_scale.c | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/libavfilter/vf_scale.c b/libavfilter/vf_scale.c index 7aebf56..efb480d 100644 --- a/libavfilter/vf_scale.c +++ b/libavfilter/vf_scale.c @@ -400,7 +400,7 @@ static int scale_slice(AVFilterLink *link, AVFrame *out_buf, AVFrame *cur_pic, s out,out_stride); } -static int filter_frame(AVFilterLink *link, AVFrame *in) +static int scale_frame(AVFilterLink *link, AVFrame *in, AVFrame **frame_out, int *got_frame) { ScaleContext *scale = link->dst->priv; AVFilterLink *outlink = link->dst->outputs[0]; @@ -409,6 +409,7 @@ static int filter_frame(AVFilterLink *link, AVFrame *in) char buf[32]; int in_range; + *got_frame = 0; if (in->colorspace == AVCOL_SPC_YCGCO) av_log(link->dst, AV_LOG_WARNING, "Detected unsupported YCgCo colorspace.\n"); @@ -437,8 +438,11 @@ static int filter_frame(AVFilterLink *link, AVFrame *in) return ret; } - if (!scale->sws) - return ff_filter_frame(outlink, in); + if (!scale->sws) { + *got_frame = 1; + *frame_out = in; + return 0; + } scale->hsub = desc->log2_chroma_w; scale->vsub = desc->log2_chroma_h; @@ -448,6 +452,7 @@ static int filter_frame(AVFilterLink *link, AVFrame *in) av_frame_free(&in); return AVERROR(ENOMEM); } + *frame_out = out; av_frame_copy_props(out, in); out->width = outlink->w; @@ -521,7 +526,23 @@ static int filter_frame(AVFilterLink *link, AVFrame *in) } av_frame_free(&in); - return ff_filter_frame(outlink, out); + *got_frame = 1; + return 0; +} + +static int filter_frame(AVFilterLink *link, AVFrame *in) +{ + AVFilterContext *ctx = link->dst; + AVFilterLink *outlink = ctx->outputs[0]; + int got_frame = 0; + AVFrame *out; + int ret; + + ret = scale_frame(link, in, &out, &got_frame); + if (got_frame) + return ff_filter_frame(outlink, out); + + return ret; } static int filter_frame_ref(AVFilterLink *link, AVFrame *in)