From patchwork Sat Feb 17 12:53:09 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: qq2225936589 X-Patchwork-Id: 7621 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.150.1 with SMTP id c1csp2055927jai; Sat, 17 Feb 2018 10:06:16 -0800 (PST) X-Google-Smtp-Source: AH8x2240U+oUAcIGsX5CUhinXiWIBRh2t0kAMe5TB18eqlaWLICSjeJmvPPzZskZmWecxAMD+9mT X-Received: by 10.223.136.72 with SMTP id e8mr595554wre.163.1518890776311; Sat, 17 Feb 2018 10:06:16 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1518890776; cv=none; d=google.com; s=arc-20160816; b=OeFaFgDkp/Wu6inaHA2fSiDlkCywUm5dwcfvCh+/xQaG0ktPi3XPvP7xwC9winhlte szGioAR3m0MM2vbkAoDV4Y3RIrufIm3vt2gif5Y3tc3mcIJlQNaZsay8kjPHtcVNEn7i lyZSbmLiMUXll7q64JaPP7F+shdQ1QDoQLM3Pl+QH/7garP6DEebmoPRWWt5QSWh8prD 5RTmjAJ4AIbQxdmzv2tqw7C5+8M9oz+z+nbKOa09R4KW0RdXYM1QRn57Iva8c7YL0n2t hzNqch3tVurRjrhRpUk5ajB2+DhJsoUgcBMm4n8ozrtiyBXw8mniipSrmIRG+zY9Rajp ZkTA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:message-id:date:to:from:dkim-signature :delivered-to:arc-authentication-results; bh=rzehYdAO+fOW42V3BLsqxdWNFbeZknOle7FJGAAVhoQ=; b=JAKRH9c2TRcT6Eh5WWknWRSQxjYe5bbEhVbShTi9wDb9LzH1fI1Tw9LMH6/8GI/bMm k0FBL7vecmzv2Z81IJGHfHQvvzETCkIhGQBOqfZhVbKp158TQ/EBiFv/MVQqbUArxise fkraLASsrQXdYcduu4NQd57bM0FDjuz+KfbuCNNqh3J1roS5ws1q0w2pkjFOQ+lLDCWc BGaE9RiYQNoSAbiXOuu+aSRqoH8MYDDyv2ZFEfwIHQ0oI7RGwnuXSmY8ppq6QBlXgYYx lJDfcLAODRsfxJ5sM0NWaUPI47XydZXGXlFHrwkrYjQITllUvRyzv5MIWBg5aQ/gdJ2w ZhhQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@163.com header.s=s110527 header.b=Rltx/FH+; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id i7si7053478wrh.347.2018.02.17.10.06.14; Sat, 17 Feb 2018 10:06:16 -0800 (PST) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@163.com header.s=s110527 header.b=Rltx/FH+; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id E9B04689C86; Sat, 17 Feb 2018 20:06:12 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from m50-134.163.com (m50-134.163.com [123.125.50.134]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id BD29B689892 for ; Sat, 17 Feb 2018 14:53:24 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=163.com; s=s110527; h=From:Subject:Date:Message-Id; bh=bG+RPmR1UOP5LPYOrv mRbXJxZctAvJ+RKGz07WGqSY4=; b=Rltx/FH+xARIiX5DTJPUX+UEBlZQOYEiMM BgPNhk1/7s/twVUSu/JLNekLlq0+otWPrVPiQ/Xs9jl9QF4sqLdEt81+nc7a4ZZ9 jQN0xubUYOMnInTBZ8kJJzlS9G4sVfyH7PWlpqkS0CuWVMkcKt990s0ytA1Yc8dI 7+rtXrshg= Received: from localhost.localdomain (unknown [222.169.16.194]) by smtp4 (Coremail) with SMTP id DtGowADXLcy8JYhakbMLAQ--.7601S2; Sat, 17 Feb 2018 20:53:18 +0800 (CST) From: qq2225936589 To: ffmpeg-devel@ffmpeg.org Date: Sat, 17 Feb 2018 20:53:09 +0800 Message-Id: <20180217125309.3968-1-qq2225936589@163.com> X-Mailer: git-send-email 2.13.0.windows.1 X-CM-TRANSID: DtGowADXLcy8JYhakbMLAQ--.7601S2 X-Coremail-Antispam: 1Uf129KBjvJXoWxAw43WFWfGFyxur1ruFW7urg_yoWrGw4Upr yfKrZxXw1UG3WfZr9ayFykZ34avw1rKF1S9rsI9rWSqrn2yr15Jr4fAr9agF1DWrWDJayU Zr4DXr1qgwsrK3DanT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDUYxBIdaVFxhVjvjDU0xZFpf9x07b5BT5UUUUU= X-Originating-IP: [222.169.16.194] X-CM-SenderInfo: dttsjjqvztlkiyz6il2tof0z/1tbiThPvWFUC2InAmQABs0 X-Mailman-Approved-At: Sat, 17 Feb 2018 20:06:11 +0200 Subject: [FFmpeg-devel] [PATCH] libavfilter/vf_delogo: add options start and stop frame number 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: qq2225936589 MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" From: qq2225936589 --- libavfilter/vf_delogo.c | 52 +++++++++++++++++++++++++++++-------------------- 1 file changed, 31 insertions(+), 21 deletions(-) diff --git a/libavfilter/vf_delogo.c b/libavfilter/vf_delogo.c index 065d093641..f568b4eb7e 100644 --- a/libavfilter/vf_delogo.c +++ b/libavfilter/vf_delogo.c @@ -155,7 +155,7 @@ static void apply_delogo(uint8_t *dst, int dst_linesize, typedef struct DelogoContext { const AVClass *class; - int x, y, w, h, band, show; + int x, y, w, h, band, show, f1, f2; } DelogoContext; #define OFFSET(x) offsetof(DelogoContext, x) @@ -172,6 +172,8 @@ static const AVOption delogo_options[]= { { "t", "set delogo area band size", OFFSET(band), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX, FLAGS }, #endif { "show", "show delogo area", OFFSET(show), AV_OPT_TYPE_BOOL,{ .i64 = 0 }, 0, 1, FLAGS }, + { "f1", "set delogo start frame number",OFFSET(f1), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX, FLAGS }, + { "f2", "set delogo stop frame number", OFFSET(f2), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_MAX, FLAGS }, { NULL } }; @@ -195,10 +197,10 @@ static av_cold int init(AVFilterContext *ctx) { DelogoContext *s = ctx->priv; -#define CHECK_UNSET_OPT(opt) \ +#define CHECK_UNSET_OPT(opt) \ if (s->opt == -1) { \ av_log(s, AV_LOG_ERROR, "Option %s was not set.\n", #opt); \ - return AVERROR(EINVAL); \ + return AVERROR(EINVAL); \ } CHECK_UNSET_OPT(x); CHECK_UNSET_OPT(y); @@ -215,8 +217,8 @@ static av_cold int init(AVFilterContext *ctx) #else s->band = 1; #endif - av_log(ctx, AV_LOG_VERBOSE, "x:%d y:%d, w:%d h:%d band:%d show:%d\n", - s->x, s->y, s->w, s->h, s->band, s->show); + av_log(ctx, AV_LOG_VERBOSE, "x:%d y:%d, w:%d h:%d band:%d show:%d f1:%d f2:%d\n", + s->x, s->y, s->w, s->h, s->band, s->show, s->f1, s->f2); s->w += s->band*2; s->h += s->band*2; @@ -252,6 +254,9 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in) int plane; AVRational sar; + int64_t frame_num = inlink->frame_count_out; + av_log(s, AV_LOG_VERBOSE, "frame:%"PRId64" f1:%d f2:%d\n", frame_num, s->f1, s->f2); + if (av_frame_is_writable(in)) { direct = 1; out = in; @@ -269,22 +274,27 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in) /* Assume square pixels if SAR is unknown */ if (!sar.num) sar.num = sar.den = 1; - - for (plane = 0; plane < desc->nb_components; plane++) { - int hsub = plane == 1 || plane == 2 ? hsub0 : 0; - int vsub = plane == 1 || plane == 2 ? vsub0 : 0; - - apply_delogo(out->data[plane], out->linesize[plane], - in ->data[plane], in ->linesize[plane], - AV_CEIL_RSHIFT(inlink->w, hsub), - AV_CEIL_RSHIFT(inlink->h, vsub), - sar, s->x>>hsub, s->y>>vsub, - /* Up and left borders were rounded down, inject lost bits - * into width and height to avoid error accumulation */ - AV_CEIL_RSHIFT(s->w + (s->x & ((1<h + (s->y & ((1<band>>FFMIN(hsub, vsub), - s->show, direct); + if( ( s->f1 == 0 && s->f2 == -1) || + ( frame_num >= s->f1 && frame_num <= s->f2) ) { + for (plane = 0; plane < desc->nb_components; plane++) { + int hsub = plane == 1 || plane == 2 ? hsub0 : 0; + int vsub = plane == 1 || plane == 2 ? vsub0 : 0; + + apply_delogo(out->data[plane], out->linesize[plane], + in ->data[plane], in ->linesize[plane], + AV_CEIL_RSHIFT(inlink->w, hsub), + AV_CEIL_RSHIFT(inlink->h, vsub), + sar, s->x>>hsub, s->y>>vsub, + /* Up and left borders were rounded down, inject lost bits + * into width and height to avoid error accumulation */ + AV_CEIL_RSHIFT(s->w + (s->x & ((1<h + (s->y & ((1<band>>FFMIN(hsub, vsub), + s->show, direct); + } + } else { + av_frame_copy_props(out, in); + av_frame_copy(out, in); } if (!direct)