From patchwork Sun Jun 18 11:16:53 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Haas X-Patchwork-Id: 42184 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:be15:b0:121:b37c:e101 with SMTP id ge21csp56326pzb; Sun, 18 Jun 2023 04:20:24 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ5G3vcdhYQILnbAt0H0mVzF85ecGpm4EJIAtUiS5alYkEpZLOpkUXjf7zvxuB82SnLUFT3w X-Received: by 2002:a17:907:a04:b0:988:8fce:17ba with SMTP id bb4-20020a1709070a0400b009888fce17bamr475430ejc.31.1687087224518; Sun, 18 Jun 2023 04:20:24 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1687087224; cv=none; d=google.com; s=arc-20160816; b=AzCW1pk4ybsCJVlF8elRkOeJYetna8oqjEZMNrvmEOMZn6QhGaGYUCV7/YPECCRGSe I6Ue0yAh3hzKwRqJe67rSMZ5jMrV+aA9X6N+yLeTyKjxK6rpjo7jKFXUk93X+0x9rcbc P7+vPNYIGN+mS0FC/lO3Yg+tLeJ+jS0ox70Z+VyMxYziHI6b02SS5GilwbSuottQ1SZP yJNuiuCMbufoT3BBF1Nw4xR89qieq/GZVAjchNYLQjJaL4wln1g6Kf7R/97SPLQRPlI0 9f+ge/Btf4fvFms0hmQQ/1FftyQlyTVrFuddSrsNy+LRcmET968FVy1Z14o8I1J/VOMv SMLw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature:delivered-to; bh=QcXHjSEq1mH8/L1bQ4dUenQh8EK8zkKGR/i2l9S3SOU=; b=ypvPrJ88pNLPfEF9vamDrjtU04wJbnEv4pSVWbZHyuAWFypSH88OVnrHaJjsWVyIOs bNsaoL4RoZE+LsbP23OlFxOF0EN/JcLhd6jQOP8krO+r6pRQxVmesW6dV3mLyHH6AZYO ic5AAOHDGmmeZSbd1Ln2OrUDxqLAwWm/KLkD2QOygLAAuxuovYsyWgy9XYT2O5OZpf52 A7fzz9MsGZsUi8RtAjEFArZeDkGPWIo60k+U3/P7qa+DS2ZoZAnrlROULJgFix5K+Z39 +wIoesCPK6Xh9IkzLkY9KRv4rwhGTMg/HlxL+R7p2CyITVctsbjXaIXSJqxb0OyOkF1P YQ/g== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@haasn.xyz header.s=mail header.b=j4mM6bc5; 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 w12-20020aa7d28c000000b005149d398b2bsi12610666edq.585.2023.06.18.04.20.24; Sun, 18 Jun 2023 04:20:24 -0700 (PDT) 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=@haasn.xyz header.s=mail header.b=j4mM6bc5; 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 51D2268BF7D; Sun, 18 Jun 2023 14:20:14 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from haasn.dev (haasn.dev [78.46.187.166]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id A697F68BF50 for ; Sun, 18 Jun 2023 14:20:08 +0300 (EEST) Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id 6B89C42350; Sun, 18 Jun 2023 13:20:08 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1687087208; bh=WAm6lPWXPVKyVWWiTpC2BSGDJdXtOQ03zruHClRamIg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=j4mM6bc5UWGnxqB7LIT1uhAlWl6tuxCOytL0mmH0j1k3nlH/b4dGCjXGYgD0TlXKO PBzvD8qAqwfFcs3ZW2u0atMKKEH5fgRSbGZO6opMNaBRPvy96reEZYXoTiD6rpsvWb GvFGaxLq85BQLyHr950SkrOHa9Yv9d6Ymkidy1ro= From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Sun, 18 Jun 2023 13:16:53 +0200 Message-ID: <20230618111955.40994-3-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230618111955.40994-2-ffmpeg@haasn.xyz> References: <20230618111955.40994-2-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 01/22] lavfi/vf_libplacebo: drop redundant case X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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: Niklas Haas Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: FWtgz/C0NA1M From: Niklas Haas If the input queue is EOF, then the s->status check should already have covered it, and prevented the code from getting this far. If we still hit this case for some reason, it's probably a bug. Better to hit the AVERROR_BUG branch. --- libavfilter/vf_libplacebo.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/libavfilter/vf_libplacebo.c b/libavfilter/vf_libplacebo.c index 242c8a13f5a..a048424cecc 100644 --- a/libavfilter/vf_libplacebo.c +++ b/libavfilter/vf_libplacebo.c @@ -949,9 +949,6 @@ static int libplacebo_activate(AVFilterContext *ctx) if (!s->fps.num) av_fifo_drain2(s->out_pts, 1); return output_frame_mix(ctx, &mix, pts); - case PL_QUEUE_EOF: - ff_outlink_set_status(outlink, AVERROR_EOF, pts); - return 0; case PL_QUEUE_ERR: return AVERROR_EXTERNAL; } From patchwork Sun Jun 18 11:16:54 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Haas X-Patchwork-Id: 42185 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:be15:b0:121:b37c:e101 with SMTP id ge21csp56410pzb; Sun, 18 Jun 2023 04:20:34 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ6h6ADB+8B1G95u5pmJV6a5QbwM4hCz2x942tzwCeDv87Nmq6BbPQ76yN8082K7kwtHx0PD X-Received: by 2002:aa7:c44d:0:b0:518:72d8:2cc5 with SMTP id n13-20020aa7c44d000000b0051872d82cc5mr4766865edr.33.1687087234031; Sun, 18 Jun 2023 04:20:34 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1687087234; cv=none; d=google.com; s=arc-20160816; b=OfiOSNS0Mw/xoSF2Ceeo/yVxeH7AYSJanRC9VhGMYVMlNfh4P8kxX6pTV6lZq/6+pS NvSH3jxN+6nqo6Z9Q3S1TYOPGj8BqADnBTPsZeuLwtQfXFb2K2Vq6z7KYPwlmJIAFvAp yxjYt3RYNtrfXVyf8nU+3dcaJVB8mR67TGN42uVGdWlJbA7IR2cJNHS3hXop/MNSydwa oNaD9N6/wyrzDy1tW6ZnPMa7zTQT6bTpUljjiabXeVDvph7xprsnYuVYmvF6vnFBKoJJ pyfypaKzxV+LyTTkhynm/Y6PVkc7nTayfSPTTcAxCsP7KkYoKdqdC//4JZz/t0jnyb5V GO3g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature:delivered-to; bh=7j1gY/eACOGJmyIpVYPwNny4cp8/Tms3Q3nr9SNtyDk=; b=enjVr80nAQipEFfUCrf7h0BPpsuKAHfniSsrI7mnqqFRxUiwbRqE7uyoBEei2OHvNp IYfWxm2KRNTAanPDXUQIaMJAr7G4os/lnyPnog3pNAWwWoHwyYCOhUdhRtl+EqCEiDIX PsiGGLM6kN2pRt31KHthCa4ExmZ/VrPWSaWjFI990pdxIZgG3eAunRjI90zuTrPr2mU9 5qi+BJNx7622Fl5WSKy+A0SKthKfcqU/youtlPizSEWpCGd3yj1H47cMl3k+A0K5NBKz 6a1vyqHptx7c9gJeMrBTK9cek55YoXIDh2iNBOIxRwMfnNy3ZNKyv5T9z/z4UR5+PfWI 6Img== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@haasn.xyz header.s=mail header.b=XhbogPiO; 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 m19-20020aa7d353000000b0051a2db13ddbsi3956480edr.192.2023.06.18.04.20.33; Sun, 18 Jun 2023 04:20:34 -0700 (PDT) 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=@haasn.xyz header.s=mail header.b=XhbogPiO; 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 73F6D68BF8D; Sun, 18 Jun 2023 14:20:15 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from haasn.dev (haasn.dev [78.46.187.166]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 0423568BF5A for ; Sun, 18 Jun 2023 14:20:09 +0300 (EEST) Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id AA68442635; Sun, 18 Jun 2023 13:20:08 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1687087208; bh=qIGiwpouVbPKxwtrJ9Mhh+lX/jpWnUyhWQadg/2aK8k=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=XhbogPiOX9jP2l9zuwKbhhX6GWXdBsUj9gDmt7cCfMuVKEdVhyHAvOjvYQfpnN0Tr yxrUbyt6xqQ3Q6O2JTvolp1oOA+Iq3FrI4f/9zE5QwujtEPYDQECyynXqJO3sD95x7 8HqkOJiR3APCZCyZnqSQ034X6Pu4VGyKnUeEz5GY= From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Sun, 18 Jun 2023 13:16:54 +0200 Message-ID: <20230618111955.40994-4-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230618111955.40994-2-ffmpeg@haasn.xyz> References: <20230618111955.40994-2-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 02/22] lavfi/vf_libplacebo: move input-specific state to struct X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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: Niklas Haas Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: gD5tBp1jW1lZ From: Niklas Haas In anticipation of a refactor which will enable multiple input support. Note: the renderer is also input-specific because it maintains a frame cache, HDR peak detection state and mixing cache, all of which are tied to a specific input stream. --- libavfilter/vf_libplacebo.c | 80 ++++++++++++++++++++++++------------- 1 file changed, 52 insertions(+), 28 deletions(-) diff --git a/libavfilter/vf_libplacebo.c b/libavfilter/vf_libplacebo.c index a048424cecc..10fd4327458 100644 --- a/libavfilter/vf_libplacebo.c +++ b/libavfilter/vf_libplacebo.c @@ -113,6 +113,16 @@ enum var_name { VAR_VARS_NB }; +/* per-input dynamic filter state */ +typedef struct LibplaceboInput { + pl_renderer renderer; + pl_queue queue; + AVFilterLink *link; + AVFifo *out_pts; ///< timestamps of wanted output frames + int64_t status_pts; + int status; +} LibplaceboInput; + typedef struct LibplaceboContext { /* lavfi vulkan*/ FFVulkanContext vkctx; @@ -121,14 +131,10 @@ typedef struct LibplaceboContext { pl_log log; pl_vulkan vulkan; pl_gpu gpu; - pl_renderer renderer; - pl_queue queue; pl_tex tex[4]; - /* filter state */ - AVFifo *out_pts; ///< timestamps of wanted output frames - int64_t status_pts; - int status; + /* input state */ + LibplaceboInput input; /* settings */ char *out_format_string; @@ -536,8 +542,6 @@ static int libplacebo_init(AVFilterContext *avctx) RET(av_expr_parse(&s->pos_h_pexpr, s->pos_h_expr, var_names, NULL, NULL, NULL, NULL, 0, s)); - /* Initialize dynamic filter state */ - s->out_pts = av_fifo_alloc2(1, sizeof(int64_t), AV_FIFO_FLAG_AUTO_GROW); if (strcmp(s->fps_string, "none") != 0) RET(av_parse_video_rate(&s->fps, s->fps_string)); @@ -564,6 +568,28 @@ static void unlock_queue(void *priv, uint32_t qf, uint32_t qidx) } #endif +static int input_init(AVFilterContext *avctx, AVFilterLink *link, + LibplaceboInput *input) +{ + LibplaceboContext *s = avctx->priv; + + input->out_pts = av_fifo_alloc2(1, sizeof(int64_t), AV_FIFO_FLAG_AUTO_GROW); + if (!input->out_pts) + return AVERROR(ENOMEM); + input->queue = pl_queue_create(s->gpu); + input->renderer = pl_renderer_create(s->log, s->gpu); + input->link = link; + + return 0; +} + +static void input_uninit(LibplaceboInput *input) +{ + pl_renderer_destroy(&input->renderer); + pl_queue_destroy(&input->queue); + av_fifo_freep2(&input->out_pts); +} + static int init_vulkan(AVFilterContext *avctx, const AVVulkanDeviceContext *hwctx) { int err = 0; @@ -620,10 +646,7 @@ static int init_vulkan(AVFilterContext *avctx, const AVVulkanDeviceContext *hwct goto fail; } - /* Create the renderer */ s->gpu = s->vulkan->gpu; - s->renderer = pl_renderer_create(s->log, s->gpu); - s->queue = pl_queue_create(s->gpu); /* Parse the user shaders, if requested */ if (s->shader_bin_len) @@ -634,6 +657,9 @@ static int init_vulkan(AVFilterContext *avctx, const AVVulkanDeviceContext *hwct RET(parse_shader(avctx, buf, buf_len)); } + /* Initialize inputs */ + RET(input_init(avctx, avctx->inputs[0], &s->input)); + /* fall through */ fail: if (buf) @@ -649,8 +675,7 @@ static void libplacebo_uninit(AVFilterContext *avctx) pl_tex_destroy(s->gpu, &s->tex[i]); for (int i = 0; i < s->num_hooks; i++) pl_mpv_user_shader_destroy(&s->hooks[i]); - pl_renderer_destroy(&s->renderer); - pl_queue_destroy(&s->queue); + input_uninit(&s->input); pl_vulkan_destroy(&s->vulkan); pl_log_destroy(&s->log); ff_vk_uninit(&s->vkctx); @@ -664,7 +689,6 @@ static void libplacebo_uninit(AVFilterContext *avctx) av_expr_free(s->pos_y_pexpr); av_expr_free(s->pos_w_pexpr); av_expr_free(s->pos_h_pexpr); - av_fifo_freep2(&s->out_pts); } static int libplacebo_process_command(AVFilterContext *ctx, const char *cmd, @@ -826,7 +850,7 @@ static int output_frame_mix(AVFilterContext *ctx, } update_crops(ctx, mix, &target, ref_sig, out->pts * av_q2d(outlink->time_base)); - pl_render_image_mix(s->renderer, mix, &target, &s->params); + pl_render_image_mix(s->input.renderer, mix, &target, &s->params); if (outdesc->flags & AV_PIX_FMT_FLAG_HWACCEL) { pl_unmap_avframe(s->gpu, &target); @@ -886,7 +910,7 @@ static int libplacebo_activate(AVFilterContext *ctx) while ((ret = ff_inlink_consume_frame(inlink, &in)) > 0) { in->opaque = s; - pl_queue_push(s->queue, &(struct pl_source_frame) { + pl_queue_push(s->input.queue, &(struct pl_source_frame) { .pts = in->pts * av_q2d(inlink->time_base), .duration = in->duration * av_q2d(inlink->time_base), .first_field = pl_field_from_avframe(in), @@ -899,19 +923,19 @@ static int libplacebo_activate(AVFilterContext *ctx) if (!s->fps.num) { /* Internally queue an output frame for the same PTS */ av_assert1(!av_cmp_q(inlink->time_base, outlink->time_base)); - av_fifo_write(s->out_pts, &in->pts, 1); + av_fifo_write(s->input.out_pts, &in->pts, 1); } } if (ret < 0) return ret; - if (!s->status && ff_inlink_acknowledge_status(inlink, &status, &pts)) { + if (!s->input.status && ff_inlink_acknowledge_status(inlink, &status, &pts)) { pts = av_rescale_q_rnd(pts, inlink->time_base, outlink->time_base, AV_ROUND_UP); - pl_queue_push(s->queue, NULL); /* Signal EOF to pl_queue */ - s->status = status; - s->status_pts = pts; + pl_queue_push(s->input.queue, NULL); /* Signal EOF to pl_queue */ + s->input.status = status; + s->input.status_pts = pts; } if (ff_outlink_frame_wanted(outlink)) { @@ -920,22 +944,22 @@ static int libplacebo_activate(AVFilterContext *ctx) if (s->fps.num) { pts = outlink->frame_count_out; - } else if (av_fifo_peek(s->out_pts, &pts, 1, 0) < 0) { + } else if (av_fifo_peek(s->input.out_pts, &pts, 1, 0) < 0) { /* No frames queued */ - if (s->status) { - pts = s->status_pts; + if (s->input.status) { + pts = s->input.status_pts; } else { ff_inlink_request_frame(inlink); return 0; } } - if (s->status && pts >= s->status_pts) { - ff_outlink_set_status(outlink, s->status, s->status_pts); + if (s->input.status && pts >= s->input.status_pts) { + ff_outlink_set_status(outlink, s->input.status, s->input.status_pts); return 0; } - ret = pl_queue_update(s->queue, &mix, pl_queue_params( + ret = pl_queue_update(s->input.queue, &mix, pl_queue_params( .pts = pts * av_q2d(outlink->time_base), .radius = pl_frame_mix_radius(&s->params), .vsync_duration = av_q2d(av_inv_q(outlink->frame_rate)), @@ -947,7 +971,7 @@ static int libplacebo_activate(AVFilterContext *ctx) return 0; case PL_QUEUE_OK: if (!s->fps.num) - av_fifo_drain2(s->out_pts, 1); + av_fifo_drain2(s->input.out_pts, 1); return output_frame_mix(ctx, &mix, pts); case PL_QUEUE_ERR: return AVERROR_EXTERNAL; From patchwork Sun Jun 18 11:16:55 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Haas X-Patchwork-Id: 42186 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:be15:b0:121:b37c:e101 with SMTP id ge21csp56452pzb; Sun, 18 Jun 2023 04:20:43 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ7dWwubZcFxXame6+fnDghiZjwke9BmY4cDgxJVV/bmF8KjV6YEMTiiM/PIjwT9qHRUMw/7 X-Received: by 2002:a17:907:7287:b0:973:cc48:f19d with SMTP id dt7-20020a170907728700b00973cc48f19dmr6574587ejc.52.1687087243213; Sun, 18 Jun 2023 04:20:43 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1687087243; cv=none; d=google.com; s=arc-20160816; b=fsTTPnWCK7t7dLZufi3FM5XTYkgV585A/2f0JNPtBFUC+PhdoPkQG2Rv6HfyWziOz6 wIIEm3MjJUmBBfIbV9CuuS9KA05ix5xAN4ToPTU317Jw+jWYlwHHYDgwDZLJLX/CXGo+ AA8Z7gmwMp1g+7gHbndJEd3wRUDXghJr3KCgUiqu/19uh8Afol0GFYyZpFWkMRGTveV3 3oVu1RttJ3cFkr4vY6rZJNDEdmwJfYF6T0NLlVHli/l1AXTEwFZyoemeZofkRKPsqwrz rtRXeDJhtx/D2d/BIR9mp1JGT7f+joo2xAjKGKmUUz2857voSdLr8YD5KLMQ6NXGoZqN c7+w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature:delivered-to; bh=jZvvsf2y87BTL1SmTTXOPevMoIc9D8LprM4USRZw0HE=; b=IbmUqAVDhnKgpMfqPhXJp1N3gMMT8FYfyWfTe6kuqhF6xbfs0VTzz92mZN5maAQc8P cViWQhVA2sfgVo3EknM8PYrc8FWjnOcazx7ZYUYzZI076O3HATq86e+c6Qj2v3ybCKoF K9kwzZcw4pYXjIkKLA6dmpgX0WOjB3OP4x5jK/EVlKf0k9uzJpUzydNB6H4nZ2YXCXB4 NE2+4EwPQyOyTatxI6DU8reze1Un1OcL9j7U6aU1vlRXERj6s4N/bmaCRN0I/3blwTVI +Rw0hGmWn4K36le2TGVyrZz/g/9XAjnKA+466pZl0kIGCmJKw/6uGhbeEgkUjjk+17pr lCZA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@haasn.xyz header.s=mail header.b=OvjR1Tf5; 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 rl26-20020a170907217a00b0094f7bc61a0esi13218763ejb.969.2023.06.18.04.20.42; Sun, 18 Jun 2023 04:20:43 -0700 (PDT) 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=@haasn.xyz header.s=mail header.b=OvjR1Tf5; 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 8FB8668BF8B; Sun, 18 Jun 2023 14:20:16 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from haasn.dev (haasn.dev [78.46.187.166]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 3F3E768BF5A for ; Sun, 18 Jun 2023 14:20:09 +0300 (EEST) Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id EFB10434A0; Sun, 18 Jun 2023 13:20:08 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1687087209; bh=fNwcXD2CIdKzCJs9oQqwO1Gec7Kq74EBBmI+yYOqXqo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=OvjR1Tf5BbkMNzj/mJM5h3Z8dgjwwyEO3CGp9t+8tClLCajsVxPxtjjO58qpdh2nP p3u1JOb1ftLMp6tMZUhXYcKgRQeNS8GItwwhE/XoGSnqRoj/dlJVjXHiotA58x6o4N laiU9CJqt7/fn4slTKvwv2cV+atPrselKo9HaCg8= From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Sun, 18 Jun 2023 13:16:55 +0200 Message-ID: <20230618111955.40994-5-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230618111955.40994-2-ffmpeg@haasn.xyz> References: <20230618111955.40994-2-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 03/22] lavfi/vf_libplacebo: move input handling to separate function X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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: Niklas Haas Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: XxKjWrNm5FAm From: Niklas Haas To be re-used once we support more than one input. --- libavfilter/vf_libplacebo.c | 45 ++++++++++++++++++++++++------------- 1 file changed, 29 insertions(+), 16 deletions(-) diff --git a/libavfilter/vf_libplacebo.c b/libavfilter/vf_libplacebo.c index 10fd4327458..879a3a05086 100644 --- a/libavfilter/vf_libplacebo.c +++ b/libavfilter/vf_libplacebo.c @@ -896,23 +896,19 @@ static void discard_frame(const struct pl_source_frame *src) av_frame_free(&avframe); } -static int libplacebo_activate(AVFilterContext *ctx) +static int handle_input(AVFilterContext *ctx, LibplaceboInput *input) { int ret, status; LibplaceboContext *s = ctx->priv; - AVFilterLink *inlink = ctx->inputs[0]; AVFilterLink *outlink = ctx->outputs[0]; AVFrame *in; int64_t pts; - FF_FILTER_FORWARD_STATUS_BACK(outlink, inlink); - pl_log_level_update(s->log, get_log_level()); - - while ((ret = ff_inlink_consume_frame(inlink, &in)) > 0) { + while ((ret = ff_inlink_consume_frame(input->link, &in)) > 0) { in->opaque = s; - pl_queue_push(s->input.queue, &(struct pl_source_frame) { - .pts = in->pts * av_q2d(inlink->time_base), - .duration = in->duration * av_q2d(inlink->time_base), + pl_queue_push(input->queue, &(struct pl_source_frame) { + .pts = in->pts * av_q2d(input->link->time_base), + .duration = in->duration * av_q2d(input->link->time_base), .first_field = pl_field_from_avframe(in), .frame_data = in, .map = map_frame, @@ -922,22 +918,39 @@ static int libplacebo_activate(AVFilterContext *ctx) if (!s->fps.num) { /* Internally queue an output frame for the same PTS */ - av_assert1(!av_cmp_q(inlink->time_base, outlink->time_base)); - av_fifo_write(s->input.out_pts, &in->pts, 1); + pts = av_rescale_q(in->pts, input->link->time_base, outlink->time_base); + av_fifo_write(input->out_pts, &pts, 1); } } if (ret < 0) return ret; - if (!s->input.status && ff_inlink_acknowledge_status(inlink, &status, &pts)) { - pts = av_rescale_q_rnd(pts, inlink->time_base, outlink->time_base, + if (!input->status && ff_inlink_acknowledge_status(input->link, &status, &pts)) { + pts = av_rescale_q_rnd(pts, input->link->time_base, outlink->time_base, AV_ROUND_UP); - pl_queue_push(s->input.queue, NULL); /* Signal EOF to pl_queue */ - s->input.status = status; - s->input.status_pts = pts; + pl_queue_push(input->queue, NULL); /* Signal EOF to pl_queue */ + input->status = status; + input->status_pts = pts; } + return 0; +} + +static int libplacebo_activate(AVFilterContext *ctx) +{ + int ret; + LibplaceboContext *s = ctx->priv; + AVFilterLink *inlink = ctx->inputs[0]; + AVFilterLink *outlink = ctx->outputs[0]; + int64_t pts; + + FF_FILTER_FORWARD_STATUS_BACK(outlink, inlink); + pl_log_level_update(s->log, get_log_level()); + + if ((ret = handle_input(ctx, &s->input)) < 0) + return ret; + if (ff_outlink_frame_wanted(outlink)) { struct pl_frame_mix mix; enum pl_queue_status ret; From patchwork Sun Jun 18 11:16:56 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Haas X-Patchwork-Id: 42187 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:be15:b0:121:b37c:e101 with SMTP id ge21csp56524pzb; Sun, 18 Jun 2023 04:20:54 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ5gOVIfqKxGu0aDXP5qAKtAzW6FzjgCiHEvd4hk9wCilCqbGA8WEjjgne81Mzf7pEF2tJBg X-Received: by 2002:a17:907:97d2:b0:978:8685:71cd with SMTP id js18-20020a17090797d200b00978868571cdmr6969104ejc.71.1687087253896; Sun, 18 Jun 2023 04:20:53 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1687087253; cv=none; d=google.com; s=arc-20160816; b=y9MHv5R0/5ZGwxRdIQtsMiyHOxLTwCoFHeHMQ7ZZWugo/zxtVP77oTxR/BUJFtlD2U p/uV5GCGdDCPf/f/ub+dCnh8RZ059lcKwqkVMC+eQr2L6s5Nygcabc6Q5GYKiYhHVrOj ROw+J1bZLTzgmemQxXpWM/1azJcrpg1Du8bRBxIYMZ24W+hdhtRiW0rotTK8IlZT0bzi RUt+02c/9BaSzkqeEnkKA55PSRVIWHEKxeFP/BQQ8pXflBsvDvUWqwlZ3uQC5LqgSiok fR1xqf/H2LGnioA3UIL0rhtsy3pcqV6tUChkCSn5Qp9hTi1xuOGPrnjrHCI8eQ8Ummhi Kbqw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature:delivered-to; bh=O2O2S+pVmcNaxzINjymCIuloqQwHftWtKUO8FV8kfVE=; b=SWdQwLl9xF10IP34mET6ygKtISymUJcUMm3CqcpQuQaZWIpsNi/3dpkHbYL1DwuoM8 mQvlepB+zAsSK2fs6aNgsyHBIhs3FLeZ5cuiKZBbe6qCDcE/CEEhvDMlQ9b5lZSWweKI IB0sKZgvg8XIcTfdA7S4KCRYVq3si0ITby57+/rtSnI2DDYBj4oK9iVm/IH1XOaZ5ML+ 5o+DgiCKbUCS7sE3yW4OzyqTZlaVp4XLI5tLlh4WdW6N53A8SfzhLFcJyIG3Gy4NwJAg bb1ZI/A/LNCzWzwKPTfvUt30LY6ht8SJ2Mq7aIapKM93C+PsDowD1JysDwhuPLFW/XVO UAVg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@haasn.xyz header.s=mail header.b=pY1mLdrG; 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 p24-20020a1709061b5800b009888b71c367si301875ejg.720.2023.06.18.04.20.52; Sun, 18 Jun 2023 04:20:53 -0700 (PDT) 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=@haasn.xyz header.s=mail header.b=pY1mLdrG; 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 8C69768BFF2; Sun, 18 Jun 2023 14:20:17 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from haasn.dev (haasn.dev [78.46.187.166]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 8808F68BF5A for ; Sun, 18 Jun 2023 14:20:09 +0300 (EEST) Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id 3E33D436B4; Sun, 18 Jun 2023 13:20:09 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1687087209; bh=BMaBBmBWW/DHey1UfXn+O84YiqBWY/EXo/Heb9rc98s=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=pY1mLdrGFtPCQW2cVfJII+EAcEPUABdIhOCTxNHGtX7Ska17AGyxSwjasdDFfjG8R /0NCIWvKya33NZqN+0wTo8BBw4thpY9X8xFv8QsoVZxv6ibv8A97MOsYpy3/4HuYxl q6iAXbNnRg/tWpFsgvjsEmuEcAT7O1+VSD8UF2jU= From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Sun, 18 Jun 2023 13:16:56 +0200 Message-ID: <20230618111955.40994-6-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230618111955.40994-2-ffmpeg@haasn.xyz> References: <20230618111955.40994-2-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 04/22] lavfi/vf_libplacebo: cosmetic X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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: Niklas Haas Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: OCVE/vTtK14O From: Niklas Haas Assign local variable 'in' for 's->input' and replace 'inlink' by 'in->link' to avoid hard-coding ID 0 in more than one place. --- libavfilter/vf_libplacebo.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/libavfilter/vf_libplacebo.c b/libavfilter/vf_libplacebo.c index 879a3a05086..beddd2f796d 100644 --- a/libavfilter/vf_libplacebo.c +++ b/libavfilter/vf_libplacebo.c @@ -941,14 +941,14 @@ static int libplacebo_activate(AVFilterContext *ctx) { int ret; LibplaceboContext *s = ctx->priv; - AVFilterLink *inlink = ctx->inputs[0]; + LibplaceboInput *in = &s->input; AVFilterLink *outlink = ctx->outputs[0]; int64_t pts; - FF_FILTER_FORWARD_STATUS_BACK(outlink, inlink); + FF_FILTER_FORWARD_STATUS_BACK(outlink, in->link); pl_log_level_update(s->log, get_log_level()); - if ((ret = handle_input(ctx, &s->input)) < 0) + if ((ret = handle_input(ctx, in)) < 0) return ret; if (ff_outlink_frame_wanted(outlink)) { @@ -957,22 +957,22 @@ static int libplacebo_activate(AVFilterContext *ctx) if (s->fps.num) { pts = outlink->frame_count_out; - } else if (av_fifo_peek(s->input.out_pts, &pts, 1, 0) < 0) { + } else if (av_fifo_peek(in->out_pts, &pts, 1, 0) < 0) { /* No frames queued */ - if (s->input.status) { - pts = s->input.status_pts; + if (in->status) { + pts = in->status_pts; } else { - ff_inlink_request_frame(inlink); + ff_inlink_request_frame(in->link); return 0; } } - if (s->input.status && pts >= s->input.status_pts) { - ff_outlink_set_status(outlink, s->input.status, s->input.status_pts); + if (in->status && pts >= in->status_pts) { + ff_outlink_set_status(outlink, in->status, in->status_pts); return 0; } - ret = pl_queue_update(s->input.queue, &mix, pl_queue_params( + ret = pl_queue_update(in->queue, &mix, pl_queue_params( .pts = pts * av_q2d(outlink->time_base), .radius = pl_frame_mix_radius(&s->params), .vsync_duration = av_q2d(av_inv_q(outlink->frame_rate)), @@ -980,11 +980,11 @@ static int libplacebo_activate(AVFilterContext *ctx) switch (ret) { case PL_QUEUE_MORE: - ff_inlink_request_frame(inlink); + ff_inlink_request_frame(in->link); return 0; case PL_QUEUE_OK: if (!s->fps.num) - av_fifo_drain2(s->input.out_pts, 1); + av_fifo_drain2(in->out_pts, 1); return output_frame_mix(ctx, &mix, pts); case PL_QUEUE_ERR: return AVERROR_EXTERNAL; From patchwork Sun Jun 18 11:16:57 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Haas X-Patchwork-Id: 42188 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:be15:b0:121:b37c:e101 with SMTP id ge21csp56592pzb; Sun, 18 Jun 2023 04:21:02 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ5DR7ypXt9rE9i6NOekHH6s5m1foGsq7tB6nKXFaqDDzomyjigTW0rE/mRh25NJJGRhtDFi X-Received: by 2002:a05:6402:2683:b0:51a:4c1e:c94a with SMTP id w3-20020a056402268300b0051a4c1ec94amr1985107edd.2.1687087262357; Sun, 18 Jun 2023 04:21:02 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1687087262; cv=none; d=google.com; s=arc-20160816; b=JB1ptMSFyAVWi6kfXcGqPV1ryDy1Lnzz+LiWuBjHHqvS/C4KVxN/1jhSO1gTRGa1IT NZSaNYUYAScHe6OvORbEZBCrRJb0hbfOj/rQHJiAb//gKba1M3c+bTCLN7hv7fu1TKJk 5b4JytMGx+B3iWEbackvK7uPymvkCARlg2b+kdM8rhdMkM3JiKVrbYI0dM+V5nC6o8ZK 0X9b7EmsaMZdgSbOmuH485FbxTBDL95rF2PZBJeIM0YKgtbfle8o6hVVHRX7Wx2Dy/YT dLuNt5pf0emqCniNNcAc9/0x/rH3YapDoD/Qqk0ldET79+Xx95+XTKAvXN5cTCYlcDfF P6Dw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature:delivered-to; bh=gXpt+0gzXT5WRRJ1GJqaLbR/S5HK+/xsLT6voUF0mIM=; b=FuTMHqtQLByxgenPYkhPYNOF9wgLMpmMEhn2FawV1ReIZgF7yDUTa4u7YU6lRrAKo8 OTIB5HLOU2CrnW9pCO4qjENJrpRQ923CQ3qj1tKgnpW6YMI88lhttMpylLaRFARxpAeD LaCFZc7JwUPYUWxg7cXUZeLOy2pb7dEzvu+FD8o9eerWZ6Vxq+XH0r949GcSeb9Flizo SDK6noxbdSaApIQbRHv15YkGlNQSiq68y/lrZsUJR0caAdBk1/V54D8nNaVXA4bqQ2rV oxYzEpoSFhrAKIz82Vl3OqednwsbI+CQHx163LwZ6laFNe749zRq46hVG+ay5Pajy3T/ ZgCQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@haasn.xyz header.s=mail header.b=eNEvimL+; 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 d22-20020a056402079600b0051a27fb3d58si4252212edy.118.2023.06.18.04.21.02; Sun, 18 Jun 2023 04:21:02 -0700 (PDT) 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=@haasn.xyz header.s=mail header.b=eNEvimL+; 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 AE6C168BFE2; Sun, 18 Jun 2023 14:20:18 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from haasn.dev (haasn.dev [78.46.187.166]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id C8F3368BFA1 for ; Sun, 18 Jun 2023 14:20:10 +0300 (EEST) Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id 7E62B43FA9; Sun, 18 Jun 2023 13:20:09 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1687087209; bh=K9zvQFGnHxIr5LKeLluE63FfB6PPUbQUvOTCfdndtpg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=eNEvimL+MCFBbiAMg2s3TRNDERTi7QluKO3LpucdB3btFmgpJmVAel22smy6NW7Ek sORXE6sGiaWKjyJQWL4yZ5GJ3gveuRke43A3bj3Nfao8ZQ/DYPyicyqCJt9QfOBNK9 PQmuJrG7uMGDU8ISu0nLIyRhWgq9IBdgROVjJNf4= From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Sun, 18 Jun 2023 13:16:57 +0200 Message-ID: <20230618111955.40994-7-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230618111955.40994-2-ffmpeg@haasn.xyz> References: <20230618111955.40994-2-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 05/22] lavfi/vf_libplacebo: move temporary vars into per-input struct X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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: Niklas Haas Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: Z2XVKsB5PIgl From: Niklas Haas Including the queue status, because these will need to be re-queried inside output_frame_mix when that function is refactored to handle multiple inputs. --- libavfilter/vf_libplacebo.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/libavfilter/vf_libplacebo.c b/libavfilter/vf_libplacebo.c index beddd2f796d..4baa766bacf 100644 --- a/libavfilter/vf_libplacebo.c +++ b/libavfilter/vf_libplacebo.c @@ -117,6 +117,8 @@ enum var_name { typedef struct LibplaceboInput { pl_renderer renderer; pl_queue queue; + enum pl_queue_status qstatus; + struct pl_frame_mix mix; ///< temporary storage AVFilterLink *link; AVFifo *out_pts; ///< timestamps of wanted output frames int64_t status_pts; @@ -952,9 +954,6 @@ static int libplacebo_activate(AVFilterContext *ctx) return ret; if (ff_outlink_frame_wanted(outlink)) { - struct pl_frame_mix mix; - enum pl_queue_status ret; - if (s->fps.num) { pts = outlink->frame_count_out; } else if (av_fifo_peek(in->out_pts, &pts, 1, 0) < 0) { @@ -972,20 +971,20 @@ static int libplacebo_activate(AVFilterContext *ctx) return 0; } - ret = pl_queue_update(in->queue, &mix, pl_queue_params( + in->qstatus = pl_queue_update(in->queue, &in->mix, pl_queue_params( .pts = pts * av_q2d(outlink->time_base), .radius = pl_frame_mix_radius(&s->params), .vsync_duration = av_q2d(av_inv_q(outlink->frame_rate)), )); - switch (ret) { + switch (in->qstatus) { case PL_QUEUE_MORE: ff_inlink_request_frame(in->link); return 0; case PL_QUEUE_OK: if (!s->fps.num) av_fifo_drain2(in->out_pts, 1); - return output_frame_mix(ctx, &mix, pts); + return output_frame_mix(ctx, &in->mix, pts); case PL_QUEUE_ERR: return AVERROR_EXTERNAL; } From patchwork Sun Jun 18 11:16:58 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Haas X-Patchwork-Id: 42189 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:be15:b0:121:b37c:e101 with SMTP id ge21csp56649pzb; Sun, 18 Jun 2023 04:21:11 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ479QvzOazGVrfv6EfgeEkegvVKbFVBNqydr07uYgKDLkoTelHev+x9M/RLcXMZx+SA6/Ji X-Received: by 2002:a17:906:4fc5:b0:96f:d556:b926 with SMTP id i5-20020a1709064fc500b0096fd556b926mr5884444ejw.77.1687087271220; Sun, 18 Jun 2023 04:21:11 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1687087271; cv=none; d=google.com; s=arc-20160816; b=pfrRd4KFAztiRv122Aiq5kTYjyAsyoBIcwMxqaq7WElSzpra4aFGcZ3URehA2PDwjw Moudqfl1Iz18wXkuemhjvp0kBjiNv4X2WUnid9mxmSDl+ilOw6rarGmdPaNBp7alJwdV XeIl8AI6ovUCaBWzFcWOgcwFqHdeieoYf3SefQtSCPfobeTvnazHJyPr+YdWQtJAXOjl oRqgkjFCDF9jOtSvu2pr60dVJvJhPBDf0TvRYVlk9cLNY10/TxxPkDc4fY1VYYod0KUn Nt+vs1ZeVOoYfgY0+H/W2q7h0WRHZn/yrpGMvzTQjxIyP+DnrFkhOnYWCtEHQ62xxB2d ScLw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature:delivered-to; bh=QItjZLjxaEeYRRaRD3GQc4Ps/qR0RIDkOUKl4uSvKXI=; b=GDKHMODGWVgV1YGpmYZPm4v72z0IJgD/LqP7/9Z9Mf1IK8S88NaJkc+TBeBRQlmlYj 2zpzb/AphqqiA6LaOPWwsY4+MNXLMLU6tzx21nl5iFkMRzJpqTHfd6j/S5i5ZEu32hDu 0+ahWqXu65T03a9GF/CXGDfNXhKdKOJKok6xZl6vGi5NuNKK3NsurmqItTbIb4patHx+ luaEm/iy2iFWWvFiq5qTF9AyA8lJVWAql59jEVfOyZyuS1hvCFHWDA9oHXnCiL10v+gu lBd7w+RuSMZS51As6Q223pr0mRw+uG/CCYJpAAw1kyjvrDj8LqcVmGn/fbHIRtFYtDd4 Vfew== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@haasn.xyz header.s=mail header.b=DHNZw2Tr; 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 r8-20020a170906350800b0098886e6c322si399350eja.915.2023.06.18.04.21.10; Sun, 18 Jun 2023 04:21:11 -0700 (PDT) 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=@haasn.xyz header.s=mail header.b=DHNZw2Tr; 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 BC45F68C08C; Sun, 18 Jun 2023 14:20:19 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from haasn.dev (haasn.dev [78.46.187.166]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id D18FF68BFA9 for ; Sun, 18 Jun 2023 14:20:10 +0300 (EEST) Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id BCA7743FC3; Sun, 18 Jun 2023 13:20:09 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1687087209; bh=zv97IvB3Ya9Sgjx532DMpkfE+Nb2vtS35mkCKDfGoZ0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=DHNZw2TrP3BZWE+S7HQmcs9UBdq4XynAeRU4NdeW01fgIhNL/K/L/315wz4cjLgM9 a/GVEY6lMkhLQB2JV0FsG6CRnaD++dqz0nOhSY38Uo6fL6RKMcpGpzh7owUu3Ee47E HVacFyjCZQBH0533guMRFVFLx57F1wYbUsTot3t0= From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Sun, 18 Jun 2023 13:16:58 +0200 Message-ID: <20230618111955.40994-8-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230618111955.40994-2-ffmpeg@haasn.xyz> References: <20230618111955.40994-2-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 06/22] lavif/vf_libplacebo: remove pl_frame_mix from output_frame_mix X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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: Niklas Haas Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: 4CqeVZ0C7XPb From: Niklas Haas Instead, rename this function to `output_frame` and make it pull the `pl_frame_mix` from the input structure. Step towards handling multiple inputs. --- libavfilter/vf_libplacebo.c | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/libavfilter/vf_libplacebo.c b/libavfilter/vf_libplacebo.c index 4baa766bacf..0289187b46b 100644 --- a/libavfilter/vf_libplacebo.c +++ b/libavfilter/vf_libplacebo.c @@ -760,20 +760,19 @@ static void update_crops(AVFilterContext *ctx, } } -/* Construct and emit an output frame for a given frame mix */ -static int output_frame_mix(AVFilterContext *ctx, - struct pl_frame_mix *mix, - int64_t pts) +/* Construct and emit an output frame for a given timestamp */ +static int output_frame(AVFilterContext *ctx, int64_t pts) { int err = 0, ok, changed_csp; LibplaceboContext *s = ctx->priv; + LibplaceboInput *in = &s->input; AVFilterLink *outlink = ctx->outputs[0]; const AVPixFmtDescriptor *outdesc = av_pix_fmt_desc_get(outlink->format); struct pl_frame target; const AVFrame *ref; AVFrame *out; uint64_t ref_sig; - if (!mix->num_frames) + if (!in->mix.num_frames) return 0; out = ff_get_video_buffer(outlink, outlink->w, outlink->h); @@ -781,11 +780,11 @@ static int output_frame_mix(AVFilterContext *ctx, return AVERROR(ENOMEM); /* Use the last frame before current PTS value as reference */ - for (int i = 0; i < mix->num_frames; i++) { - if (i && mix->timestamps[i] > 0.0f) + for (int i = 0; i < in->mix.num_frames; i++) { + if (i && in->mix.timestamps[i] > 0.0f) break; - ref = pl_get_mapped_avframe(mix->frames[i]); - ref_sig = mix->signatures[i]; + ref = pl_get_mapped_avframe(in->mix.frames[i]); + ref_sig = in->mix.signatures[i]; } RET(av_frame_copy_props(out, ref)); @@ -851,8 +850,8 @@ static int output_frame_mix(AVFilterContext *ctx, goto fail; } - update_crops(ctx, mix, &target, ref_sig, out->pts * av_q2d(outlink->time_base)); - pl_render_image_mix(s->input.renderer, mix, &target, &s->params); + update_crops(ctx, &in->mix, &target, ref_sig, out->pts * av_q2d(outlink->time_base)); + pl_render_image_mix(in->renderer, &in->mix, &target, &s->params); if (outdesc->flags & AV_PIX_FMT_FLAG_HWACCEL) { pl_unmap_avframe(s->gpu, &target); @@ -984,7 +983,7 @@ static int libplacebo_activate(AVFilterContext *ctx) case PL_QUEUE_OK: if (!s->fps.num) av_fifo_drain2(in->out_pts, 1); - return output_frame_mix(ctx, &in->mix, pts); + return output_frame(ctx, pts); case PL_QUEUE_ERR: return AVERROR_EXTERNAL; } From patchwork Sun Jun 18 11:16:59 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Haas X-Patchwork-Id: 42197 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:be15:b0:121:b37c:e101 with SMTP id ge21csp57149pzb; Sun, 18 Jun 2023 04:22:30 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ75F/zYXrjy+0wUogjxp51zhUxdd7l0xrC85BjeC5TZtxIWujTdKhI20Ci7n93MJVXBjC/o X-Received: by 2002:a17:906:730c:b0:988:9d0f:db52 with SMTP id di12-20020a170906730c00b009889d0fdb52mr318421ejc.35.1687087349780; Sun, 18 Jun 2023 04:22:29 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1687087349; cv=none; d=google.com; s=arc-20160816; b=OeOoaHDlTFAeJ/8y2l20hockbckMPFEQLiGq2nGTE/GS1I6pxg1kH8eQUPMbcBI79j MynPedxpSiFeWEhMzChi/UyFFdqolSdJaZLLhLeHOQJgu5UysdZrzz2PE1FYl+TPPMwF eV2omPpSaivKkfgojkpe3kigbFaQqS3xuWl74rHdj+G69PeAXiT3ffr42WEVrnY03fZ5 Nih6zQwoyUPNu4n9PDMOkDAoofFV0JO3vFNNwN/ViH8YBxv4LmFf71FkmAcTTy7RYGEe JmXEWintaFR3/im1NdfmLJk+5V1X93ydXg924TxZM1nsgJCzXSq6vTz3IT3jty5cbIHF 67Xw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature:delivered-to; bh=PrtfX+y3ISJ71u9jrLidFkCYkjcSas456OHiptUGwI4=; b=qG+HspLBPzaBxJGXZ6KPCHJRuGvx3SE7BNDmtprvKwRtK5XggSH8AJpICiMHFYc2bZ Z7ImMpC/HvH3hHnIPRYHhLMhgs4ek9nXhjXzqWNGQsk7BQ3m7zMxEntDHIdhWvDaj7ut 355sKkLs5RK1CAqz6KNS36dxU5PLSDAe/r2ML7u3KBt6zRJm7np09e+u8kQv4V3qMtbW WnTFg6gcejLhyhS5DexOBS4RGv41t13ALfYyLS9DBeTx5DFJcPiWkTQTto9REi/z8r02 AxEcImNpgi2F7Ak2w6DIbQa1ITPxEJx8bG0N86MP85s2mCGz4Q8ONA4EnRhngQ5UQnmG EkDQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@haasn.xyz header.s=mail header.b=i6nlzyIl; 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 ca10-20020a170906a3ca00b009864522956bsi3111695ejb.94.2023.06.18.04.22.29; Sun, 18 Jun 2023 04:22:29 -0700 (PDT) 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=@haasn.xyz header.s=mail header.b=i6nlzyIl; 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 5D9A068BFCE; Sun, 18 Jun 2023 14:20:28 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from haasn.dev (haasn.dev [78.46.187.166]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id CDAF768BF50 for ; Sun, 18 Jun 2023 14:20:13 +0300 (EEST) Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id 08E0943FD1; Sun, 18 Jun 2023 13:20:10 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1687087210; bh=XjmHRAvQdX3OfvU3vFeXaIsQ6Gs17YxU16Kdk73QKO8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=i6nlzyIlNGB5pv89DrvwvEVxeWHsPBFc9Jn6Ac0Da4czWUIsqCxPYozHCdX7BSXYV g0FhX930U9tBqR75e8EwlEknNb8X+SVezjRB+Pz7uyhvNb8+yVXSiNEofrWDGYDMqE 8rkbfX3AQWhi1Ry8aMQUSTrAuWJ+l15/pMZ008pU= From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Sun, 18 Jun 2023 13:16:59 +0200 Message-ID: <20230618111955.40994-9-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230618111955.40994-2-ffmpeg@haasn.xyz> References: <20230618111955.40994-2-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 07/22] lavfi/vf_libplacebo: factor out ref frame logic X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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: Niklas Haas Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: vPZuxHBmSFPa From: Niklas Haas Instead of finding the ref frame in output_frame() and then passing its signature to update_crops(), pull out the logic and invoke it a second time inside update_crops(). This may seem wasteful at present, but will actually become required in the future, since update_crops() runs on *every* input, and needs values specific to that input (which the signature isn't), while output_frame() is only interested in a single input. It's much easier to just split the logic cleanly. --- libavfilter/vf_libplacebo.c | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/libavfilter/vf_libplacebo.c b/libavfilter/vf_libplacebo.c index 0289187b46b..b83df24a84b 100644 --- a/libavfilter/vf_libplacebo.c +++ b/libavfilter/vf_libplacebo.c @@ -706,11 +706,21 @@ fail: return err; } +static const AVFrame *ref_frame(const struct pl_frame_mix *mix) +{ + for (int i = 0; i < mix->num_frames; i++) { + if (i+1 == mix->num_frames || mix->timestamps[i+1] > 0) + return pl_get_mapped_avframe(mix->frames[i]); + } + return NULL; +} + static void update_crops(AVFilterContext *ctx, struct pl_frame_mix *mix, struct pl_frame *target, - uint64_t ref_sig, double target_pts) + double target_pts) { LibplaceboContext *s = ctx->priv; + const AVFrame *ref = ref_frame(mix); for (int i = 0; i < mix->num_frames; i++) { // Mutate the `pl_frame.crop` fields in-place. This is fine because we @@ -745,7 +755,7 @@ static void update_crops(AVFilterContext *ctx, image->crop.x1 = image->crop.x0 + s->var_values[VAR_CROP_W]; image->crop.y1 = image->crop.y0 + s->var_values[VAR_CROP_H]; - if (mix->signatures[i] == ref_sig) { + if (src == ref) { /* Only update the target crop once, for the 'reference' frame */ target->crop.x0 = av_expr_eval(s->pos_x_pexpr, s->var_values, NULL); target->crop.y0 = av_expr_eval(s->pos_y_pexpr, s->var_values, NULL); @@ -768,25 +778,16 @@ static int output_frame(AVFilterContext *ctx, int64_t pts) LibplaceboInput *in = &s->input; AVFilterLink *outlink = ctx->outputs[0]; const AVPixFmtDescriptor *outdesc = av_pix_fmt_desc_get(outlink->format); + const AVFrame *ref = ref_frame(&in->mix); struct pl_frame target; - const AVFrame *ref; AVFrame *out; - uint64_t ref_sig; - if (!in->mix.num_frames) + if (!ref) return 0; out = ff_get_video_buffer(outlink, outlink->w, outlink->h); if (!out) return AVERROR(ENOMEM); - /* Use the last frame before current PTS value as reference */ - for (int i = 0; i < in->mix.num_frames; i++) { - if (i && in->mix.timestamps[i] > 0.0f) - break; - ref = pl_get_mapped_avframe(in->mix.frames[i]); - ref_sig = in->mix.signatures[i]; - } - RET(av_frame_copy_props(out, ref)); out->pts = pts; out->width = outlink->w; @@ -850,7 +851,7 @@ static int output_frame(AVFilterContext *ctx, int64_t pts) goto fail; } - update_crops(ctx, &in->mix, &target, ref_sig, out->pts * av_q2d(outlink->time_base)); + update_crops(ctx, &in->mix, &target, out->pts * av_q2d(outlink->time_base)); pl_render_image_mix(in->renderer, &in->mix, &target, &s->params); if (outdesc->flags & AV_PIX_FMT_FLAG_HWACCEL) { From patchwork Sun Jun 18 11:17:00 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Haas X-Patchwork-Id: 42198 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:be15:b0:121:b37c:e101 with SMTP id ge21csp57185pzb; Sun, 18 Jun 2023 04:22:38 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ5ijJn6UV4v8S4mIXSTOjEv86I60BrPPLHr2/coo33wZjzv9IqdRK9BvGGz63agXeLCaVyL X-Received: by 2002:a17:907:944e:b0:987:1c6b:6e6d with SMTP id dl14-20020a170907944e00b009871c6b6e6dmr4093285ejc.28.1687087358463; Sun, 18 Jun 2023 04:22:38 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1687087358; cv=none; d=google.com; s=arc-20160816; b=KMb5qy/YmDNTRFUvQNeSBmKEKvRBqTaE7DFXZP2sNYQ9wXIP6Z9PEsgZFjVBaOcwdV ahTIcHWn5xe8K2lz1OcU7O9v4eBl3VeI0mTCYjyzMqkEuZGCUKiIAUJm4H2HWmPx5xz5 pkK/hjMqNNXHLdbT1NXbFfO9BxOxt1E1cJLJedUGojyQMGZjjGZPOVR+iUYEdl97MM2g HjU3KCKlhWAkmFLQa/WpnttXuw/yMq8XhthBxH0f6BG+Rf1UfnszFkDsKwsbmVIp+O8O ISEE+7SML6U5KinUWH6ZeJ2boiBerixkSVASkqOhERlh1zbdssfgQRzr51lJFvmV7W1v 9/kw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature:delivered-to; bh=nTJEpYA9urqGhr8v0udbeQ7foRi4bPpTPh8lE1xqLUU=; b=B2giG28SR7s+OmczSRvjkmEwr5j/vE0tGwo8MzCiFLlpZUBu33JgnySHUz91gv4UVC 8YaLFkGKi8nNic36NNDali6zGyAg3p7nc7fGRrVzx6vppbtWCaiOs5drsN0fUtMTDsWj 5knxZ4Qyhs6kujd0UiIRD+uQqFV1iYzFbLt6+e1x28kZI1PQYSQ4X3dJcbJLESX7xsrF aOoQ7f0aU2vHE4YMrtye21dsJfjsrX9K/2gQzaaJxrHl9tCRm7AQf3eq7sajV0NkxSMX 3yWAx+BOQGxmojm0z/PKdncqdeSf5Mi16MQFq2DkbG9CMiheWaL0skUY+Ykqwnp5EU9M XekQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@haasn.xyz header.s=mail header.b=VSuHppsK; 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 jp23-20020a170906f75700b00988a13c6a90si61902ejb.601.2023.06.18.04.22.38; Sun, 18 Jun 2023 04:22:38 -0700 (PDT) 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=@haasn.xyz header.s=mail header.b=VSuHppsK; 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 386F068C1CC; Sun, 18 Jun 2023 14:20:29 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from haasn.dev (haasn.dev [78.46.187.166]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id D979168C047 for ; Sun, 18 Jun 2023 14:20:13 +0300 (EEST) Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id 4FAB84A5A4; Sun, 18 Jun 2023 13:20:10 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1687087210; bh=y04IUW3cL1HARAjFcGEpSVoByb8wtEQGdTjIVyyeVJE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=VSuHppsKtylF3TsO4zCIZG2rnPJDJhXT/8lbdO8d+skO+WS3ycvQ7jRm3NMx6+cxr vQSYpkfJmd4XMcArmUKyRK6uSft6U9z45f7oW4CiOTazGhLYmFKFw7qaMkeDal85ay pXGR72GnqhE2AMDN2BfOe3OXh6yIUl3ePpfjNhoM= From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Sun, 18 Jun 2023 13:17:00 +0200 Message-ID: <20230618111955.40994-10-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230618111955.40994-2-ffmpeg@haasn.xyz> References: <20230618111955.40994-2-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 08/22] lavfi/vf_libplacebo: use correct link in update_crops() X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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: Niklas Haas Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: OpfadqKymBI4 From: Niklas Haas Instead of hard-coding input 0, pass the per-input structure and use the link contained inside it. --- libavfilter/vf_libplacebo.c | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/libavfilter/vf_libplacebo.c b/libavfilter/vf_libplacebo.c index b83df24a84b..408fb3918aa 100644 --- a/libavfilter/vf_libplacebo.c +++ b/libavfilter/vf_libplacebo.c @@ -715,19 +715,18 @@ static const AVFrame *ref_frame(const struct pl_frame_mix *mix) return NULL; } -static void update_crops(AVFilterContext *ctx, - struct pl_frame_mix *mix, struct pl_frame *target, - double target_pts) +static void update_crops(AVFilterContext *ctx, LibplaceboInput *in, + struct pl_frame *target, double target_pts) { LibplaceboContext *s = ctx->priv; - const AVFrame *ref = ref_frame(mix); + const AVFrame *ref = ref_frame(&in->mix); - for (int i = 0; i < mix->num_frames; i++) { + for (int i = 0; i < in->mix.num_frames; i++) { // Mutate the `pl_frame.crop` fields in-place. This is fine because we // own the entire pl_queue, and hence, the pointed-at frames. - struct pl_frame *image = (struct pl_frame *) mix->frames[i]; + struct pl_frame *image = (struct pl_frame *) in->mix.frames[i]; const AVFrame *src = pl_get_mapped_avframe(image); - double image_pts = src->pts * av_q2d(ctx->inputs[0]->time_base); + double image_pts = src->pts * av_q2d(in->link->time_base); /* Update dynamic variables */ s->var_values[VAR_IN_T] = s->var_values[VAR_T] = image_pts; @@ -851,7 +850,7 @@ static int output_frame(AVFilterContext *ctx, int64_t pts) goto fail; } - update_crops(ctx, &in->mix, &target, out->pts * av_q2d(outlink->time_base)); + update_crops(ctx, in, &target, out->pts * av_q2d(outlink->time_base)); pl_render_image_mix(in->renderer, &in->mix, &target, &s->params); if (outdesc->flags & AV_PIX_FMT_FLAG_HWACCEL) { From patchwork Sun Jun 18 11:17:01 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Haas X-Patchwork-Id: 42199 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:be15:b0:121:b37c:e101 with SMTP id ge21csp57234pzb; Sun, 18 Jun 2023 04:22:46 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ6KN0GnW/bI4z1yfpC70rVn8phOXYv5TASfo+lTLo8LPVZ7gKEJLe6EY00AMe2tVoLVNyJm X-Received: by 2002:a17:907:7287:b0:973:93e3:bc9a with SMTP id dt7-20020a170907728700b0097393e3bc9amr7343138ejc.6.1687087366622; Sun, 18 Jun 2023 04:22:46 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1687087366; cv=none; d=google.com; s=arc-20160816; b=LvO9J6W+OERaBSSriLfXmOzt5CWunQvbHMTPaX6mRHC49ql4qAykMmhKl2MFx3Qe9/ lr8fMGDXyXGsFBw+m9ySpHf+ngZVn9O0rb5IgyAqKWKhBGjcnnlJb64F7Gv9pG3HzogV mcaAhm3PzpRZAQ0vkekIb/9pX9MXgFTkFFdKO0x1J8lLv4oa3Lc33CrmYrVt4owLWNHG tzVcgDiqqIbS510UbIsroiEb8pttbuEGrfYsUVuZgdJ5daKQO7WWpW19+whpIugh+T5C CsUNoS23UExQPGvp4yQbjA6W3h9BXO3w4ZxGLqmKUpQrii/K/ZTSvwPWlkTiXt7qT0zO ksug== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature:delivered-to; bh=AWQBYRCqutHqmx5PBdZQbMONSW4Q6gzsJkNLscLWpM8=; b=DNxDuBwabPIn7dWuZsJ0Ri9xVH2Xy5PBELe0dUBfn6mP7W+NfLncT2lGvblTgV8B2b sq5Y9+vFcWG+Kk622UR8Ww6MDcntbF7Twj/hORbPBpWoL905DXJW7UNs7ksfgVVPVTUi 48pecli9ueeh4MbVNqLBwABjb3GAWXBbqPeEYRXAlEQWbkqol65Sh3DdPoFtefAGAhzf eJrdFhvgMuXbDc1wJ74T4M46wnDa1SmZyCPTgjK1oC+yEyrIyU1vrzS7ro2WoKByyGgV nX6ZmoaOiX4Etsmvi48LF+gAt7gx+Edyl5enQscx2gGYn5T2iPsBfX4Pb1TB1WhwMyKL twcQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@haasn.xyz header.s=mail header.b=mSxTywBI; 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 w24-20020aa7d298000000b0051a590aa5c5si235986edq.587.2023.06.18.04.22.46; Sun, 18 Jun 2023 04:22:46 -0700 (PDT) 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=@haasn.xyz header.s=mail header.b=mSxTywBI; 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 12CD868C1E6; Sun, 18 Jun 2023 14:20:30 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from haasn.dev (haasn.dev [78.46.187.166]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 2F28B68C05A for ; Sun, 18 Jun 2023 14:20:14 +0300 (EEST) Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id 89A3D4A698; Sun, 18 Jun 2023 13:20:10 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1687087210; bh=qS1j5vQ1G7B3CmSoznddbC3KKy549JU0/UjIauslt6U=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=mSxTywBIo1HtXFGkpbQ4pv4bMlBHTmd1107ZWAICye04ukS0Ke1EVSLd9xvfKs2C6 o49NbNQLpQ4d6WYq7+qlxb2dxf42dKu0FA40DLvsrpBcYe9leXgLoDyLnLZqLSVWP5 X9m9f6gixuoXWLLQF8Yb8IydqEjEjCo4QcjwOAc4= From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Sun, 18 Jun 2023 13:17:01 +0200 Message-ID: <20230618111955.40994-11-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230618111955.40994-2-ffmpeg@haasn.xyz> References: <20230618111955.40994-2-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 09/22] lavfi/vf_libplacebo: replace s->input by dynamic array X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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: Niklas Haas Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: WlppufhDwipr From: Niklas Haas For now, hard-coded to 1 element. --- libavfilter/vf_libplacebo.c | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/libavfilter/vf_libplacebo.c b/libavfilter/vf_libplacebo.c index 408fb3918aa..ee8780036cf 100644 --- a/libavfilter/vf_libplacebo.c +++ b/libavfilter/vf_libplacebo.c @@ -136,7 +136,8 @@ typedef struct LibplaceboContext { pl_tex tex[4]; /* input state */ - LibplaceboInput input; + LibplaceboInput *inputs; + int nb_inputs; /* settings */ char *out_format_string; @@ -660,7 +661,12 @@ static int init_vulkan(AVFilterContext *avctx, const AVVulkanDeviceContext *hwct } /* Initialize inputs */ - RET(input_init(avctx, avctx->inputs[0], &s->input)); + s->nb_inputs = 1; + s->inputs = av_calloc(s->nb_inputs, sizeof(*s->inputs)); + if (!s->inputs) + return AVERROR(ENOMEM); + for (int i = 0; i < s->nb_inputs; i++) + RET(input_init(avctx, avctx->inputs[i], &s->inputs[i])); /* fall through */ fail: @@ -677,7 +683,11 @@ static void libplacebo_uninit(AVFilterContext *avctx) pl_tex_destroy(s->gpu, &s->tex[i]); for (int i = 0; i < s->num_hooks; i++) pl_mpv_user_shader_destroy(&s->hooks[i]); - input_uninit(&s->input); + if (s->inputs) { + for (int i = 0; i < s->nb_inputs; i++) + input_uninit(&s->inputs[i]); + av_freep(&s->inputs); + } pl_vulkan_destroy(&s->vulkan); pl_log_destroy(&s->log); ff_vk_uninit(&s->vkctx); @@ -774,7 +784,7 @@ static int output_frame(AVFilterContext *ctx, int64_t pts) { int err = 0, ok, changed_csp; LibplaceboContext *s = ctx->priv; - LibplaceboInput *in = &s->input; + LibplaceboInput *in = &s->inputs[0]; AVFilterLink *outlink = ctx->outputs[0]; const AVPixFmtDescriptor *outdesc = av_pix_fmt_desc_get(outlink->format); const AVFrame *ref = ref_frame(&in->mix); @@ -942,7 +952,7 @@ static int libplacebo_activate(AVFilterContext *ctx) { int ret; LibplaceboContext *s = ctx->priv; - LibplaceboInput *in = &s->input; + LibplaceboInput *in = &s->inputs[0]; AVFilterLink *outlink = ctx->outputs[0]; int64_t pts; From patchwork Sun Jun 18 11:17:02 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Haas X-Patchwork-Id: 42200 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:be15:b0:121:b37c:e101 with SMTP id ge21csp57289pzb; Sun, 18 Jun 2023 04:22:57 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ6j3MDlamAs7Ak4V3glJMoFaaRq3UVp1Q529Cpz13/rtjcSFbImiYand7NQzTHxvESb43U9 X-Received: by 2002:a17:907:3187:b0:96f:c0b0:f137 with SMTP id xe7-20020a170907318700b0096fc0b0f137mr6681513ejb.16.1687087377026; Sun, 18 Jun 2023 04:22:57 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1687087377; cv=none; d=google.com; s=arc-20160816; b=yNMpTk6SIebnrFCaUBtAgj/ZkXtXY4zUN7k9kLA+OhJY0aEGYhlGn3MHIanVvcU8PZ nox91mXxM74GZ+Xus9BRFiTTsNQf7f4whliaK4JJFBwfdFbhXVYTOBGbIr5sU2rcAbUr NOsOyQtm6VWo/azrelSM2uRZxnMGur2yVeiUvHjUvMMbQnpR45OjNjxvDfCAbp/4+Itn NE5N9D7QKwy1hj8SKO/z28hKtFY8CG/sktG/8RF6x2FvgmlDJmhFVurCOA8HsUgWDsDI nWB9M/3wLVbW2h26681edTkzxW9ikLCS5AqY8OdDg3DL7BKdad26myZ4+iB0lLHC+mA/ rIcA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature:delivered-to; bh=xUFAoR/Ws6u+4nTUXNcX73Dgu+3dkO7lOusbX6SXzts=; b=VmrsRHY5/HdfCi2C3+0BLGe9G+1/GmqWypX6TdhRCa+kr0q63xQLfmSNJtA2Mt+G8H 0dpFL82+3gSSFIWAlLEnWMm+kWkeYYkr7b3HXp612wnPXKRoZsFfseFn/7Gd339IcbAn 5gIBf/jY8GQsAdgLrPyx+O96nrs3ZuEv3MMZRtLCU7VVE6/0zcxAVVyae9mc2grIvBBr FqqcS7pxQqpj/gU70LLKUhSersviU6U6wbWinXE/EogTByBg61beOljXYX6EaZwIheRn Ss/USf9LgS9hSZYzguIlbgYGyzEEwAhDFEhojishf5pZfCttQhK8bOwHLAt9wEQ6WFLq kxuw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@haasn.xyz header.s=mail header.b=jFL7YVu9; 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 v3-20020a1709064e8300b00987d075c49csi1451096eju.805.2023.06.18.04.22.54; Sun, 18 Jun 2023 04:22:57 -0700 (PDT) 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=@haasn.xyz header.s=mail header.b=jFL7YVu9; 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 30E1D68C20B; Sun, 18 Jun 2023 14:20:31 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from haasn.dev (haasn.dev [78.46.187.166]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 3501368C062 for ; Sun, 18 Jun 2023 14:20:14 +0300 (EEST) Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id C858541BA3; Sun, 18 Jun 2023 13:20:10 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1687087210; bh=zBLG4Uynu0z+sb/RLw2piUYR7ic+93PvDlwQbUTvJ+U=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=jFL7YVu9kGtnEceYRjf5dPaYVBusy85XTrIfaC0ZRVBltgybv6QN+GDgWAcGHvxN4 ZX20BQ2Qn+3Rs88bkxcsyL2cmXe6pV42WA+QVVgMRiTXeAiH8U8hRFFnFnAZGAbT9K bYW41qqc3OzrhWRVRn8YBmQlMRZ/ff8SxXMZ050Y= From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Sun, 18 Jun 2023 13:17:02 +0200 Message-ID: <20230618111955.40994-12-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230618111955.40994-2-ffmpeg@haasn.xyz> References: <20230618111955.40994-2-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 10/22] lavfi/vf_libplacebo: keep track of latest status globally X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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: Niklas Haas Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: dY7ms9IowHk9 From: Niklas Haas This field will effectively hold the most recent status set by any input. Currently functionally equivalent to input->status, but will change soon. --- libavfilter/vf_libplacebo.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/libavfilter/vf_libplacebo.c b/libavfilter/vf_libplacebo.c index ee8780036cf..5b45d4f8fb5 100644 --- a/libavfilter/vf_libplacebo.c +++ b/libavfilter/vf_libplacebo.c @@ -138,6 +138,8 @@ typedef struct LibplaceboContext { /* input state */ LibplaceboInput *inputs; int nb_inputs; + int64_t status_pts; ///< tracks status of most recently used input + int status; /* settings */ char *out_format_string; @@ -943,6 +945,11 @@ static int handle_input(AVFilterContext *ctx, LibplaceboInput *input) pl_queue_push(input->queue, NULL); /* Signal EOF to pl_queue */ input->status = status; input->status_pts = pts; + if (!s->status || pts >= s->status_pts) { + /* Also propagate to output unless overwritten by later status change */ + s->status = status; + s->status_pts = pts; + } } return 0; @@ -975,8 +982,8 @@ static int libplacebo_activate(AVFilterContext *ctx) } } - if (in->status && pts >= in->status_pts) { - ff_outlink_set_status(outlink, in->status, in->status_pts); + if (s->status && pts >= s->status_pts) { + ff_outlink_set_status(outlink, s->status, s->status_pts); return 0; } From patchwork Sun Jun 18 11:17:03 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Haas X-Patchwork-Id: 42201 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:be15:b0:121:b37c:e101 with SMTP id ge21csp57325pzb; Sun, 18 Jun 2023 04:23:03 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ7SKRdppj7dwuxr3QBxbIuq6r3OQklYk1pCK97LNAL4AyLTt7jUDjZm2hELnMFIj6605EaC X-Received: by 2002:a17:907:2da1:b0:988:7428:2c1a with SMTP id gt33-20020a1709072da100b0098874282c1amr1433512ejc.7.1687087383576; Sun, 18 Jun 2023 04:23:03 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1687087383; cv=none; d=google.com; s=arc-20160816; b=JPqu7CsaD06cFspVYOaFWudwu54klAYKrpNkNlv+KGiPp5ZnynpxwADIYzwSE8brMM XsTuyDjX9RRkmmOJiAchcaIzX+pEErBvC9ZMH7CBsHxdcoN10vf4cTFhMnbtgK4FxyAS ikQqLF05aweTHx0oS5zDX3ihMoo9iMvIaGr+1KBH9IfpPBG6lUp8tVkp3YdiNQDKqfvi +bmm11/pf9X4l/dhmDt24t7am2sKteEGmv4S8Rni/X9HrmfOMDSofI1QIxTeCoE7mA0d iOl5VdA5s8rZ2HlMqq7T5B891afdpNZUtNL4LEbMxZGkKYpL0b+Is9/84PX1etq9/kMs 7KHw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature:delivered-to; bh=upSiwC3hS4DF3jcQZmNAezPNgy8X4eNw61lY7AzwvU4=; b=T8ny2t1bZRYH1JP5jQWROgs8Ykq8oSgFzAJQIoXwGoxOO71KkdnzIJiiYouZz41JQV PUHiVpt20cMoZr8SffKHiT5ERCS4riX9fr7ZqG2hu1sC6Gr5mK4ZsLS3hIPGwY5lef1j IlbS2ViOucf2iB31wlqCJly4ja4llraLWqFZA9Bed/n2rJx4fZtxN/lpT3Zz+BBslQln 8HhKOnXfrpC8nWqFy3BzVmetzRTnbnwPTpMVVTSsal2w8xBkrQQ6c5DjwWqGtg/Q9NQC hWNf1rlnLEtkWTA+m3pyF4C9gNfB1aDhIolwMzM9HXa+vzlQh19bWhf+xF5/waat9A8O AFUQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@haasn.xyz header.s=mail header.b=RgU+wg4F; 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 a2-20020a170906368200b00965e4245c45si11801336ejc.256.2023.06.18.04.23.03; Sun, 18 Jun 2023 04:23:03 -0700 (PDT) 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=@haasn.xyz header.s=mail header.b=RgU+wg4F; 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 2C5CA68C220; Sun, 18 Jun 2023 14:20:32 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from haasn.dev (haasn.dev [78.46.187.166]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 66F4168C074 for ; Sun, 18 Jun 2023 14:20:14 +0300 (EEST) Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id 12C714AA92; Sun, 18 Jun 2023 13:20:11 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1687087211; bh=33DNQBemQg1KKt8P0pMqmJaFW8LFF5yAOgzJOlkkCGc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=RgU+wg4FJ9kicJQB5PElE49FuX8DKuN50QyakL5cUwepdbzQDP9fclYEUJiQIBN0q JbdOJGsHbNHwx9x86d6ay2J3y6pL2r0wQd0SYpb9150BKNiwuQvLuof0yvSOtpHBFz ItwetUoF5iKkP/M1GC+j2c44GnNx9Dn1lIUGb63U= From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Sun, 18 Jun 2023 13:17:03 +0200 Message-ID: <20230618111955.40994-13-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230618111955.40994-2-ffmpeg@haasn.xyz> References: <20230618111955.40994-2-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 11/22] lavfi/vf_libplacebo: support blending multiple inputs X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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: Niklas Haas Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: F3qYy+g3Stky From: Niklas Haas Subsequent inputs require frame blending to be enabled, in order to not overwrite the existing frame contents. For output metadata, we implicitly copy the metadata of the *first* available stream (falling back to the second stream if the first has already reached EOF, and so on). This is done to resolve any conflicts between inputs with differing metadata. So when e.g. input 1 is HDR and output 2 is SDR, the output will be HDR, and vice versa. This logic could probablly be improved by dynamically determining some "superior" set of metadata, but I don't want to handle that complexity in this series. --- libavfilter/vf_libplacebo.c | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/libavfilter/vf_libplacebo.c b/libavfilter/vf_libplacebo.c index 5b45d4f8fb5..5ea6fcd7920 100644 --- a/libavfilter/vf_libplacebo.c +++ b/libavfilter/vf_libplacebo.c @@ -786,12 +786,18 @@ static int output_frame(AVFilterContext *ctx, int64_t pts) { int err = 0, ok, changed_csp; LibplaceboContext *s = ctx->priv; - LibplaceboInput *in = &s->inputs[0]; AVFilterLink *outlink = ctx->outputs[0]; const AVPixFmtDescriptor *outdesc = av_pix_fmt_desc_get(outlink->format); - const AVFrame *ref = ref_frame(&in->mix); struct pl_frame target; + const AVFrame *ref = NULL; AVFrame *out; + + /* Use the first active input as metadata reference */ + for (int i = 0; i < s->nb_inputs; i++) { + const LibplaceboInput *in = &s->inputs[i]; + if (in->qstatus == PL_QUEUE_OK && (ref = ref_frame(&in->mix))) + break; + } if (!ref) return 0; @@ -862,8 +868,18 @@ static int output_frame(AVFilterContext *ctx, int64_t pts) goto fail; } - update_crops(ctx, in, &target, out->pts * av_q2d(outlink->time_base)); - pl_render_image_mix(in->renderer, &in->mix, &target, &s->params); + /* Draw first frame opaque, others with blending */ + s->params.skip_target_clearing = false; + s->params.blend_params = NULL; + for (int i = 0; i < s->nb_inputs; i++) { + LibplaceboInput *in = &s->inputs[i]; + if (in->qstatus != PL_QUEUE_OK) + continue; + update_crops(ctx, in, &target, out->pts * av_q2d(outlink->time_base)); + pl_render_image_mix(in->renderer, &in->mix, &target, &s->params); + s->params.skip_target_clearing = true; + s->params.blend_params = &pl_alpha_overlay; + } if (outdesc->flags & AV_PIX_FMT_FLAG_HWACCEL) { pl_unmap_avframe(s->gpu, &target); From patchwork Sun Jun 18 11:17:04 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Haas X-Patchwork-Id: 42202 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:be15:b0:121:b37c:e101 with SMTP id ge21csp57364pzb; Sun, 18 Jun 2023 04:23:13 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ76RA/kNpQ7NRFO1ayMtueJWNYAL/QgiKA9gmktZl1qt8HaoTc0yvBET6yNa1wwn7Q6I4RY X-Received: by 2002:a17:907:7f2a:b0:97e:ab29:952c with SMTP id qf42-20020a1709077f2a00b0097eab29952cmr7277486ejc.2.1687087393417; Sun, 18 Jun 2023 04:23:13 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1687087393; cv=none; d=google.com; s=arc-20160816; b=Q8KsoNOJVp+0+arhf7+NDbm8Wwdenw5gORIx2B3nYnvHvUdVhBPSO++F0a8tsZijLM S5GdKRzz1FEA9d4vVB/zpiGB398FdU6g2o6mzEEQkWwO7k5uJ/z32UBu7SMB67JnK/dD EvDx6AIicv+c68upkl/UW9r3igWGkS2mafy4qeTyAcjk9IeQFwa93hIXkJEIY0cd7gew XXjW3CUqaPs8dP1EbVwnUB570ZG7dN2h6hHV0RVVj3gl5vw78ZxAdO+e0psEKz3+4z95 RxKTDlJ9pK0wRrEu3Nq9GOW8xhrqFoFkpOcdV1q4p4qRhuKjD/yreyYI1NC2vWSLVVj8 sZdQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature:delivered-to; bh=5HbwLuzCFFaQxy+e0NlOIIY68NRHl264UUtB18mxOrI=; b=GGHxjIwavCXaa4Ww7DuMwoNi472TlmBfPuTJEl5Hr1+FXg6V8pnraQZbuCn634bZH2 +MaUKDo6RLJ23jqr1HC51YkLb0t4Afk4RBxQsK0UUKAytYotXIpzXk1K73GlFHcpAkm0 1zDp3oeGPF16L1Rira+JaU8aH1i6o856J7oYyhGMA7Wl1xq9QqzMVu+7N/Ip0DLhx6mr c9ENJnXAwy4Hs5CGz/PCJBrihXzO+Wyin6ynHntC2U06JcVnCJOg+07B+ir1YUvnVQyI scOOwn8TcAlZafDmtKvB7GFyPMHc3TuZV2UjywwBEiaXg8NLymrZKBzxgfZuCXRVKs+8 HF8Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@haasn.xyz header.s=mail header.b=tWyQBcse; 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 a5-20020a17090640c500b00986508566eesi3197293ejk.272.2023.06.18.04.23.13; Sun, 18 Jun 2023 04:23:13 -0700 (PDT) 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=@haasn.xyz header.s=mail header.b=tWyQBcse; 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 0E50168C24A; Sun, 18 Jun 2023 14:20:33 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from haasn.dev (haasn.dev [78.46.187.166]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 76F0F68C081 for ; Sun, 18 Jun 2023 14:20:14 +0300 (EEST) Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id 4FCA54B109; Sun, 18 Jun 2023 13:20:11 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1687087211; bh=6u5dwguzMyeAqG18mSnnkP4w8eZex70BjqKi3PtU2gg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=tWyQBcseDPxdLUQr/0soOn6yA3WUZrVEfVvTwuMsCL1CcuFTwZibZrhODEzY2svkp qakPb+Jb8biGC1UgzLMbQdhdx3qh2xUc6W0sS0RjqTbkd/HTfCbNL5pG44A0PDFlet edrmyq7kKatf2PjNEuf8CXtWnmbugwCEekDm4qZE= From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Sun, 18 Jun 2023 13:17:04 +0200 Message-ID: <20230618111955.40994-14-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230618111955.40994-2-ffmpeg@haasn.xyz> References: <20230618111955.40994-2-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 12/22] lavfi/vf_libplacebo: handle multiple inputs X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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: Niklas Haas Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: oE6olZUIw5kR From: Niklas Haas This commit still relies on a single input for PTS determination, to be changed in the next commit. --- libavfilter/vf_libplacebo.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/libavfilter/vf_libplacebo.c b/libavfilter/vf_libplacebo.c index 5ea6fcd7920..a56ebbf54e7 100644 --- a/libavfilter/vf_libplacebo.c +++ b/libavfilter/vf_libplacebo.c @@ -979,11 +979,13 @@ static int libplacebo_activate(AVFilterContext *ctx) AVFilterLink *outlink = ctx->outputs[0]; int64_t pts; - FF_FILTER_FORWARD_STATUS_BACK(outlink, in->link); + FF_FILTER_FORWARD_STATUS_BACK_ALL(outlink, ctx); pl_log_level_update(s->log, get_log_level()); - if ((ret = handle_input(ctx, in)) < 0) - return ret; + for (int i = 0; i < s->nb_inputs; i++) { + if ((ret = handle_input(ctx, &s->inputs[i])) < 0) + return ret; + } if (ff_outlink_frame_wanted(outlink)) { if (s->fps.num) { From patchwork Sun Jun 18 11:17:05 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Haas X-Patchwork-Id: 42203 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:be15:b0:121:b37c:e101 with SMTP id ge21csp57445pzb; Sun, 18 Jun 2023 04:23:26 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ4eRFBxn8RRA374TY6JPlheFLk2UKATf8yVcFiwpj4xGOGByjl8mMbueaNUSzshNq/rBrVQ X-Received: by 2002:a05:6402:322:b0:51a:3fdc:5bb0 with SMTP id q2-20020a056402032200b0051a3fdc5bb0mr5291361edw.15.1687087405839; Sun, 18 Jun 2023 04:23:25 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1687087405; cv=none; d=google.com; s=arc-20160816; b=kPE/FgWPIN6f3QTHzIHBrZg1Ku4zwebMwi1lL/tOiJSPTJQIpvr3FPYgQ+gCKKRW33 rD+h2BYVax/UziHQbPsOpkuZYRvM+yXJ+MTkmVpthxRrSmyIcCmgpcpAxABMHe+FlQju 7o5dc9GvNLejmPv6XIu8t8WncvtFtWdkR2nrmqDi3Z9oY5jr2c/WxWpFsGws/vuDfVMW GDDiZ8N2ALSx1dMtsNznFUaJ01gNvi/3oyQN4VwX39vSD/cbMvpt8vMzab2hAWhsWiJI 35RFCgjs1JFSRycfjNgiygMZcB6hwfwuHUpKYbRSOMNudhZqhbua4bA+WH0Nqnq2D5k4 IeuQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature:delivered-to; bh=d2Xj6uCZhv3ZHZddMRrmJMrpyWD7vFWs/UFTRoHjCcw=; b=kxRHg8rWbvK/q3dmQstiVSzN4wXiRGKhiEcjrr/6qEZVdxQuohzK255P0pmqwY1UNw 7jI4CGjLiXJnUl8nYMIw0yj4EICAbYi4X3uqVJhu/f6LemKNHFX464537RkEqgrm0LmJ moWuoQG2wdVJIaGcXnxNa8zdHNPNWDEpRrRCc3nq60z7FDPNN8FL1w636lW+XsyBtfeh wteeQtWR18XzD1u2CL1+ykTVbYKMHV4lzC/4N2AKc8AJgZ8MejQaoVrEVdKzL7NEq8bH lk7VT+AD3/s4xTADaLxjGzVC4WIWSEh5z2D9mPWrsv6YTe2WQGRXQWUvt/W8/d3jtmR1 5WUQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@haasn.xyz header.s=mail header.b=OUN+RWek; 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 u15-20020aa7d88f000000b0051a40300909si2553102edq.200.2023.06.18.04.23.25; Sun, 18 Jun 2023 04:23:25 -0700 (PDT) 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=@haasn.xyz header.s=mail header.b=OUN+RWek; 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 D0F2C68C290; Sun, 18 Jun 2023 14:20:33 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from haasn.dev (haasn.dev [78.46.187.166]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id AF96268C047 for ; Sun, 18 Jun 2023 14:20:14 +0300 (EEST) Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id 8C1B54B6AD; Sun, 18 Jun 2023 13:20:11 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1687087211; bh=ojYkv9+k3WdhzxOCFaoaTHG0D8amcv98W1Uqar5XfC8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=OUN+RWekM34n/E+qF1/GUQsm2JudGmssoVLq0QAeFxmyiCz1BPw2xzvskNgHl4xMZ hP/A1Xyf5Bz7P5lymQDylL7iRY9eNQOROjERBNDIEGCeAuYhLdXSvy/vcF4zGW9b8X eFdoiEEwBDtVDNY2oXf9aTRErrGnEBafjvd3jHH8= From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Sun, 18 Jun 2023 13:17:05 +0200 Message-ID: <20230618111955.40994-15-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230618111955.40994-2-ffmpeg@haasn.xyz> References: <20230618111955.40994-2-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 13/22] lavfi/vf_libplacebo: determine PTS of next frame from any input X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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: Niklas Haas Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: eWfrZgR+/8XT From: Niklas Haas When combining multiple inputs with different PTS and durations, in input-timed mode, we emit one output frame for every input frame PTS, from *any* input. So when combining a low FPS stream with a high FPS stream, the output framerate would match the higher FPS, independent of which order they are specified in. --- libavfilter/vf_libplacebo.c | 33 ++++++++++++++++++++------------- 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/libavfilter/vf_libplacebo.c b/libavfilter/vf_libplacebo.c index a56ebbf54e7..47f019fa192 100644 --- a/libavfilter/vf_libplacebo.c +++ b/libavfilter/vf_libplacebo.c @@ -973,11 +973,11 @@ static int handle_input(AVFilterContext *ctx, LibplaceboInput *input) static int libplacebo_activate(AVFilterContext *ctx) { - int ret; + int ret, retry = 0; LibplaceboContext *s = ctx->priv; LibplaceboInput *in = &s->inputs[0]; AVFilterLink *outlink = ctx->outputs[0]; - int64_t pts; + int64_t pts, out_pts; FF_FILTER_FORWARD_STATUS_BACK_ALL(outlink, ctx); pl_log_level_update(s->log, get_log_level()); @@ -989,24 +989,31 @@ static int libplacebo_activate(AVFilterContext *ctx) if (ff_outlink_frame_wanted(outlink)) { if (s->fps.num) { - pts = outlink->frame_count_out; - } else if (av_fifo_peek(in->out_pts, &pts, 1, 0) < 0) { - /* No frames queued */ - if (in->status) { - pts = in->status_pts; - } else { - ff_inlink_request_frame(in->link); - return 0; + out_pts = outlink->frame_count_out; + } else { + /* Determine the PTS of the next frame from any active input */ + out_pts = INT64_MAX; + for (int i = 0; i < s->nb_inputs; i++) { + LibplaceboInput *in = &s->inputs[i]; + if (av_fifo_peek(in->out_pts, &pts, 1, 0) >= 0) { + out_pts = FFMIN(out_pts, pts); + } else if (!in->status) { + ff_inlink_request_frame(in->link); + retry = true; + } } + + if (retry) /* some inputs are incomplete */ + return 0; } - if (s->status && pts >= s->status_pts) { + if (s->status && out_pts >= s->status_pts) { ff_outlink_set_status(outlink, s->status, s->status_pts); return 0; } in->qstatus = pl_queue_update(in->queue, &in->mix, pl_queue_params( - .pts = pts * av_q2d(outlink->time_base), + .pts = out_pts * av_q2d(outlink->time_base), .radius = pl_frame_mix_radius(&s->params), .vsync_duration = av_q2d(av_inv_q(outlink->frame_rate)), )); @@ -1018,7 +1025,7 @@ static int libplacebo_activate(AVFilterContext *ctx) case PL_QUEUE_OK: if (!s->fps.num) av_fifo_drain2(in->out_pts, 1); - return output_frame(ctx, pts); + return output_frame(ctx, out_pts); case PL_QUEUE_ERR: return AVERROR_EXTERNAL; } From patchwork Sun Jun 18 11:17:06 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Haas X-Patchwork-Id: 42204 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:be15:b0:121:b37c:e101 with SMTP id ge21csp57527pzb; Sun, 18 Jun 2023 04:23:42 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ7zAQJ2u4ndi5dWVSdKHKGJAKJFEpVU78TjrVPdmy3/m4dBbji8ARKwEvBZTj+FVe2vprUf X-Received: by 2002:aa7:de12:0:b0:514:7f36:7092 with SMTP id h18-20020aa7de12000000b005147f367092mr4555863edv.12.1687087422576; Sun, 18 Jun 2023 04:23:42 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1687087422; cv=none; d=google.com; s=arc-20160816; b=cbPsaN/YCQdwr4soxnho6TD109sZX10JzZZgDJMeOm3C9UMps18x5XFQHe18+/F5Ir AfBQZKZb2VS7SghegXiIYB/RalxJETJjumB9ynf/cWbPB27nn3Yf2bc7fnSBmO8wj2Ss XkPyghJcKtiFt/EjE4KC+uXGXoam8tG3KCTwol4WhxU+ClgCZUKTCD522cr6S884HqKY k7Z5gZhemHTsr6WOq2InwbvPOI79L+sgVsjcBGl1G4mYh8oXzUXUZZ7t1jh3mtdBzmwN fE7OqUO6TN5EqOhzBuVFk1sgAaPNmyfN8B9MDmbu1JtjWFP89CeTVCP+6Ai8bfzL4PAJ cwiA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature:delivered-to; bh=LPOUOlWaKsVVVXIkUzZ4bkyvRxY+2a0fEtNwd4+QgK8=; b=F3sqdeaamwBSmxmjQu1bRSzeW8h0KlkjDJmhNN/a2mCnQ3t8AWSeAONZphl8WmtHbg ctiEeCAwbez4VzG7BukvbdcBpeqGifhh5DlUCfGohtUTuU4oNDY5nRvCJXB6JfPg3dQ9 wlUqwYIcq02tG44x4vu+WpRC8WACcNkUcfk2l6dEpTMCD2zlElumdSHbe0GiWK/M/XyQ FOcJh2pblyl/qzym4fYTGb/Xe7DZP7EvQlO7lc6iarz1K+H8cnHija+Cz6FcQ3eknIyu bVJG1ZOTCWFVfFA1OgMSDAeVsdn+LNhb7o/gG4Bwelk8N/gxIOXnqhKe2Fw2di2sqTDM ICVA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@haasn.xyz header.s=mail header.b=Pr1VuJw2; 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 e15-20020a056402088f00b0051892a12c03si4213740edy.99.2023.06.18.04.23.42; Sun, 18 Jun 2023 04:23:42 -0700 (PDT) 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=@haasn.xyz header.s=mail header.b=Pr1VuJw2; 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 B69F268C2A3; Sun, 18 Jun 2023 14:20:34 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from haasn.dev (haasn.dev [78.46.187.166]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id B6DFA68C08B for ; Sun, 18 Jun 2023 14:20:14 +0300 (EEST) Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id C7AF74B7B8; Sun, 18 Jun 2023 13:20:11 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1687087211; bh=x0Sm4xroF6fRUm84bad2pPXnhLifHL14/V1/zve7OCY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Pr1VuJw2jk36Fa7ZVazR35rNcj8A7iCi+XXarmdP4H9IhBTSpZPozuBcD0FzMtEvH 5mBFTNIIeYz8NxTVElZqK9sekX6ro3G4J2FJGCGPtaIcxUR6PMAldMcFu1VPGDR8SX teAP6Rn7zJ3bmtamj74nP4gN8MJE7H86vIHW9LrM= From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Sun, 18 Jun 2023 13:17:06 +0200 Message-ID: <20230618111955.40994-16-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230618111955.40994-2-ffmpeg@haasn.xyz> References: <20230618111955.40994-2-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 14/22] lavfi/vf_libplacebo: only drain actually used PTS X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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: Niklas Haas Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: uTeutouziNB9 From: Niklas Haas When combining multiple inputs, the output PTS may be less than the PTS of the input. In this case, the current's code assumption of always draining one value from the FIFO is incorrect. Replace by a smarter function which drains only those PTS values that were actually consumed. --- libavfilter/vf_libplacebo.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/libavfilter/vf_libplacebo.c b/libavfilter/vf_libplacebo.c index 47f019fa192..753d6f3cc79 100644 --- a/libavfilter/vf_libplacebo.c +++ b/libavfilter/vf_libplacebo.c @@ -971,6 +971,13 @@ static int handle_input(AVFilterContext *ctx, LibplaceboInput *input) return 0; } +static void drain_input_pts(LibplaceboInput *in, int64_t until) +{ + int64_t pts; + while (av_fifo_peek(in->out_pts, &pts, 1, 0) >= 0 && pts <= until) + av_fifo_drain2(in->out_pts, 1); +} + static int libplacebo_activate(AVFilterContext *ctx) { int ret, retry = 0; @@ -1023,8 +1030,7 @@ static int libplacebo_activate(AVFilterContext *ctx) ff_inlink_request_frame(in->link); return 0; case PL_QUEUE_OK: - if (!s->fps.num) - av_fifo_drain2(in->out_pts, 1); + drain_input_pts(in, out_pts); return output_frame(ctx, out_pts); case PL_QUEUE_ERR: return AVERROR_EXTERNAL; From patchwork Sun Jun 18 11:17:07 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Haas X-Patchwork-Id: 42190 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:be15:b0:121:b37c:e101 with SMTP id ge21csp56722pzb; Sun, 18 Jun 2023 04:21:20 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ6f4F80x94nGfAbHVP/Z2RWw16xfUb+dF/iTYKinQDOgHlSE0qa2gV9SWbD4bU3x9FiWvXi X-Received: by 2002:a17:907:7e95:b0:987:350e:7726 with SMTP id qb21-20020a1709077e9500b00987350e7726mr4399861ejc.34.1687087280179; Sun, 18 Jun 2023 04:21:20 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1687087280; cv=none; d=google.com; s=arc-20160816; b=fVfoyVlSrwNyJ2FFW5nGIySUgi42Sk4SPjP3JhZkvXgrCBJ0X9UA8SmtQIaq9szCkW Ztibq6XVpda5I/lkSkLc9MVNDyb7zdfrbRv9T/bDvO3h8pjvuBQ9cQUyZ558JDx+pZ29 IfCiLXxm4eMom6YDxxnZv1A/x2D96Hrkx2xPZYvqK+8W+MsMT6GVRX0N/gjVg53wbZsI oiJAPlwfWtEFyfnfrFraLa2V56e6I6/D96/tTmDEmTG9TDepqNXDyKENy2GWPPuytOb3 wZRakO0g+KtcGV+xp+y4pBsElYC456aH2q+PI4/WHRKyDJ2zX5eIT8T2FkqecNzm1QMN PJXQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature:delivered-to; bh=tzEqiH2emPq2Btg/JW2Dg4r1YVOpdbHRDJaI0fv8NJY=; b=jtUQF9+YmE/ihPYHXVfp1Sk6FYE9foGW3//Qz5/ZswSrdYP05yOMANbBVYxpY/0JCz 8Ec3px3bnhpTUl2d6PCXZ90KIYB+Il6rhklC1lN2oTLrTMQPjyBmSVq6ENAGrfUvzYK1 0TDXO6vue5X0qOEqdahPLqTDBykKVc6GtzyGs1sDhwK+cwRU23HZWHkXF+DQ3Nm7bqk9 DRtofUARzvxGcfw/U61APPWCwib2r4i/MkdaTwE5XDug3TlE2s0GU54Wv10kiEkj77dG P/7RKv+3pqTMoF8dZR5CqmEJXMcGgmNGCOwTYshQ7jefS0cJ//KcjzIQKnKW5kRCuWs/ UDZQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@haasn.xyz header.s=mail header.b=eNUoM77X; 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 j5-20020aa7de85000000b005184ac0d978si7462971edv.604.2023.06.18.04.21.19; Sun, 18 Jun 2023 04:21:20 -0700 (PDT) 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=@haasn.xyz header.s=mail header.b=eNUoM77X; 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 BAA2168BF68; Sun, 18 Jun 2023 14:20:20 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from haasn.dev (haasn.dev [78.46.187.166]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id F3AAD68BFA1 for ; Sun, 18 Jun 2023 14:20:15 +0300 (EEST) Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id 102A64B7CA; Sun, 18 Jun 2023 13:20:12 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1687087212; bh=GeArb8zyDlWrbyV4ieIdPX6owzjNSaA3cH9Dq2yIhAI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=eNUoM77XqlK5vm1+MuJ3kJhZzB9AiSm+x25j7qWcSlKViJMVsjMKJJJmXFqPiQMxI 4Qx0kX+24Tsm+u+mFT1w4w2CH8BDhotyZ8PRTSdOH6ru0ZV2SlcZgOqlCqHKjaQNvT jN0hA3009TJ9/sZxaYESoFTwXWWoaOBmDeCwx7VU= From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Sun, 18 Jun 2023 13:17:07 +0200 Message-ID: <20230618111955.40994-17-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230618111955.40994-2-ffmpeg@haasn.xyz> References: <20230618111955.40994-2-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 15/22] lavfi/vf_libplacebo: generalize frame update to multiple inputs X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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: Niklas Haas Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: qgNgWLZol7N9 From: Niklas Haas In the event that some frame mixes are OK while others are not, the priority goes: 1. Errors in updating any frame -> return error 2. Any input incomplete -> request frames and return 3. Any inputs OK -> ignore EOF streams and render remaining inputs 4. No inputs OK -> set output to most recent status This logic ensures that we can continue rendering the remaining streams, no matter which streams reach their end of life, until we have no streams left at which point we forward the last EOF. --- libavfilter/vf_libplacebo.c | 52 ++++++++++++++++++++++++------------- 1 file changed, 34 insertions(+), 18 deletions(-) diff --git a/libavfilter/vf_libplacebo.c b/libavfilter/vf_libplacebo.c index 753d6f3cc79..6399aae0c67 100644 --- a/libavfilter/vf_libplacebo.c +++ b/libavfilter/vf_libplacebo.c @@ -980,9 +980,8 @@ static void drain_input_pts(LibplaceboInput *in, int64_t until) static int libplacebo_activate(AVFilterContext *ctx) { - int ret, retry = 0; + int ret, ok = 0, retry = 0; LibplaceboContext *s = ctx->priv; - LibplaceboInput *in = &s->inputs[0]; AVFilterLink *outlink = ctx->outputs[0]; int64_t pts, out_pts; @@ -1014,26 +1013,43 @@ static int libplacebo_activate(AVFilterContext *ctx) return 0; } - if (s->status && out_pts >= s->status_pts) { - ff_outlink_set_status(outlink, s->status, s->status_pts); - return 0; - } + /* Update all input queues to the chosen out_pts */ + for (int i = 0; i < s->nb_inputs; i++) { + LibplaceboInput *in = &s->inputs[i]; + if (in->status && out_pts >= in->status_pts) { + in->qstatus = PL_QUEUE_EOF; + continue; + } - in->qstatus = pl_queue_update(in->queue, &in->mix, pl_queue_params( - .pts = out_pts * av_q2d(outlink->time_base), - .radius = pl_frame_mix_radius(&s->params), - .vsync_duration = av_q2d(av_inv_q(outlink->frame_rate)), - )); + in->qstatus = pl_queue_update(in->queue, &in->mix, pl_queue_params( + .pts = out_pts * av_q2d(outlink->time_base), + .radius = pl_frame_mix_radius(&s->params), + .vsync_duration = av_q2d(av_inv_q(outlink->frame_rate)), + )); + + switch (in->qstatus) { + case PL_QUEUE_MORE: + ff_inlink_request_frame(in->link); + retry = true; + break; + case PL_QUEUE_OK: + ok = true; + break; + case PL_QUEUE_ERR: + return AVERROR_EXTERNAL; + } + } - switch (in->qstatus) { - case PL_QUEUE_MORE: - ff_inlink_request_frame(in->link); + if (retry) { return 0; - case PL_QUEUE_OK: - drain_input_pts(in, out_pts); + } else if (ok) { + /* Got any valid frame mixes, drain PTS queue and render output */ + for (int i = 0; i < s->nb_inputs; i++) + drain_input_pts(&s->inputs[i], out_pts); return output_frame(ctx, out_pts); - case PL_QUEUE_ERR: - return AVERROR_EXTERNAL; + } else if (s->status) { + ff_outlink_set_status(outlink, s->status, s->status_pts); + return 0; } return AVERROR_BUG; From patchwork Sun Jun 18 11:17:08 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Haas X-Patchwork-Id: 42192 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:be15:b0:121:b37c:e101 with SMTP id ge21csp56841pzb; Sun, 18 Jun 2023 04:21:38 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ7Pc5SHkeD0vTaKZlgpN7wQI1k5zG0XorRwTgYwq4Ia23VCDuxgcZ61T7lLgT8juuaZZ+vU X-Received: by 2002:a17:907:c1f:b0:973:d857:9a33 with SMTP id ga31-20020a1709070c1f00b00973d8579a33mr6690419ejc.11.1687087298098; Sun, 18 Jun 2023 04:21:38 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1687087298; cv=none; d=google.com; s=arc-20160816; b=iQL1Z7kh20vbFPXvT08Dx0H4UFL8Iqzg/OOM2JvUH8ZvmkNn0vDQVNi6T4A2OTzHBJ CM7tcWUNIn/t8fkyggNs3eVYWAB+8J0gpVV5+0oPe6K3YsLjdcSTcCogmfy8HfdNf8hR QRRBYsh3/ZupQZDnkAxL5wIjD5ccQ4PoADq/ETQ2Eh9FwstaNRCiPgMAigvgIPyvjLuc F3TQqvCA0ySwot+/Aa6uywaGNVXMh6HvDnbcAUJYmBFWZraCGkfd8o8eGdRTGYNANQqS flRRc85Gs5rjf7dnnukf57dLJyqtEUo2wOsgot6qQDbVrpgsBElO6skKrMUpGIj+GqYO e0hg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature:delivered-to; bh=FHRGzCHH/13W3wtinwDJogc8p3G2qhJkgqP4hBMbLbc=; b=zcUxxlRV8d7DbimR11ZwqAhIobCUwA3r+NMYAlQ7ffEKb5dgTQvizj0y4wH5QKYWje JSLR+cC290hd9D70FFZWUfmNEELAfACnpl22GeGFh81sfFU8Sxh9XA69GSUzqwWPXztD UJ1zBkI63HbmXPR9L6HybnMd2GZvl+GjzqxPf12kc8RBS5SWONAup0bUQrfj2buGB2Gf 5S+8kT33vOEPOsQfLMLNq5PLk1z5u4ayDZuWboRdFlWTQ1XGwE7Dsn9UqYPPnRSfHzu4 HgavUO5SJiW0lppedPtli23K+7ebuc4as5cIpdSSDkzJVYFE7Fu7xX1mNi5Ujxhj3rQe o9DA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@haasn.xyz header.s=mail header.b=mdd+S+j9; 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 z3-20020aa7d403000000b005187910e766si7288425edq.191.2023.06.18.04.21.37; Sun, 18 Jun 2023 04:21:38 -0700 (PDT) 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=@haasn.xyz header.s=mail header.b=mdd+S+j9; 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 AFE4668C0C1; Sun, 18 Jun 2023 14:20:22 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from haasn.dev (haasn.dev [78.46.187.166]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 18CDA68BFB2 for ; Sun, 18 Jun 2023 14:20:16 +0300 (EEST) Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id 4A7284B7DD; Sun, 18 Jun 2023 13:20:12 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1687087212; bh=7XkGtk2CzxnJDD/ie7anlTg7yXlwKqsQndTSWPpr0gE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=mdd+S+j9AkyWiWKTHsVxycU+cWTo6Jhj349ky2hYD0s4fGXrkJciwi3RLwD+GTl+j c/qRTJ9vnNA89Lz6V0TLMFGd2nLtD3U55/tiZyC824h61Vb7jC18mY+6HYKPzHnSye exgPTiyvrdXe+26DFYMiRdE0b3PIGPxtgMY5QGDs= From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Sun, 18 Jun 2023 13:17:08 +0200 Message-ID: <20230618111955.40994-18-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230618111955.40994-2-ffmpeg@haasn.xyz> References: <20230618111955.40994-2-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 16/22] lavfi/vf_libplacebo: make input-dependent vars dynamic X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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: Niklas Haas Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: ZNFOHM0MXpUX From: Niklas Haas Because these can differ based on the input, for multiple inputs. --- libavfilter/vf_libplacebo.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/libavfilter/vf_libplacebo.c b/libavfilter/vf_libplacebo.c index 6399aae0c67..a3a034766e2 100644 --- a/libavfilter/vf_libplacebo.c +++ b/libavfilter/vf_libplacebo.c @@ -741,6 +741,11 @@ static void update_crops(AVFilterContext *ctx, LibplaceboInput *in, double image_pts = src->pts * av_q2d(in->link->time_base); /* Update dynamic variables */ + s->var_values[VAR_IN_W] = s->var_values[VAR_IW] = in->link->w; + s->var_values[VAR_IN_H] = s->var_values[VAR_IH] = in->link->h; + s->var_values[VAR_A] = (double) in->link->w / in->link->h; + s->var_values[VAR_SAR] = in->link->sample_aspect_ratio.num ? + av_q2d(in->link->sample_aspect_ratio) : 1.0; s->var_values[VAR_IN_T] = s->var_values[VAR_T] = image_pts; s->var_values[VAR_OUT_T] = s->var_values[VAR_OT] = target_pts; s->var_values[VAR_N] = ctx->outputs[0]->frame_count_out; @@ -1193,13 +1198,8 @@ static int libplacebo_config_output(AVFilterLink *outlink) } /* Static variables */ - s->var_values[VAR_IN_W] = s->var_values[VAR_IW] = inlink->w; - s->var_values[VAR_IN_H] = s->var_values[VAR_IH] = inlink->h; s->var_values[VAR_OUT_W] = s->var_values[VAR_OW] = outlink->w; s->var_values[VAR_OUT_H] = s->var_values[VAR_OH] = outlink->h; - s->var_values[VAR_A] = (double) inlink->w / inlink->h; - s->var_values[VAR_SAR] = inlink->sample_aspect_ratio.num ? - av_q2d(inlink->sample_aspect_ratio) : 1.0; s->var_values[VAR_DAR] = outlink->sample_aspect_ratio.num ? av_q2d(outlink->sample_aspect_ratio) : 1.0; s->var_values[VAR_HSUB] = 1 << desc->log2_chroma_w; From patchwork Sun Jun 18 11:17:09 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Haas X-Patchwork-Id: 42191 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:be15:b0:121:b37c:e101 with SMTP id ge21csp56787pzb; Sun, 18 Jun 2023 04:21:29 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ5QIzL9Ugrt4Wqi03nFcD77dXMM830Q4cIQvBWC17lIoX3T+QgixyiHztlZOg04KxKnVhLM X-Received: by 2002:a17:907:3e0a:b0:982:45ca:ac06 with SMTP id hp10-20020a1709073e0a00b0098245caac06mr6729662ejc.60.1687087289331; Sun, 18 Jun 2023 04:21:29 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1687087289; cv=none; d=google.com; s=arc-20160816; b=HQXguBLs3M8FjJIoFRkv9b5ajGCcoXO0q0myIVrSc+j7ILWkvUyZymAul1vYv1X1a7 DJHBP4QTpRVfFcBkEbETvFu9iYjXy8AdYfAzdjmKAkqg/vYGU4gxHlTy6p0N9zqInlvL RrnH80bN3eESfJStxIyBLmJSMJdof/QWWes7J0qCIOs/BMjSYq3CQfIio3LUmBu9fb20 PB/O2/bW8hYi94sBPNApBi+i793nJmSU9bgY+S8Al6W3l9gv9ZbqYm20FmqyyxcDPoqI EZl2M7BxSWrPtuu166ciCZ0IYJJa50Nm8La+Hszc21BLc5nyLLREd5No33U0vfxjWyeF ov5Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature:delivered-to; bh=ql4v19cj0gBqZ1Y43L5KT92WCkC/e67RWfyL3wvLNHk=; b=LRxIfcwCVCHmvSS2dtObbyXpwm2TXeX67W+2U3aJpsMSGw7tQIAg1Osp+zSYd5T9tO 5cOOXAeYhu8nd8HsPb/TzeiDU0/wovMYG/Qdx/JKwTQXLGQfdIKrGstj8dfWCIo9iQUy 8ofV3xZgh7wDKQcO/tNtZzhPQn+kcL5eFYiF2kFOaemQlKqDKKKuBpSJ8w+GF2xHBBRd wfgme7S5abIx5ervGqG8gDSXI194Qa0jUEwY/BPtZmMq41W+nAtj7cTDSqmO6odVPpwg eKvK6I/9WlAIDOq6UcyhfYZtShQ2nATkA9sWDDSTwjcNOO5NynFPp0hNGK/nqhZeAM4Y wFLA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@haasn.xyz header.s=mail header.b=Li0Ayw++; 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 z25-20020a170906075900b0098831afb89bsi1078982ejb.84.2023.06.18.04.21.28; Sun, 18 Jun 2023 04:21:29 -0700 (PDT) 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=@haasn.xyz header.s=mail header.b=Li0Ayw++; 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 C06BD68BFD2; Sun, 18 Jun 2023 14:20:21 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from haasn.dev (haasn.dev [78.46.187.166]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 050FA68BFA9 for ; Sun, 18 Jun 2023 14:20:15 +0300 (EEST) Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id 82B4F4B7F4; Sun, 18 Jun 2023 13:20:12 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1687087212; bh=XalFZ7+GvOO4b3uNOj+yEIoEX+xPMdWhO1A69FiyWnA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Li0Ayw++i4Z7M8DklRWQ9QR766s40V/hKM8MNgcFqmUFim87p6/lELGW5HJq4Q/gm I2Wmqgm5JLu74kMWpAaYbrLfEThsoEVbDsCHorqJ9kRD18CJ3jmJkzC4uV9U3wxlUf fPkAiz1tlGrhFF5FmDlWY5MDl+O/pYu78frpGiqk= From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Sun, 18 Jun 2023 13:17:09 +0200 Message-ID: <20230618111955.40994-19-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230618111955.40994-2-ffmpeg@haasn.xyz> References: <20230618111955.40994-2-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 17/22] lavfi/vf_libplacebo: add in_idx variable X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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: Niklas Haas Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: VZUym1xaJKKq From: Niklas Haas To allow placing an input dynamically, as a function of the input index. --- doc/filters.texi | 2 ++ libavfilter/vf_libplacebo.c | 9 +++++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/doc/filters.texi b/doc/filters.texi index 5e25cf293e5..cf17930b014 100644 --- a/doc/filters.texi +++ b/doc/filters.texi @@ -16249,6 +16249,8 @@ the @option{crop_w}, @option{crop_h}, @option{crop_x}, @option{crop_y}, also contain the following constants: @table @option +@item in_idx, idx +The (0-based) numeric index of the currently active input stream. @item crop_w, cw @item crop_h, ch The computed values of @option{crop_w} and @option{crop_h}. diff --git a/libavfilter/vf_libplacebo.c b/libavfilter/vf_libplacebo.c index a3a034766e2..fcd3ad07e2c 100644 --- a/libavfilter/vf_libplacebo.c +++ b/libavfilter/vf_libplacebo.c @@ -70,6 +70,7 @@ enum { }; static const char *const var_names[] = { + "in_idx", "idx",///< index of input "in_w", "iw", ///< width of the input video frame "in_h", "ih", ///< height of the input video frame "out_w", "ow", ///< width of the output video frame @@ -92,6 +93,7 @@ static const char *const var_names[] = { }; enum var_name { + VAR_IN_IDX, VAR_IDX, VAR_IN_W, VAR_IW, VAR_IN_H, VAR_IH, VAR_OUT_W, VAR_OW, @@ -115,6 +117,7 @@ enum var_name { /* per-input dynamic filter state */ typedef struct LibplaceboInput { + int idx; pl_renderer renderer; pl_queue queue; enum pl_queue_status qstatus; @@ -574,7 +577,7 @@ static void unlock_queue(void *priv, uint32_t qf, uint32_t qidx) #endif static int input_init(AVFilterContext *avctx, AVFilterLink *link, - LibplaceboInput *input) + LibplaceboInput *input, int idx) { LibplaceboContext *s = avctx->priv; @@ -584,6 +587,7 @@ static int input_init(AVFilterContext *avctx, AVFilterLink *link, input->queue = pl_queue_create(s->gpu); input->renderer = pl_renderer_create(s->log, s->gpu); input->link = link; + input->idx = idx; return 0; } @@ -668,7 +672,7 @@ static int init_vulkan(AVFilterContext *avctx, const AVVulkanDeviceContext *hwct if (!s->inputs) return AVERROR(ENOMEM); for (int i = 0; i < s->nb_inputs; i++) - RET(input_init(avctx, avctx->inputs[i], &s->inputs[i])); + RET(input_init(avctx, avctx->inputs[i], &s->inputs[i], i)); /* fall through */ fail: @@ -741,6 +745,7 @@ static void update_crops(AVFilterContext *ctx, LibplaceboInput *in, double image_pts = src->pts * av_q2d(in->link->time_base); /* Update dynamic variables */ + s->var_values[VAR_IN_IDX] = s->var_values[VAR_IDX] = in->idx; s->var_values[VAR_IN_W] = s->var_values[VAR_IW] = in->link->w; s->var_values[VAR_IN_H] = s->var_values[VAR_IH] = in->link->h; s->var_values[VAR_A] = (double) in->link->w / in->link->h; From patchwork Sun Jun 18 11:17:11 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Haas X-Patchwork-Id: 42193 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:be15:b0:121:b37c:e101 with SMTP id ge21csp56932pzb; Sun, 18 Jun 2023 04:21:55 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ4hoVX/09lPS+/I1E8SA3uHryg49jCfvm+aAl/RE/J9zsXQ4pDTkzdQZoSon2PNVmnewo63 X-Received: by 2002:a17:907:3ea2:b0:978:9b09:ccaf with SMTP id hs34-20020a1709073ea200b009789b09ccafmr8007578ejc.14.1687087315308; Sun, 18 Jun 2023 04:21:55 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1687087315; cv=none; d=google.com; s=arc-20160816; b=XDUwyaaUHbW5VSUGPxwOCRzUVIa5YXAIzEmwjmuMbno+QApeTzQC8ukHbkiBBrDiNr qhXOfL9T4zfVxSbVdARVhSXlHlsS0iPQ3xETPzyaIMShka4LiNd3eJChNJGui9UKa1W1 0Ec8b8yLfWlgH82sf8KgZFOviowHnN61OnLCP2LnY30NY6sDjsXxFdKW5bVn4zZaqed0 IACeVtBnZUAuaAAVGSzZm/RIfikq3k8jwXe3v90s+WcZitIT5IW5bIPJT5H6MECMgKwa NMyWJuMzLzjz4vBMfos9PwIPnw4Zm0JnnVYHmdZ14myN21U1r/wG8uR2QNZHg8iVhskS 6OHg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature:delivered-to; bh=xSds6bV5iD2TMxLEE+WcSjF/RAxQWRN9vmuHVxaQ/1E=; b=yZShq+H8eIps7gRcWO39AI4voikvpP7zUEbpJmrErrikli1g7roxVaOjQIbF+Vfdd4 87W5ldmeQt/LZiBKDQN1rAZbGAR/w4QVzwVTkC2RC43UZKsxMwpc2Ey5kJjOOJdAqag/ JH/Y56GZ3/6awVMq+w54X4fC71HKxf+BQjrNDold30JwXEK7VCL2Wpv+HNByr5AFgLbi P4sA8iY7viq5ZFjXEz+IuUkkxxmxKUNsuXPnrU2xDZc12WASzhL3lvBwtA3jCGQ4HSl7 qZNN/o/6YWrUShyxy2xOzPgcF0O5mbovzYD3tENB4zP/KXsgk3dKBVJhIw4vmUKTDvD7 nuYQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@haasn.xyz header.s=mail header.b=ACv+WVeY; 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 k4-20020a1709065fc400b0097875e59989si12363123ejv.973.2023.06.18.04.21.55; Sun, 18 Jun 2023 04:21:55 -0700 (PDT) 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=@haasn.xyz header.s=mail header.b=ACv+WVeY; 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 A2A8B68C053; Sun, 18 Jun 2023 14:20:24 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from haasn.dev (haasn.dev [78.46.187.166]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 1B0AC68BFC0 for ; Sun, 18 Jun 2023 14:20:16 +0300 (EEST) Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id 095D64B86A; Sun, 18 Jun 2023 13:20:13 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1687087213; bh=fWjpXdoK20l/IaW4vJjoLrF4KjHBxuWk+yq3+DMs+vc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ACv+WVeY0bbjjbhd/IyIBXWwFiFQGBWNZroSW74MqsKEI23nHwXqWxh7IQ5iumQ6j xLVRiYqOsENUNgsuS2271C4vB8J+4BrgvEx2/RPmM2DtB8RAZKzUQtTsWtq2uiLkDa NaDmygBrwes4foh6fM35RJ2CtUPwIhX2QqxNJi4U= From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Sun, 18 Jun 2023 13:17:11 +0200 Message-ID: <20230618111955.40994-21-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230618111955.40994-2-ffmpeg@haasn.xyz> References: <20230618111955.40994-2-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 19/22] lavfi/vf_libplacebo: skip cache selectively per-input X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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: Niklas Haas Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: 5e39s4nszbX9 From: Niklas Haas It may be the case that we want to skip the single frame cache for some inputs but not others. --- libavfilter/vf_libplacebo.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/libavfilter/vf_libplacebo.c b/libavfilter/vf_libplacebo.c index 627223256c6..f7b9bdba742 100644 --- a/libavfilter/vf_libplacebo.c +++ b/libavfilter/vf_libplacebo.c @@ -182,7 +182,6 @@ typedef struct LibplaceboContext { float antiringing; int sigmoid; int skip_aa; - int skip_cache; float polar_cutoff; int disable_linear; int disable_builtin; @@ -471,7 +470,6 @@ static int update_settings(AVFilterContext *ctx) .num_hooks = s->num_hooks, .skip_anti_aliasing = s->skip_aa, - .skip_caching_single_frame = s->skip_cache, .polar_cutoff = s->polar_cutoff, .disable_linear_scaling = s->disable_linear, .disable_builtin_scalers = s->disable_builtin, @@ -883,8 +881,10 @@ static int output_frame(AVFilterContext *ctx, int64_t pts) s->params.blend_params = NULL; for (int i = 0; i < s->nb_inputs; i++) { LibplaceboInput *in = &s->inputs[i]; + int high_fps = av_cmp_q(in->link->frame_rate, outlink->frame_rate) > 0; if (in->qstatus != PL_QUEUE_OK) continue; + s->params.skip_caching_single_frame = high_fps; update_crops(ctx, in, &target, out->pts * av_q2d(outlink->time_base)); pl_render_image_mix(in->renderer, &in->mix, &target, &s->params); s->params.skip_target_clearing = true; @@ -1198,9 +1198,6 @@ static int libplacebo_config_output(AVFilterLink *outlink) if (s->fps.num) { outlink->frame_rate = s->fps; outlink->time_base = av_inv_q(s->fps); - s->skip_cache = av_cmp_q(inlink->frame_rate, s->fps) > 0; - } else { - s->skip_cache = true; } /* Static variables */ From patchwork Sun Jun 18 11:17:12 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Haas X-Patchwork-Id: 42195 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:be15:b0:121:b37c:e101 with SMTP id ge21csp57042pzb; Sun, 18 Jun 2023 04:22:13 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ5ZtCFABm3u1s1ji4AL4FWSit41fcisBs1vFeZZDWOIelDyIrAviRIXK9+0zzVs2fB76kcf X-Received: by 2002:aa7:d317:0:b0:51a:52dd:d050 with SMTP id p23-20020aa7d317000000b0051a52ddd050mr409792edq.24.1687087332736; Sun, 18 Jun 2023 04:22:12 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1687087332; cv=none; d=google.com; s=arc-20160816; b=n7fG0GbkySUTW2fAK3L8apNucl4ZNvTrmDV0r/+eqdU6R3xBhf+B1MzNzxtvW52VtW pfqJl/UpfTjWnuwTzJIG7rp4E4spWoNHC7n7McoeFRq3bMk09JWOJlGfMLuNpRIpLoCd v4GmUS4sJzrpsiQRUBZwYXfQG9cSUddUHZ+Y91RinxDH/jUtHW5WCFopLjWPDzUNtVgH gaVfmWoB/rUB+5K0sOk5Zz6qnHWEE79YpEDVXz24yAA12IgBVbtP8StEsWSbYrvUq/IJ OcmJVAsfJ+bxXOoUf4URrRCCoNA1wLdztQe9ZJRJ9WQPclwjWST0pzGoQX677o1qutnm Chqw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature:delivered-to; bh=lY3HVzfTgqFzQ1pKIOXnIjrce+Fv3g5NOMU+EkqXx1w=; b=SbvrjyqhQ7O4ZwG4jA5EpgMos/Z10+UzvvpKw99DVW1mXxoN0Z5cd2FGyRN8/yNt1u RtRvI4YL+G5vZiAuu//vQIqhrpoo/T82bdCDwBZ1IA51N96RjT2/W6vqMj15HYN2qqZK iwGyFFQD7u15SWWds2XOPI3RRlTOsn+uNrKDlqlPbh4y/vWkaxI76USUflIdeQ/UkwOu TbbJPNeh0C2psysIR6sw7MTHHq6u8euk6ktMzEs86Ai1Vw8UHCUQVUrZua2J0v6b7bUJ vdMCB0/DJAIA4Sy4fZJGFOMVcA0Xj112zHzGrHvkxP/it7/1cm0jkhdXbra8KVuaT9Dn Bi3w== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@haasn.xyz header.s=mail header.b=q3z6ZSQQ; 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 y2-20020a50eb02000000b0050e53b970e0si13409397edp.127.2023.06.18.04.22.12; Sun, 18 Jun 2023 04:22:12 -0700 (PDT) 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=@haasn.xyz header.s=mail header.b=q3z6ZSQQ; 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 7411568C176; Sun, 18 Jun 2023 14:20:26 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from haasn.dev (haasn.dev [78.46.187.166]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 2E5D868BFA9 for ; Sun, 18 Jun 2023 14:20:16 +0300 (EEST) Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id 4A3AF4B884; Sun, 18 Jun 2023 13:20:13 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1687087213; bh=xMzLoJSpFfHQVRRxVm2BAfmU2jPjL4uTl4JqW0xZcSU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=q3z6ZSQQZjiPAXmJLqat0vurBbI4NhWyYltNUqz+qtOJi8MTcagwEUH/1VbhY/3AO v/2AjAHVx/5Z7OEJ+5xatj9KcI83Y5ZQDq/5TA+XaCDcXpJJd3Je6tlkBqT9eDLk8x ak7VVnRQ9DFqMiDNZFCASOrV1gzfJSSmFpuTab9k= From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Sun, 18 Jun 2023 13:17:12 +0200 Message-ID: <20230618111955.40994-22-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230618111955.40994-2-ffmpeg@haasn.xyz> References: <20230618111955.40994-2-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 20/22] lavfi/vf_libplacebo: also skip cache if in FPS == out FPS X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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: Niklas Haas Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: IMisMn1nUVRp From: Niklas Haas Fixes an oversight in the previous code which should have been >=, not >. --- libavfilter/vf_libplacebo.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libavfilter/vf_libplacebo.c b/libavfilter/vf_libplacebo.c index f7b9bdba742..1085b6fdd0a 100644 --- a/libavfilter/vf_libplacebo.c +++ b/libavfilter/vf_libplacebo.c @@ -881,7 +881,7 @@ static int output_frame(AVFilterContext *ctx, int64_t pts) s->params.blend_params = NULL; for (int i = 0; i < s->nb_inputs; i++) { LibplaceboInput *in = &s->inputs[i]; - int high_fps = av_cmp_q(in->link->frame_rate, outlink->frame_rate) > 0; + int high_fps = av_cmp_q(in->link->frame_rate, outlink->frame_rate) >= 0; if (in->qstatus != PL_QUEUE_OK) continue; s->params.skip_caching_single_frame = high_fps; From patchwork Sun Jun 18 11:17:13 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Haas X-Patchwork-Id: 42194 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:be15:b0:121:b37c:e101 with SMTP id ge21csp56984pzb; Sun, 18 Jun 2023 04:22:04 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ5qFbmlfSfchbxaLOck6lhYYlC6gsbcuFNKlXZ7Bgce4yZ+CC+GoHwOwIAeICPE6ceuwxUO X-Received: by 2002:a17:907:72ce:b0:96f:a412:8b03 with SMTP id du14-20020a17090772ce00b0096fa4128b03mr6271650ejc.5.1687087324066; Sun, 18 Jun 2023 04:22:04 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1687087324; cv=none; d=google.com; s=arc-20160816; b=PwzqLz5CnK+VW9nKkQx11lGsytcP3S2rPg0LoITwXj1qZWWSMEsz9HN9xJ6kXl0iKH XmfOaOZ1ZG7B5VKUMZv+9vyp0t3mHkVIw+1Om8zyVdBqiobY9syvgM82Zz3Ux1lAxaZk dkWtQnhF5TDUQ4x+N7mcysRnY7YGjC2Mbf6Di0hofwOIWIO6n4PhmAcRZYNEGsb77AiG OS0pAAYzfzFpCtl7hhSjcq80agh/I4myq+daLqCh5XN2NrqQjwp3f3IzmWqpKIZgUUdY wytomHDL2fTa5n1cC/nqDDyc7WqWF6AVigcPHy1WrJ7EjsTvegsKieCmfD3B70f8lvzM VHBA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature:delivered-to; bh=lN5Fk9mDDsI75FNCiY3QopNTFOOwCKSnjHT/WX2WA1Y=; b=kJKKNzo63oJUDRgK/hQdexVfN8CdrHfFecvJ2OTkyyhKWWr60vZLFu2UnCEic+eVCD xGtKiBG9no7WVzQKwen2h2mH5QLQwy9h9MDJjqTGosl70KuoSQeuLC9HzmIdppKJaemS HTD24t7YkWl4ZPhbwZKxRLuVrfdY4RrghTeTRhuHwUXcBFiI1CDn/1dWboX61XS5gbwr rmC++NVJVX/eZWoLAZjvPUx5ND+pn1cTjCCUsWMnPVXS73CFTpY+b4RjrqdhhCL+yiRG 8Miiv9d9b3/QHSyKN0dgt9Ow+BhIyZ2PbGaVhALZa0h+wnc83PgGspVVNYUsW+OfjdhX GQAQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@haasn.xyz header.s=mail header.b=iuzRL0Oe; 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 i17-20020a170906851100b009886cc3e82csi626929ejx.540.2023.06.18.04.22.03; Sun, 18 Jun 2023 04:22:04 -0700 (PDT) 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=@haasn.xyz header.s=mail header.b=iuzRL0Oe; 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 A0B7C68C15F; Sun, 18 Jun 2023 14:20:25 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from haasn.dev (haasn.dev [78.46.187.166]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 2053568BFA1 for ; Sun, 18 Jun 2023 14:20:16 +0300 (EEST) Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id 922E34B8A0; Sun, 18 Jun 2023 13:20:13 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1687087213; bh=gAlLcYYNr6VOd5QW6ZfbSq0IxYVumeMrLqAUWeemzkY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=iuzRL0OeFsKb+PStAIE7zykvTowdyNtkuNaKFS8SPjAy3fDKgA182sr4Rg+reG+CB /Tl19N2oAnPo0Jbw17vG9bIWbAsbxDIirbLjUZ8W6iV1sCTrhxL4yIsh8Reo3hn2bm 8pvTA0NSQQEOC0Dq9H/1q7eFtIBYTkAInpBR6eTs= From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Sun, 18 Jun 2023 13:17:13 +0200 Message-ID: <20230618111955.40994-23-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230618111955.40994-2-ffmpeg@haasn.xyz> References: <20230618111955.40994-2-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 21/22] lavfi/vf_libplacebo: set time_base/frame_rate dynamically X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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: Niklas Haas Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: tdDT6VvP7kj6 From: Niklas Haas Use the gcd of all input timebases to ensure PTS accuracy. For the framerate, just pick the highest of all the inputs, under the assumption that we will render frames with approximately this frequency. Of course, this is not 100% accurate, in particular if the input frames are badly misaligned. But this field is informational to begin with. Importantly, it covers the "common" case of combining high FPS and low FPS streams with aligned frames. --- libavfilter/vf_libplacebo.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/libavfilter/vf_libplacebo.c b/libavfilter/vf_libplacebo.c index 1085b6fdd0a..09a24e7c291 100644 --- a/libavfilter/vf_libplacebo.c +++ b/libavfilter/vf_libplacebo.c @@ -1158,6 +1158,11 @@ static int libplacebo_config_input(AVFilterLink *inlink) return 0; } +static inline AVRational max_q(AVRational a, AVRational b) +{ + return av_cmp_q(a, b) < 0 ? b : a; +} + static int libplacebo_config_output(AVFilterLink *outlink) { int err; @@ -1198,6 +1203,16 @@ static int libplacebo_config_output(AVFilterLink *outlink) if (s->fps.num) { outlink->frame_rate = s->fps; outlink->time_base = av_inv_q(s->fps); + } else { + outlink->frame_rate = avctx->inputs[0]->frame_rate; + outlink->time_base = avctx->inputs[0]->time_base; + for (int i = 1; i < s->nb_inputs; i++) { + outlink->frame_rate = max_q(outlink->frame_rate, + avctx->inputs[i]->frame_rate); + outlink->time_base = av_gcd_q(outlink->time_base, + avctx->inputs[i]->time_base, + AV_TIME_BASE / 2, AV_TIME_BASE_Q); + } } /* Static variables */ From patchwork Sun Jun 18 11:17:14 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Haas X-Patchwork-Id: 42196 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:be15:b0:121:b37c:e101 with SMTP id ge21csp57086pzb; Sun, 18 Jun 2023 04:22:21 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ4bgsYBMN8rKrhTXG/kFw57jKaV45zbq7m3W7PpxbdU4fKRbkSAWHslNPGH9ogbj9W6POtl X-Received: by 2002:a05:6402:1150:b0:518:6a99:cac3 with SMTP id g16-20020a056402115000b005186a99cac3mr4236808edw.31.1687087341183; Sun, 18 Jun 2023 04:22:21 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1687087341; cv=none; d=google.com; s=arc-20160816; b=H8xmadtPX8UPwm1ThutRBXxM90EuZp5lxVNYpY+qLzXsxAHzhrMI/wmIeRHfKdom9X q2dn3h/yUJJaXbZrRBRdBjk70juWNx8k5EozRX/xhtcBz7pRcmjP62/DA+03W0hmXh/4 8AK8tW0kf+Bx+4OCPWChCmWEfAvyKhJTmRmb0ErbxsRKe/TT/l05IeRFtbxk/Jk7jh+M iaMOIChsVqR3xZb0KJ523DoVelcxulBo9eJC1+8zSetvgM9stSOJmEOQuj/FHYYw7WIl 7aaF1UfpgHtfFblsbIwS3peMpd7ybTuW/3nl3FigeSY1RpCS6l6j5hTDA2Q+7zEuWVNq mUyg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature:delivered-to; bh=CiRzXHS/c3fzvyW0LrD7RoybeJPnv3T+Q3rzUKKa1aY=; b=1JPrXQ2G9QfJ0XX5/qpQH0221d+AptHzV8NQS9FtJELa5D3a+Dy/bMH3xEWeRJe9l2 LntrX4jZ0yaamTznJmSYJwhT84fiU9MDkpnfOTV2yNrINTyfCzkOXiCUmuqgAqVTFQim JXUzh9v/bAoWGvzp3wSJnxK+qj5iv2LFGTAcqrtkYGD02Dduhylj/tEUilWwB0TP10R7 S4J0TE0kFWZtOd44z+lgaUy3zfw1Lzd2DntfgsroV1H8/mmJ9s5vsphv9ucI7otoY6VM kzVBZBIVyV3jShhrc8nsNMPyx4gBarlq1DKxErxxsfcYE65xHhJfq4QuUECzU+sj+CwA Ruew== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@haasn.xyz header.s=mail header.b=rz27yykA; 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 z20-20020aa7cf94000000b005169f6f7f6bsi13067750edx.56.2023.06.18.04.22.20; Sun, 18 Jun 2023 04:22:21 -0700 (PDT) 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=@haasn.xyz header.s=mail header.b=rz27yykA; 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 77D9A68C1A3; Sun, 18 Jun 2023 14:20:27 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from haasn.dev (haasn.dev [78.46.187.166]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 3629868BFCD for ; Sun, 18 Jun 2023 14:20:16 +0300 (EEST) Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id CDDC042350; Sun, 18 Jun 2023 13:20:13 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1687087213; bh=EZ1q2zHJyuCM6EoSFE54qJ16jycEZfgBtEXyX+Wh4XM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=rz27yykA/HEXlE52mbWrXSXnZvqV0X4Zj/EPt1RZDDPKX4TZznxqoP4Hdw9Z1/scC +uR6rvWjgNAIz/mv6i+9dkPhL6TTThAs72QPrTIw+QCqXd2Q24R997ZAMc/jztZvdt I2qEO2925I0NBzzLHwY4//fyFuaPA9GzMWy/v1Y8= From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Sun, 18 Jun 2023 13:17:14 +0200 Message-ID: <20230618111955.40994-24-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230618111955.40994-2-ffmpeg@haasn.xyz> References: <20230618111955.40994-2-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 22/22] lavfi/vf_libplacebo: add nb_inputs option X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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: Niklas Haas Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: 81sGzYHUzMEo From: Niklas Haas To control the number of inputs. --- doc/filters.texi | 5 +++++ libavfilter/vf_libplacebo.c | 25 ++++++++++++++----------- 2 files changed, 19 insertions(+), 11 deletions(-) diff --git a/doc/filters.texi b/doc/filters.texi index cf17930b014..c3d3f004b19 100644 --- a/doc/filters.texi +++ b/doc/filters.texi @@ -16153,6 +16153,11 @@ to preserve the source colorimetry and size as best as it can, but it will apply any embedded film grain, dolby vision metadata or anamorphic SAR present in source frames. @table @option +@item inputs +Set the number of inputs. This can be used, alongside the @code{idx} variable, +to allow placing/blending multiple inputs inside the output frame. This +effectively enables functionality similar to @ref{hstack}, @ref{overlay}, etc. + @item w @item h Set the output video dimension expression. Default values are @code{iw} and diff --git a/libavfilter/vf_libplacebo.c b/libavfilter/vf_libplacebo.c index 09a24e7c291..056041d2131 100644 --- a/libavfilter/vf_libplacebo.c +++ b/libavfilter/vf_libplacebo.c @@ -502,6 +502,7 @@ static int parse_shader(AVFilterContext *avctx, const void *shader, size_t len) } static void libplacebo_uninit(AVFilterContext *avctx); +static int libplacebo_config_input(AVFilterLink *inlink); static int libplacebo_init(AVFilterContext *avctx) { @@ -530,6 +531,17 @@ static int libplacebo_init(AVFilterContext *avctx) s->out_format = AV_PIX_FMT_NONE; } + for (int i = 0; i < s->nb_inputs; i++) { + AVFilterPad pad = { + .name = av_asprintf("input%d", i), + .type = AVMEDIA_TYPE_VIDEO, + .config_props = &libplacebo_config_input, + }; + if (!pad.name) + return AVERROR(ENOMEM); + RET(ff_append_inpad_free_name(avctx, &pad)); + } + RET(update_settings(avctx)); RET(av_expr_parse(&s->crop_x_pexpr, s->crop_x_expr, var_names, NULL, NULL, NULL, NULL, 0, s)); @@ -665,7 +677,6 @@ static int init_vulkan(AVFilterContext *avctx, const AVVulkanDeviceContext *hwct } /* Initialize inputs */ - s->nb_inputs = 1; s->inputs = av_calloc(s->nb_inputs, sizeof(*s->inputs)); if (!s->inputs) return AVERROR(ENOMEM); @@ -1252,6 +1263,7 @@ fail: #define DYNAMIC (STATIC | AV_OPT_FLAG_RUNTIME_PARAM) static const AVOption libplacebo_options[] = { + { "inputs", "Number of inputs", OFFSET(nb_inputs), AV_OPT_TYPE_INT, {.i64 = 1}, 1, INT_MAX, .flags = STATIC }, { "w", "Output video frame width", OFFSET(w_expr), AV_OPT_TYPE_STRING, {.str = "iw"}, .flags = STATIC }, { "h", "Output video frame height", OFFSET(h_expr), AV_OPT_TYPE_STRING, {.str = "ih"}, .flags = STATIC }, { "fps", "Output video frame rate", OFFSET(fps_string), AV_OPT_TYPE_STRING, {.str = "none"}, .flags = STATIC }, @@ -1443,14 +1455,6 @@ static const AVOption libplacebo_options[] = { AVFILTER_DEFINE_CLASS(libplacebo); -static const AVFilterPad libplacebo_inputs[] = { - { - .name = "default", - .type = AVMEDIA_TYPE_VIDEO, - .config_props = &libplacebo_config_input, - }, -}; - static const AVFilterPad libplacebo_outputs[] = { { .name = "default", @@ -1467,10 +1471,9 @@ const AVFilter ff_vf_libplacebo = { .uninit = &libplacebo_uninit, .activate = &libplacebo_activate, .process_command = &libplacebo_process_command, - FILTER_INPUTS(libplacebo_inputs), FILTER_OUTPUTS(libplacebo_outputs), FILTER_QUERY_FUNC(libplacebo_query_format), .priv_class = &libplacebo_class, .flags_internal = FF_FILTER_FLAG_HWFRAME_AWARE, - .flags = AVFILTER_FLAG_HWDEVICE, + .flags = AVFILTER_FLAG_HWDEVICE | AVFILTER_FLAG_DYNAMIC_INPUTS, };