From patchwork Sat Oct 19 15:03:18 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paul B Mahol X-Patchwork-Id: 15848 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 543A1448D35 for ; Sat, 19 Oct 2019 18:10:15 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 3205968AD0B; Sat, 19 Oct 2019 18:10:15 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr1-f67.google.com (mail-wr1-f67.google.com [209.85.221.67]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 3479068A913 for ; Sat, 19 Oct 2019 18:10:08 +0300 (EEST) Received: by mail-wr1-f67.google.com with SMTP id w18so8632853wrt.3 for ; Sat, 19 Oct 2019 08:10:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id; bh=xa5JeQ9JBZgXYiIF8hQJCkUaqScK0DoUvJz+SGdHx4E=; b=erEinqwuPfUVlu+//tufjKOSKxOvuoPMuwjpGRUZW1Kdx67tb4oFzbjFd+AiKDVzev YttHgeGFlPn4rXwJil3veeUCvguW2f843l0lPO8vpMbh74QB4E77yAf5++b7XsB71rMa wpyELGQsASQgerF842CN0z3q1EyQck3FeNSMQEobdCmNwQjXvzt9MSur58PglsLCZRJH 15aUjnHqGdE77WxhUuTAjaYq9JWoGnGcrBltqIyGNyx+QUp63W0vl8hNbWxQ7eNZDpBx hbl6bNUpcsnB+8I/hnrO6vjAdwB/ce5srSHl45eZIIfeLGX/cb9CuDc2glDSqZk41yk6 y2oA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id; bh=xa5JeQ9JBZgXYiIF8hQJCkUaqScK0DoUvJz+SGdHx4E=; b=N8D9LwNsPNeKRoCdAj3E2aLrs4Qt7o+GOVjPZx3iJk+OK3VPcAkuIdWVBpYUP/mx9t OTaudcMOkS3X3tnhjb/prrDLztX081STrNWo2JLm+xwwrYTIpzlF4NkJNim3+xCg6MK6 1nXtM9mQ2ZPiybrTwoDa2Q+9EO5PVgt4C4ml+IO0VV6RVAbN/x2400Ymf08GrQW4yaEP ueC3ynLDuP9Mmr6QVhDsg6KMFn/HOUjBERicadpUoBuYkb6kpf/HLur2c1w+KSMkUqgu DV+QrRtyMVMoF5hPsJTwkPX3dhXM0YzDc/znarX+qk9bxhluVwKob2aMMunXPKV9n096 H8RA== X-Gm-Message-State: APjAAAXKL25ohNNJtH86PgHJQf/OFZprZ6QtAnk4PzaBGHAPZ5RdCXYR 0MjqC6FAqtO2IVqD4YYEvyWb3nNyZHI= X-Google-Smtp-Source: APXvYqwUOBQPr1NEOc7/seY/s+FK8Asr3+tEji9KP9CBut0nXEWVXmv1yLafB0fP77b9zsR1c+ZC3Q== X-Received: by 2002:adf:e7c9:: with SMTP id e9mr12056496wrn.261.1571497410453; Sat, 19 Oct 2019 08:03:30 -0700 (PDT) Received: from localhost.localdomain ([212.15.160.218]) by smtp.gmail.com with ESMTPSA id w125sm13782562wmg.32.2019.10.19.08.03.29 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 19 Oct 2019 08:03:29 -0700 (PDT) From: Paul B Mahol To: ffmpeg-devel@ffmpeg.org Date: Sat, 19 Oct 2019 17:03:18 +0200 Message-Id: <20191019150318.21568-1-onemda@gmail.com> X-Mailer: git-send-email 2.17.1 Subject: [FFmpeg-devel] [PATCH] avfilter/settb: switch to activate 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 MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Now correctly updates EOF timestamp. Signed-off-by: Paul B Mahol --- libavfilter/settb.c | 51 ++++++++++++++++++++++++++++++++++++++------- 1 file changed, 44 insertions(+), 7 deletions(-) diff --git a/libavfilter/settb.c b/libavfilter/settb.c index 83616c1361..dba52cff31 100644 --- a/libavfilter/settb.c +++ b/libavfilter/settb.c @@ -34,6 +34,7 @@ #include "libavutil/rational.h" #include "audio.h" #include "avfilter.h" +#include "filters.h" #include "internal.h" #include "video.h" @@ -104,22 +105,58 @@ static int config_output_props(AVFilterLink *outlink) return 0; } -static int filter_frame(AVFilterLink *inlink, AVFrame *frame) +static int64_t rescale_pts(AVFilterLink *inlink, AVFilterLink *outlink, int64_t orig_pts) { AVFilterContext *ctx = inlink->dst; - AVFilterLink *outlink = ctx->outputs[0]; + int64_t new_pts = orig_pts; if (av_cmp_q(inlink->time_base, outlink->time_base)) { - int64_t orig_pts = frame->pts; - frame->pts = av_rescale_q(frame->pts, inlink->time_base, outlink->time_base); + new_pts = av_rescale_q(orig_pts, inlink->time_base, outlink->time_base); av_log(ctx, AV_LOG_DEBUG, "tb:%d/%d pts:%"PRId64" -> tb:%d/%d pts:%"PRId64"\n", inlink ->time_base.num, inlink ->time_base.den, orig_pts, - outlink->time_base.num, outlink->time_base.den, frame->pts); + outlink->time_base.num, outlink->time_base.den, new_pts); } + return new_pts; +} + +static int filter_frame(AVFilterLink *inlink, AVFrame *frame) +{ + AVFilterContext *ctx = inlink->dst; + AVFilterLink *outlink = ctx->outputs[0]; + + frame->pts = rescale_pts(inlink, outlink, frame->pts); + return ff_filter_frame(outlink, frame); } +static int activate(AVFilterContext *ctx) +{ + AVFilterLink *inlink = ctx->inputs[0]; + AVFilterLink *outlink = ctx->outputs[0]; + AVFrame *in; + int status; + int64_t pts; + int ret; + + FF_FILTER_FORWARD_STATUS_BACK(outlink, inlink); + + ret = ff_inlink_consume_frame(inlink, &in); + if (ret < 0) + return ret; + if (ret > 0) + return filter_frame(inlink, in); + + if (ff_inlink_acknowledge_status(inlink, &status, &pts)) { + ff_outlink_set_status(outlink, status, rescale_pts(inlink, outlink, pts)); + return 0; + } + + FF_FILTER_FORWARD_WANTED(outlink, inlink); + + return FFERROR_NOT_READY; +} + #if CONFIG_SETTB_FILTER DEFINE_OPTIONS(settb, VIDEO); @@ -129,7 +166,6 @@ static const AVFilterPad avfilter_vf_settb_inputs[] = { { .name = "default", .type = AVMEDIA_TYPE_VIDEO, - .filter_frame = filter_frame, }, { NULL } }; @@ -150,6 +186,7 @@ AVFilter ff_vf_settb = { .priv_class = &settb_class, .inputs = avfilter_vf_settb_inputs, .outputs = avfilter_vf_settb_outputs, + .activate = activate, }; #endif /* CONFIG_SETTB_FILTER */ @@ -162,7 +199,6 @@ static const AVFilterPad avfilter_af_asettb_inputs[] = { { .name = "default", .type = AVMEDIA_TYPE_AUDIO, - .filter_frame = filter_frame, }, { NULL } }; @@ -183,5 +219,6 @@ AVFilter ff_af_asettb = { .inputs = avfilter_af_asettb_inputs, .outputs = avfilter_af_asettb_outputs, .priv_class = &asettb_class, + .activate = activate, }; #endif /* CONFIG_ASETTB_FILTER */