From patchwork Mon Aug 31 21:58:20 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paul B Mahol X-Patchwork-Id: 22042 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 608F844A1B6 for ; Tue, 1 Sep 2020 02:03:25 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 3074768ABB4; Tue, 1 Sep 2020 02:03:25 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-lj1-f194.google.com (mail-lj1-f194.google.com [209.85.208.194]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 9587A68080C for ; Tue, 1 Sep 2020 02:03:18 +0300 (EEST) Received: by mail-lj1-f194.google.com with SMTP id y2so8673544ljc.1 for ; Mon, 31 Aug 2020 16:03:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references; bh=uVr9vbvqdpMZSKyklFuoEQVQZ+6vPUZVMOwJSNLXrMk=; b=OhKLHEQsRGdPjsOj+KBpR+l/0w/+aYL2M0ak8f4A2GUm+6mFu6svlGAilf3dcuEPzu 7CmXaNCkberVFQfcdrclHJaFZUUMdGfIGkcI0vdj5/fOieC65YjRhY1dAvkoO5P8hHQx YMRK+fqwVB/85r7LGJc6q+EDi71e99NFc6Q6O8zqj29b4akx25htc15k9BVBebSJm6BJ zc4Jw/Vvp27xtzaix0ho7+LjJsyqdYlR/ffSDezDbmGnRmMHT8hZqZKHNnFaqC8tw5Ma TG/CCRao4ab0NABJCXCriaNI8zzImvCt3Q1pnS0s4JYDWmIQlUQxXVRAbxMy7L3+KEmx peRA== 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:in-reply-to :references; bh=uVr9vbvqdpMZSKyklFuoEQVQZ+6vPUZVMOwJSNLXrMk=; b=CEIIhh5sa+1DT/CfNYPZVfv60e86KNvWssQcDWttN1jOfzxUJwEmA8TVXr+NFvB0Yk j4p3xATtl9DMEUKaR1MJl7MXMN69g9wjGS/8wDdK+WjfjlsrSjjlRorI46G8chMLX2co u2tGMqor7pzXBMhaCTkgj/pQyWQ48FH9KWgv8usqhC7A5cad2nWSy9oJ1BZnhsnk4vLO 0jC2DfqsXCT3VTJFy3uap6ATrYcXdOpaEpD9+CKrfxPJMT1lbFghmFRUDJq1dFKrd21r URASNJZIRSY/GV0vOYQ38DK9WDyffPoXMYLo1ClVprmpBYt6nyiMJ6LHCQ7AjXfqYK14 ppqw== X-Gm-Message-State: AOAM5333hVRY/XOcvjY6rjoE4vTOUo4dn0Q9P4LNynxMao6cuAS09X5o CWf2VrkOSpQiYkPHfWL21YGh+R093H8l5w== X-Google-Smtp-Source: ABdhPJzdiNnA6ENrRDevBYNGAYRHcdZxsM16dWUWEiB5fURoEftvePdxw+VnAj40qMJBHs/1kvXONQ== X-Received: by 2002:a17:906:150b:: with SMTP id b11mr2789631ejd.234.1598911183629; Mon, 31 Aug 2020 14:59:43 -0700 (PDT) Received: from localhost.localdomain ([31.45.254.223]) by smtp.gmail.com with ESMTPSA id h25sm9226688ejq.12.2020.08.31.14.59.42 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 31 Aug 2020 14:59:43 -0700 (PDT) From: Paul B Mahol To: ffmpeg-devel@ffmpeg.org Date: Mon, 31 Aug 2020 23:58:20 +0200 Message-Id: <20200831215820.1930-1-onemda@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200831172014.5269-1-onemda@gmail.com> References: <20200831172014.5269-1-onemda@gmail.com> Subject: [FFmpeg-devel] [PATCH] avfilter/src_movie: 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" Allow to set the EOF timestamp. Signed-off-by: Paul B Mahol --- libavfilter/src_movie.c | 34 ++++++++++++++++++++++++---------- 1 file changed, 24 insertions(+), 10 deletions(-) diff --git a/libavfilter/src_movie.c b/libavfilter/src_movie.c index eeb8609855..b951b7e134 100644 --- a/libavfilter/src_movie.c +++ b/libavfilter/src_movie.c @@ -44,6 +44,7 @@ #include "audio.h" #include "avfilter.h" +#include "filters.h" #include "formats.h" #include "internal.h" #include "video.h" @@ -97,7 +98,6 @@ static const AVOption movie_options[]= { }; static int movie_config_output_props(AVFilterLink *outlink); -static int movie_request_frame(AVFilterLink *outlink); static AVStream *find_stream(void *log, AVFormatContext *avf, const char *spec) { @@ -309,7 +309,6 @@ static av_cold int movie_common_init(AVFilterContext *ctx) if (!pad.name) return AVERROR(ENOMEM); pad.config_props = movie_config_output_props; - pad.request_frame = movie_request_frame; if ((ret = ff_insert_outpad(ctx, i, &pad)) < 0) { av_freep(&pad.name); return ret; @@ -595,17 +594,30 @@ static int movie_push_frame(AVFilterContext *ctx, unsigned out_id) return pkt_out_id == out_id; } -static int movie_request_frame(AVFilterLink *outlink) +static int activate(AVFilterContext *ctx) { - AVFilterContext *ctx = outlink->src; - unsigned out_id = FF_OUTLINK_IDX(outlink); - int ret; + MovieContext *movie = ctx->priv; + int nb_eofs = 0; + + for (int i = 0; i < ctx->nb_outputs; i++) { + AVFilterLink *outlink = ctx->outputs[i]; - while (1) { - ret = movie_push_frame(ctx, out_id); - if (ret) - return FFMIN(ret, 0); + nb_eofs += !!ff_outlink_get_status(outlink); + if (ff_outlink_frame_wanted(outlink)) { + int ret = movie_push_frame(ctx, i); + + if (ret) { + if (ret < 0) + ff_outlink_set_status(outlink, AVERROR_EOF, movie->st[i].last_pts); + return 0; + } + } } + + if (nb_eofs != ctx->nb_outputs) + ff_filter_set_ready(ctx, 100); + + return 0; } static int process_command(AVFilterContext *ctx, const char *cmd, const char *args, @@ -666,6 +678,7 @@ AVFilter ff_avsrc_movie = { .inputs = NULL, .outputs = NULL, + .activate = activate, .flags = AVFILTER_FLAG_DYNAMIC_OUTPUTS, .process_command = process_command }; @@ -687,6 +700,7 @@ AVFilter ff_avsrc_amovie = { .inputs = NULL, .outputs = NULL, + .activate = activate, .priv_class = &amovie_class, .flags = AVFILTER_FLAG_DYNAMIC_OUTPUTS, .process_command = process_command,