From patchwork Wed Apr 24 10:51:56 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Haas X-Patchwork-Id: 48246 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:2d06:b0:1a9:af23:56c1 with SMTP id tw6csp570959pzb; Wed, 24 Apr 2024 04:03:26 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCXdQEClhd9uTPQj7FhuEJOERgJG6YufElfd10TlQNtSeEeBeCrB6+D6tBpwhmy/hwAq6xCuvxpdYwIZcPOXb8/jErFZjZj40fexqg== X-Google-Smtp-Source: AGHT+IH674pLXsVIxCSpUje2xXxEBX8KITfQTSHiidrJkzeAgvCmMR+RcXrfRiYamviUWFBgAGiO X-Received: by 2002:a17:907:6d08:b0:a58:9482:dcd9 with SMTP id sa8-20020a1709076d0800b00a589482dcd9mr923844ejc.45.1713956605850; Wed, 24 Apr 2024 04:03:25 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1713956605; cv=none; d=google.com; s=arc-20160816; b=Jn+EpczVI5DN5KnDy/4q+4MApdmehg31hvHLGe+IcO+yHOY0Z5VI4Muob9QMD0lfjb z+Ivf5cHHcdfYwz4qFX9g0dihs2vQDyy/5Tbqm64oEo1rskUysBixWuwrev8h6cKIGYY wPjwwLrP6B0nZu8z0Bbe9XmVjL//DNXKR4IlChIDwrfNnilpC4+pTXWABQB82n7lQ7Hw tzQRkiTUZXnyuffYytmopRQHZEb7mHPjfyIVFqmeYjnsqQL0y7nAjoYdWc/mqbmgVILN NZmeLBEjMJuxHwdhRPnbu020N++zjkcUwamseYr1+eLBnZmti5kCNjy4wCv187VS1jgJ Eosw== 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=MtuqgfNhdzvANGBN1OxW+52d3lk6/6aSptzX9uwxYXo=; fh=xmAeKtysnShNOmkhiJmYkS30uw4Fu2hvBJ7qlIwukxQ=; b=Ewr0Qr78vbtoLaqvT5W0jS/xiTUqB7lFjgNMLKVQaKJK1+cmah8M8gvYfgD0s52DFA HF6LetQE4X++SkF8PvFAEenhRL08ws7HKKUvXRvu2GOCTfP/GGhXUcjgp0hQ+FFJbBre +OOli5VOZ6nxfotDcnmY5aVVTMEumqfExv5yc2qwsZ/VXMsn+mYE9cFwVrEhoSX6GDOK h6e2F/v6FCYGHgDCX8AFgYvdP4KP/25w0/LQCdbdH6mNoInlh64vMFu+dSAbpH/tuvnO CimxlaWm1V9Vq8XmrokR/vYpK6Rr+Uy8sM7D9WhIGB9bpBaLxtvXv02DCwdItpE7eUgC VoYw==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@haasn.xyz header.s=mail header.b=gqwfkYB9; 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 he7-20020a1709073d8700b00a52225ba13asi9354768ejc.25.2024.04.24.04.03.25; Wed, 24 Apr 2024 04:03: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=gqwfkYB9; 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 327E568D188; Wed, 24 Apr 2024 14:03:13 +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 6424168D0D9 for ; Wed, 24 Apr 2024 14:03:05 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1713956585; bh=6DlGxItr7azfF8Chmhe3+CdUWCuKAbGhYNu9WRaMjhw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=gqwfkYB9CwWtxkucnrX0qj5+wNGyFFAI5hBz0noq/6vRRxE+K4yXHagZlszqpE7K4 PrGzURdI7qqvpm018vBKunXuRC4kgn3A4XWt3C2u7EUy3TE/FCz4RoNM8PvhYrpSih 4WGJBrWZ3qFD8D11edySQ+8C6Ca2l6fLKslfiKko= Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id 2E01A423A7; Wed, 24 Apr 2024 13:03:05 +0200 (CEST) From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Wed, 24 Apr 2024 12:51:56 +0200 Message-ID: <20240424110257.38715-2-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240424110257.38715-1-ffmpeg@haasn.xyz> References: <20240424110257.38715-1-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 1/5] avfilter/framesync: make framesync_class un-static 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: jokUkijNEG5b From: Niklas Haas And rename to ff_framesync_class. More convenient for downstream users. --- libavfilter/framesync.c | 6 +++--- libavfilter/framesync.h | 1 + 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/libavfilter/framesync.c b/libavfilter/framesync.c index 1afd70ab21..a691136f34 100644 --- a/libavfilter/framesync.c +++ b/libavfilter/framesync.c @@ -51,7 +51,7 @@ static const AVOption framesync_options[] = { 0, AV_OPT_TYPE_CONST, { .i64 = TS_NEAREST }, .flags = FLAGS, .unit = "ts_sync_mode" }, { NULL } }; -static const AVClass framesync_class = { +const AVClass ff_framesync_class = { .version = LIBAVUTIL_VERSION_INT, .class_name = "framesync", .item_name = framesync_name, @@ -62,7 +62,7 @@ static const AVClass framesync_class = { const AVClass *ff_framesync_child_class_iterate(void **iter) { - const AVClass *c = *iter ? NULL : &framesync_class; + const AVClass *c = *iter ? NULL : &ff_framesync_class; *iter = (void *)(uintptr_t)c; return c; } @@ -79,7 +79,7 @@ void ff_framesync_preinit(FFFrameSync *fs) { if (fs->class) return; - fs->class = &framesync_class; + fs->class = &ff_framesync_class; av_opt_set_defaults(fs); } diff --git a/libavfilter/framesync.h b/libavfilter/framesync.h index 233f50a0eb..130d067bae 100644 --- a/libavfilter/framesync.h +++ b/libavfilter/framesync.h @@ -316,6 +316,7 @@ int ff_framesync_dualinput_get(FFFrameSync *fs, AVFrame **f0, AVFrame **f1); int ff_framesync_dualinput_get_writable(FFFrameSync *fs, AVFrame **f0, AVFrame **f1); const AVClass *ff_framesync_child_class_iterate(void **iter); +extern const AVClass ff_framesync_class; #define FRAMESYNC_DEFINE_PURE_CLASS(name, desc, func_prefix, options) \ static const AVClass name##_class = { \ From patchwork Wed Apr 24 10:51:57 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Haas X-Patchwork-Id: 48247 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:2d06:b0:1a9:af23:56c1 with SMTP id tw6csp571081pzb; Wed, 24 Apr 2024 04:03:38 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCUUTFFgz7hNo1hq5/NIdDunaCDlqci7IxVn+vAKYVt0f3MnkEWVTvqQjMa6Zycg5hba9KqhdU9KJZBL0H19vNS8SL/uy1KeyK78rw== X-Google-Smtp-Source: AGHT+IFl9HueAVuv8l0azAPdtQc83kc8COqPnMhiYbM0qUzHKvBIrANj4PmH0clpEs4v52yQEn3X X-Received: by 2002:ac2:5466:0:b0:518:d685:9935 with SMTP id e6-20020ac25466000000b00518d6859935mr1505705lfn.8.1713956617919; Wed, 24 Apr 2024 04:03:37 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1713956617; cv=none; d=google.com; s=arc-20160816; b=b1w5kly9KxfomJec9c8eGbGOS6ef2T2ojzP6FIjAZj+OiLQRMAyz6zdarA4UAUK61D kQjbnbnaamgfT+7Z5eTX5G+1mCg6zTnYheNHfxqVaxx/spwcz9/A15i01TkEOOT330r+ AIt/bMLMQN8yRR8YPTUAH8l78yB7Zc/8tWcsW4PQZkt16fq6z6QEGeZjxKU4Yfv0bHvR DShRrHssQNHDf9C45Foo5qwK6yBaCExwYXa4OBCb0yOYuznrZH+3cNehkMIhc2jr+a5E FSandawUywAEPssrYJXTRGUkI2pnrPyXcQNDBneLXEhIoQDEIftUoq7fub57TGPeKRZy LIiw== 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=KdnBybd+DxHd7WwKyscJF3neL5HaF1tuGmhPk7yTR/8=; fh=xmAeKtysnShNOmkhiJmYkS30uw4Fu2hvBJ7qlIwukxQ=; b=orYrH4tikxjBj1tDbbA3bDR9geWO/3TduwGbPA/W1nA1zRZiFwnfPSnTyEKkTWZb/d 6C++0yyBnGWusLs+MliWQgP3K4AEdytUxnvYMu75FMXlwMjU6z6KSA9AKhnbBINebbJY snpQMSAQgcpkaSNmng0DY8OgBKg5FY9HnTTt+S6JL9InxQWVVFKALXtxoAvQs6+Oclex aYeHqBVenTYc3VfG2wtnmnwm1qfJvyDnWX/+dpdQ/gKwHCENAGlNQpv/zbwgjVXZk4VA cXYcO2LMF7bwGTbvGp5Kbh16ebwYQIxGgQyYJQjaN8dT+8yI6GdV7MzOpi9H6MoHjxwt ttFg==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@haasn.xyz header.s=mail header.b=Z3cXRYKe; 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 z17-20020a056512309100b005195c66f78fsi4642369lfd.83.2024.04.24.04.03.35; Wed, 24 Apr 2024 04:03:37 -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=Z3cXRYKe; 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 264DA68D380; Wed, 24 Apr 2024 14:03: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 9F8D368D0D9 for ; Wed, 24 Apr 2024 14:03:05 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1713956585; bh=8ILWec1I3HBOVjGiezvdRDQkYUiU3f80tUo+oCxLSII=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Z3cXRYKevNIwqmzFQw0xlOmg2LVTH1gEwbqN16wMLQfI/Lm9siBtUjvO4w2yKHv8w U61YpYdLEUEGL1sTe1Hrooe8Dr8WKvVqV7Fnekp+598IM6588n/TnORnD69DDJnOWK Z9fthqmIvF8MOQPBav9fInoSFOgrUtGa7MjchU5E= Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id 63BE042527; Wed, 24 Apr 2024 13:03:05 +0200 (CEST) From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Wed, 24 Apr 2024 12:51:57 +0200 Message-ID: <20240424110257.38715-3-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240424110257.38715-1-ffmpeg@haasn.xyz> References: <20240424110257.38715-1-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 2/5] avfilter/vf_scale: switch to FFFrameSync 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: predUcrnLAW/ From: Niklas Haas Preliminary commit, in anticipation of adding support for multiple inputs (with proper synchronization and activate() callback). --- doc/filters.texi | 4 +-- libavfilter/vf_scale.c | 65 +++++++++++++++++++++++++++++++++++++++--- 2 files changed, 63 insertions(+), 6 deletions(-) diff --git a/doc/filters.texi b/doc/filters.texi index fc813f12c1..f20b72ab96 100644 --- a/doc/filters.texi +++ b/doc/filters.texi @@ -20989,8 +20989,8 @@ the next filter, the scale filter will convert the input to the requested format. @subsection Options -The filter accepts the following options, or any of the options -supported by the libswscale scaler. +The filter accepts the following options, any of the options supported +by the libswscale scaler, as well as any of the @ref{framesync} options. See @ref{scaler_options,,the ffmpeg-scaler manual,ffmpeg-scaler} for the complete list of scaler options. diff --git a/libavfilter/vf_scale.c b/libavfilter/vf_scale.c index 1c07daeddf..a986dc97ae 100644 --- a/libavfilter/vf_scale.c +++ b/libavfilter/vf_scale.c @@ -29,6 +29,7 @@ #include "avfilter.h" #include "formats.h" +#include "framesync.h" #include "internal.h" #include "scale_eval.h" #include "video.h" @@ -113,6 +114,7 @@ typedef struct ScaleContext { struct SwsContext *isws[2]; ///< software scaler context for interlaced material // context used for forwarding options to sws struct SwsContext *sws_opts; + FFFrameSync fs; /** * New dimensions. Special values are: @@ -287,6 +289,8 @@ static av_cold int preinit(AVFilterContext *ctx) if (ret < 0) return ret; + ff_framesync_preinit(&scale->fs); + return 0; } @@ -302,6 +306,8 @@ static const int sws_colorspaces[] = { -1 }; +static int do_scale(FFFrameSync *fs); + static av_cold int init(AVFilterContext *ctx) { ScaleContext *scale = ctx->priv; @@ -388,6 +394,7 @@ static av_cold void uninit(AVFilterContext *ctx) av_expr_free(scale->w_pexpr); av_expr_free(scale->h_pexpr); scale->w_pexpr = scale->h_pexpr = NULL; + ff_framesync_uninit(&scale->fs); sws_freeContext(scale->sws_opts); sws_freeContext(scale->sws); sws_freeContext(scale->isws[0]); @@ -677,6 +684,21 @@ static int config_props(AVFilterLink *outlink) flags_val); av_freep(&flags_val); + if (ctx->filter != &ff_vf_scale2ref) { + ret = ff_framesync_init(&scale->fs, ctx, ctx->nb_inputs); + if (ret < 0) + return ret; + scale->fs.on_event = do_scale; + scale->fs.in[0].time_base = ctx->inputs[0]->time_base; + scale->fs.in[0].sync = 1; + scale->fs.in[0].before = EXT_STOP; + scale->fs.in[0].after = EXT_STOP; + + ret = ff_framesync_configure(&scale->fs); + if (ret < 0) + return ret; + } + return 0; fail: @@ -894,6 +916,26 @@ scale: return ret; } +static int do_scale(FFFrameSync *fs) +{ + AVFilterContext *ctx = fs->parent; + AVFilterLink *outlink = ctx->outputs[0]; + AVFrame *in, *out; + int ret; + + ret = ff_framesync_get_frame(fs, 0, &in, 1); + if (ret < 0) + return ret; + + ret = scale_frame(ctx->inputs[0], in, &out); + if (out) { + out->pts = av_rescale_q(fs->pts, fs->time_base, outlink->time_base); + return ff_filter_frame(outlink, out); + } + + return ret; +} + static int filter_frame(AVFilterLink *link, AVFrame *in) { AVFilterContext *ctx = link->dst; @@ -972,11 +1014,24 @@ static int process_command(AVFilterContext *ctx, const char *cmd, const char *ar return ret; } +static int activate(AVFilterContext *ctx) +{ + ScaleContext *scale = ctx->priv; + return ff_framesync_activate(&scale->fs); +} + static const AVClass *child_class_iterate(void **iter) { - const AVClass *c = *iter ? NULL : sws_get_class(); - *iter = (void*)(uintptr_t)c; - return c; + switch ((uintptr_t) *iter) { + case 0: + *iter = (void*)(uintptr_t) 1; + return sws_get_class(); + case 1: + *iter = (void*)(uintptr_t) 2; + return &ff_framesync_class; + } + + return NULL; } static void *child_next(void *obj, void *prev) @@ -984,6 +1039,8 @@ static void *child_next(void *obj, void *prev) ScaleContext *s = obj; if (!prev) return s->sws_opts; + if (prev == s->sws_opts) + return &s->fs; return NULL; } @@ -1051,7 +1108,6 @@ static const AVFilterPad avfilter_vf_scale_inputs[] = { { .name = "default", .type = AVMEDIA_TYPE_VIDEO, - .filter_frame = filter_frame, }, }; @@ -1074,6 +1130,7 @@ const AVFilter ff_vf_scale = { FILTER_INPUTS(avfilter_vf_scale_inputs), FILTER_OUTPUTS(avfilter_vf_scale_outputs), FILTER_QUERY_FUNC(query_formats), + .activate = activate, .process_command = process_command, }; From patchwork Wed Apr 24 10:51:58 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Haas X-Patchwork-Id: 48248 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:2d06:b0:1a9:af23:56c1 with SMTP id tw6csp571156pzb; Wed, 24 Apr 2024 04:03:45 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCXAD0uRQ7VU55x7dhrqk6glARvy+WDU+QdqmLyMmvaOs0lxmG7XsoECj+xNErLajrxbPm4u5c5U6AhKY9EOZaE9pQyfRe2C2cmkYA== X-Google-Smtp-Source: AGHT+IE6zIsBRnEBMmaQ6VQtIWnbsEI5PnFpjb4h0ti3OD0BbbYkV6JdlcUVl5zAsJbdm8mhtwXa X-Received: by 2002:a17:907:7e86:b0:a55:784c:858c with SMTP id qb6-20020a1709077e8600b00a55784c858cmr1506951ejc.4.1713956624936; Wed, 24 Apr 2024 04:03:44 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1713956624; cv=none; d=google.com; s=arc-20160816; b=ppEklFSSBB2LktmGfDQA9YYszYTW4yJqTz5hBpyV0boJbsmb2oOADRgUQtmAh/kmfX eam0bc2hhrMXDLslzGHXj1V4OH0tbW+1AGRUWcDvOfQWAuG4JBZQ7be1Hg7doyeh0Tsl wGWpeSX5iVW8lIxd7L6medO+DNMpXV7IFftAbOk8JEM0aTzqgHAwEGAclJdmN22QUdd4 Bp9knX+InR8L/qs94gmaBAM5aKaD/ItD0GfRIihEITHu/dD2cuBEitvZcvWZ+4Virrn5 hMoBiFfgE+Fu1wdJu++H1HkYyiItHRoaNtMOf+Pk5HzunUsDUTic/ITajn7eXcMYOHWj peIg== 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=s+0hA9p9xqy9q+l9MyOGSi+i//rgvoLuGP+5so21ZR4=; fh=xmAeKtysnShNOmkhiJmYkS30uw4Fu2hvBJ7qlIwukxQ=; b=OvvUz2CQtZ/OihRGJ/9ql7kajPEzySwGAtx+QtWm0duQGyAuqrErdQDYvfdjoK2ijr aBtwlnA6AwnhiRiUhY7v6n/Os6RbQ6xDug2ZXHGUk2F8BovxIevHUJrdpUQ8vic3d88P S4do0VyDdylDIIYG0gx4hTgESMcEw9RM6dowSvTZ6jXimaqlecZDOJruHPViuQLDkjKB bNRFJEkv3FgE/8IdY580bxfgWd+q5gqqniH8Rw1uLikMmL2u7C1TBw02GdFwhbUB7nMI bo71fx6wGeqyBulebwPj3VSL/Yv6iKu+3xACOzOOqKqpg40RT6/uesKufbWmN7ZGTdMe 780A==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@haasn.xyz header.s=mail header.b=HluKfG5D; 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 gb32-20020a170907962000b00a55b1e098fbsi4636894ejc.45.2024.04.24.04.03.43; Wed, 24 Apr 2024 04:03:44 -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=HluKfG5D; 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 1BD9668D2B5; Wed, 24 Apr 2024 14:03: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 D957068D0D9 for ; Wed, 24 Apr 2024 14:03:05 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1713956585; bh=4OCt+2VlvWufavFb0q6+P7KP6bxXBcAzx2Oy9Fnee14=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=HluKfG5DVq9SX3pEiqrWLDScwwWtzMIrPIda5qQLzOVA6tECA/EYKTchFQvq52xSt H0pI0wvp8TSAme4Y3zhvSzhxSvUJfFIf1yL8kRCiwEvcBRnN4AD67P/THgmvch6K+t hp0RydW5R9lf2G9CELTSa/AzjW4BvDOhHaXOxpNk= Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id 9BB9442922; Wed, 24 Apr 2024 13:03:05 +0200 (CEST) From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Wed, 24 Apr 2024 12:51:58 +0200 Message-ID: <20240424110257.38715-4-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240424110257.38715-1-ffmpeg@haasn.xyz> References: <20240424110257.38715-1-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 3/5] avfilter/vf_scale: add optional "ref" 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: DrN0dn+htq98 From: Niklas Haas This is automatically enabled if the width/height expressions reference any ref_* variable. This will ultimately serve as a more principled replacement for the fundamentally broken scale2ref. See-Also: https://trac.ffmpeg.org/ticket/10795 --- Changelog | 1 + doc/filters.texi | 26 ++++++++ libavfilter/vf_scale.c | 132 ++++++++++++++++++++++++++++++++++++++++- 3 files changed, 156 insertions(+), 3 deletions(-) diff --git a/Changelog b/Changelog index 8db14f02b4..e821e5ac74 100644 --- a/Changelog +++ b/Changelog @@ -7,6 +7,7 @@ version : - ffmpeg CLI filtergraph chaining - LC3/LC3plus demuxer and muxer - pad_vaapi, drawbox_vaapi filters +- vf_scale supports secondary ref input and framesync options version 7.0: diff --git a/doc/filters.texi b/doc/filters.texi index f20b72ab96..cf884568b0 100644 --- a/doc/filters.texi +++ b/doc/filters.texi @@ -21562,8 +21562,34 @@ The position (byte offset) of the frame in the input stream, or NaN if this information is unavailable and/or meaningless (for example in case of synthetic video). Only available with @code{eval=frame}. Deprecated, do not use. + +@item ref_w, rw +@item ref_h, rh +@item ref_a +@item ref_dar, rdar +@item ref_n +@item ref_t +@item ref_pos +Eqvuialent to the above, but for a second reference input. If any of these +variables are present, this filter accepts two inputs. @end table +@subsection Examples + +@itemize +@item +Scale a subtitle stream (sub) to match the main video (main) in size before overlaying +@example +'[main]split[a][b]; [ref][a]scale=rw:rh[c]; [b][c]overlay' +@end example + +@item +Scale a logo to 1/10th the height of a video, while preserving its display aspect ratio. +@example +[logo-in][video-in]scale=w=oh*dar:h=rh/10[logo-out] +@end example +@end itemize + @section scale2ref Scale (resize) the input video, based on a reference video. diff --git a/libavfilter/vf_scale.c b/libavfilter/vf_scale.c index a986dc97ae..f174651333 100644 --- a/libavfilter/vf_scale.c +++ b/libavfilter/vf_scale.c @@ -59,6 +59,17 @@ static const char *const var_names[] = { #if FF_API_FRAME_PKT "pos", #endif + "ref_w", "rw", + "ref_h", "rh", + "ref_a", + "ref_sar", + "ref_dar", "rdar", + "ref_hsub", + "ref_vsub", + "ref_n", + "ref_t", + "ref_pos", + /* Legacy variables for scale2ref */ "main_w", "main_h", "main_a", @@ -89,6 +100,16 @@ enum var_name { #if FF_API_FRAME_PKT VAR_POS, #endif + VAR_REF_W, VAR_RW, + VAR_REF_H, VAR_RH, + VAR_REF_A, + VAR_REF_SAR, + VAR_REF_DAR, VAR_RDAR, + VAR_REF_HSUB, + VAR_REF_VSUB, + VAR_REF_N, + VAR_REF_T, + VAR_REF_POS, VAR_S2R_MAIN_W, VAR_S2R_MAIN_H, VAR_S2R_MAIN_A, @@ -131,6 +152,7 @@ typedef struct ScaleContext { int input_is_pal; ///< set to 1 if the input format is paletted int output_is_pal; ///< set to 1 if the output format is paletted int interlaced; + int uses_ref; char *w_expr; ///< width expression string char *h_expr; ///< height expression string @@ -190,6 +212,38 @@ static int check_exprs(AVFilterContext *ctx) av_log(ctx, AV_LOG_WARNING, "Circular references detected for width '%s' and height '%s' - possibly invalid.\n", scale->w_expr, scale->h_expr); } + if (vars_w[VAR_REF_W] || vars_h[VAR_REF_W] || + vars_w[VAR_RW] || vars_h[VAR_RW] || + vars_w[VAR_REF_H] || vars_h[VAR_REF_H] || + vars_w[VAR_RH] || vars_h[VAR_RH] || + vars_w[VAR_REF_A] || vars_h[VAR_REF_A] || + vars_w[VAR_REF_SAR] || vars_h[VAR_REF_SAR] || + vars_w[VAR_REF_DAR] || vars_h[VAR_REF_DAR] || + vars_w[VAR_RDAR] || vars_h[VAR_RDAR] || + vars_w[VAR_REF_HSUB] || vars_h[VAR_REF_HSUB] || + vars_w[VAR_REF_VSUB] || vars_h[VAR_REF_VSUB] || + vars_w[VAR_REF_N] || vars_h[VAR_REF_N] || + vars_w[VAR_REF_T] || vars_h[VAR_REF_T] || + vars_w[VAR_REF_POS] || vars_h[VAR_REF_POS]) { + scale->uses_ref = 1; + } + + if (ctx->filter != &ff_vf_scale2ref && + (vars_w[VAR_S2R_MAIN_W] || vars_h[VAR_S2R_MAIN_W] || + vars_w[VAR_S2R_MAIN_H] || vars_h[VAR_S2R_MAIN_H] || + vars_w[VAR_S2R_MAIN_A] || vars_h[VAR_S2R_MAIN_A] || + vars_w[VAR_S2R_MAIN_SAR] || vars_h[VAR_S2R_MAIN_SAR] || + vars_w[VAR_S2R_MAIN_DAR] || vars_h[VAR_S2R_MAIN_DAR] || + vars_w[VAR_S2R_MDAR] || vars_h[VAR_S2R_MDAR] || + vars_w[VAR_S2R_MAIN_HSUB] || vars_h[VAR_S2R_MAIN_HSUB] || + vars_w[VAR_S2R_MAIN_VSUB] || vars_h[VAR_S2R_MAIN_VSUB] || + vars_w[VAR_S2R_MAIN_N] || vars_h[VAR_S2R_MAIN_N] || + vars_w[VAR_S2R_MAIN_T] || vars_h[VAR_S2R_MAIN_T] || + vars_w[VAR_S2R_MAIN_POS] || vars_h[VAR_S2R_MAIN_POS]) ) { + av_log(ctx, AV_LOG_ERROR, "Expressions with scale2ref variables are not valid in scale filter.\n"); + return AVERROR(EINVAL); + } + if (ctx->filter != &ff_vf_scale2ref && (vars_w[VAR_S2R_MAIN_W] || vars_h[VAR_S2R_MAIN_W] || vars_w[VAR_S2R_MAIN_H] || vars_h[VAR_S2R_MAIN_H] || @@ -385,6 +439,9 @@ static av_cold int init(AVFilterContext *ctx) if (!threads) av_opt_set_int(scale->sws_opts, "threads", ff_filter_get_nb_threads(ctx), 0); + if (ctx->filter != &ff_vf_scale2ref) + ctx->nb_inputs = scale->uses_ref ? 2 : 1; + return 0; } @@ -506,6 +563,20 @@ static int scale_eval_dimensions(AVFilterContext *ctx) scale->var_values[VAR_S2R_MAIN_VSUB] = 1 << main_desc->log2_chroma_h; } + if (scale->uses_ref) { + const AVFilterLink *reflink = ctx->inputs[1]; + const AVPixFmtDescriptor *ref_desc = av_pix_fmt_desc_get(reflink->format); + scale->var_values[VAR_REF_W] = scale->var_values[VAR_RW] = reflink->w; + scale->var_values[VAR_REF_H] = scale->var_values[VAR_RH] = reflink->h; + scale->var_values[VAR_REF_A] = (double) reflink->w / reflink->h; + scale->var_values[VAR_REF_SAR] = reflink->sample_aspect_ratio.num ? + (double) reflink->sample_aspect_ratio.num / reflink->sample_aspect_ratio.den : 1; + scale->var_values[VAR_REF_DAR] = scale->var_values[VAR_RDAR] = + scale->var_values[VAR_REF_A] * scale->var_values[VAR_REF_SAR]; + scale->var_values[VAR_REF_HSUB] = 1 << ref_desc->log2_chroma_w; + scale->var_values[VAR_REF_VSUB] = 1 << ref_desc->log2_chroma_h; + } + res = av_expr_eval(scale->w_pexpr, scale->var_values, NULL); eval_w = scale->var_values[VAR_OUT_W] = scale->var_values[VAR_OW] = (int) res == 0 ? inlink->w : (int) res; @@ -693,6 +764,13 @@ static int config_props(AVFilterLink *outlink) scale->fs.in[0].sync = 1; scale->fs.in[0].before = EXT_STOP; scale->fs.in[0].after = EXT_STOP; + if (scale->uses_ref) { + av_assert0(ctx->nb_inputs == 2); + scale->fs.in[1].time_base = ctx->inputs[1]->time_base; + scale->fs.in[1].sync = 0; + scale->fs.in[1].before = EXT_NULL; + scale->fs.in[1].after = EXT_INFINITY; + } ret = ff_framesync_configure(&scale->fs); if (ret < 0) @@ -919,13 +997,55 @@ scale: static int do_scale(FFFrameSync *fs) { AVFilterContext *ctx = fs->parent; + ScaleContext *scale = ctx->priv; AVFilterLink *outlink = ctx->outputs[0]; - AVFrame *in, *out; - int ret; + AVFrame *out, *in = NULL, *ref = NULL; + int ret = 0, frame_changed; ret = ff_framesync_get_frame(fs, 0, &in, 1); if (ret < 0) - return ret; + goto err; + + if (scale->uses_ref) { + ret = ff_framesync_get_frame(fs, 1, &ref, 0); + if (ret < 0) + goto err; + } + + if (ref) { + AVFilterLink *reflink = ctx->inputs[1]; + frame_changed = ref->width != reflink->w || + ref->height != reflink->h || + ref->format != reflink->format || + ref->sample_aspect_ratio.den != reflink->sample_aspect_ratio.den || + ref->sample_aspect_ratio.num != reflink->sample_aspect_ratio.num || + ref->colorspace != reflink->colorspace || + ref->color_range != reflink->color_range; + + if (frame_changed) { + reflink->format = ref->format; + reflink->w = ref->width; + reflink->h = ref->height; + reflink->sample_aspect_ratio.num = ref->sample_aspect_ratio.num; + reflink->sample_aspect_ratio.den = ref->sample_aspect_ratio.den; + reflink->colorspace = ref->colorspace; + reflink->color_range = ref->color_range; + + ret = config_props(outlink); + if (ret < 0) + goto err; + } + + if (scale->eval_mode == EVAL_MODE_FRAME) { + scale->var_values[VAR_REF_N] = reflink->frame_count_out; + scale->var_values[VAR_REF_T] = TS2T(ref->pts, reflink->time_base); +#if FF_API_FRAME_PKT +FF_DISABLE_DEPRECATION_WARNINGS + scale->var_values[VAR_REF_POS] = ref->pkt_pos == -1 ? NAN : ref->pkt_pos; +FF_ENABLE_DEPRECATION_WARNINGS +#endif + } + } ret = scale_frame(ctx->inputs[0], in, &out); if (out) { @@ -933,6 +1053,9 @@ static int do_scale(FFFrameSync *fs) return ff_filter_frame(outlink, out); } +err: + if (ret < 0) + av_frame_free(&in); return ret; } @@ -1108,6 +1231,9 @@ static const AVFilterPad avfilter_vf_scale_inputs[] = { { .name = "default", .type = AVMEDIA_TYPE_VIDEO, + }, { + .name = "ref", + .type = AVMEDIA_TYPE_VIDEO, }, }; From patchwork Wed Apr 24 10:51:59 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Haas X-Patchwork-Id: 48249 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:2d06:b0:1a9:af23:56c1 with SMTP id tw6csp571250pzb; Wed, 24 Apr 2024 04:03:54 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCUgbhUxEOtcWArRsVUmGRI7S/FCZ42UhookdS5FdfejeHm8M+F7hVKdbPNYmMJcrJ2xbQSpKqAevWyvMJdfFx4Pq62XYY4GHnKb/A== X-Google-Smtp-Source: AGHT+IHKWkyCTSx+eZzkcp+aZ6Tw3v3xwLYBgtCdjlnd+bGhBzsloEVDLZkF3/RObDp6mhbmH+sD X-Received: by 2002:a2e:a1c5:0:b0:2d8:9487:7588 with SMTP id c5-20020a2ea1c5000000b002d894877588mr1251387ljm.38.1713956634361; Wed, 24 Apr 2024 04:03:54 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1713956634; cv=none; d=google.com; s=arc-20160816; b=z0+0lo6hU/R+WG50hFFJKRj0Z3y+Q0bK+9PYGe0YXe6haI68BsoLyOu/HfIBHjapta Iz2LIMHemJVQ+nl5q1s3PK02Ip4RQMEyRbvH3psr/IccM6qMolyf6/lu+Vt76MtoZmHJ eOnmPs6ksCZBXIPeGeg+hetMj6yooh/EPrrUdtkXpAJvvHgafUI4GS/xqfLdWJgji8ZG OeK9uL5Uq+21/SokGUaw6tLEEN+xZEAE2Wz8k6IWyIUqYQbDFv8++zoeg0MMSJzvSu/k wI+67wUSMfGQ+YDWrtvlNTVe/xuJGIf9SOTMPXm7a7ITdmoYUIpdhOGDlT0nXmeuVkyE xNIA== 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=evk9oMlcyySpRc+ZrAtNkN28PjlOyNmKJ1pZcBmvzp8=; fh=xmAeKtysnShNOmkhiJmYkS30uw4Fu2hvBJ7qlIwukxQ=; b=SX2+jlLUxf1BXdKfp70WjWyEiFcujMFsz2hejzzbzsXWtGJfEeewbcm/dTbYWF3vM7 3p7NPn+CacSCWg0UPOR6gWyyfLAjj9s9qtckuLhoqlrc58Xys0iUD+jjC0b7pEs1ljI2 PIOZQn98kpHE0Jfh7uq+XrcpWqWgj9NOERvGLhK0YXAx8V6sUx75oWdrw7BSvDt0/77R AbvQ6/6rZkjZNN/UPABLA5FRFxCtAuVG3vVrjway+FxAu/26mqhq9mvNHZ9QLLMbjer9 zOhne7pxFNso379vATBjxphlG7MRMFhgZ1BK+RZjG6VE+69MVfbiB4B52PlHcYnDcBrT oXrw==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@haasn.xyz header.s=mail header.b=UuxZP3Q8; 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 v10-20020aa7d80a000000b00570a6f10a09si8211971edq.582.2024.04.24.04.03.53; Wed, 24 Apr 2024 04:03:54 -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=UuxZP3Q8; 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 38F4268D3BC; Wed, 24 Apr 2024 14:03: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 16DF468D0D9 for ; Wed, 24 Apr 2024 14:03:06 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1713956585; bh=jeUsFMZuW36ZU/kDVNPpPi/bB9U7oCJ08gTqJDWp6eQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=UuxZP3Q8QYEUalIQjc517yP31XQKsIhtq98qhGEXF4NBhDOWHrAnH2X200u4eiFzj ASR3hQjSqR4fQhfj7PykpNstcOqoGJvTLqpRWisCzicdNfDWGuhrQJYNb+DfJSrblB y5lhhqwRTHlkHuBUjjZqQrKCSg2CaS5eqEW7LKG0= Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id CD8FE4299C; Wed, 24 Apr 2024 13:03:05 +0200 (CEST) From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Wed, 24 Apr 2024 12:51:59 +0200 Message-ID: <20240424110257.38715-5-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240424110257.38715-1-ffmpeg@haasn.xyz> References: <20240424110257.38715-1-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 4/5] fate/scale2ref_keep_aspect: switch to vf_scale ref_* 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: BlTr1ZZT8PQL From: Niklas Haas --- tests/filtergraphs/scale2ref_keep_aspect | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tests/filtergraphs/scale2ref_keep_aspect b/tests/filtergraphs/scale2ref_keep_aspect index f407460ec7..00b04fc3d1 100644 --- a/tests/filtergraphs/scale2ref_keep_aspect +++ b/tests/filtergraphs/scale2ref_keep_aspect @@ -1,5 +1,4 @@ sws_flags=+accurate_rnd+bitexact; testsrc=size=320x240 [main]; testsrc=size=640x360 [ref]; -[main][ref] scale2ref=iw/4:ow/mdar [main][ref]; -[ref] nullsink +[main][ref] scale=rw/4:ow/dar [main] From patchwork Wed Apr 24 10:52:00 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Haas X-Patchwork-Id: 48251 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:2d06:b0:1a9:af23:56c1 with SMTP id tw6csp571457pzb; Wed, 24 Apr 2024 04:04:15 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCW7MTExgiV3d+n8pG4QGuI0P8cO845ZQPmqfhoQjKLZ9+iLzMMLDd3pOwz1E/AgjgJA+e1AtjymhHQOOs9cTYGDgvrpbmOU9zdkkg== X-Google-Smtp-Source: AGHT+IG5Qij/kyc6XSbCRnhhSgiuJVp5mal6TEmFEZDd5O75Vb0QvI61YJ76ycvg6umdIK72BZFt X-Received: by 2002:a50:9542:0:b0:570:5b6b:9d58 with SMTP id v2-20020a509542000000b005705b6b9d58mr1454037eda.0.1713956655518; Wed, 24 Apr 2024 04:04:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1713956655; cv=none; d=google.com; s=arc-20160816; b=JWoG5uY7fcqOErqxN0pdXwPuqv/h5s8GjFr/xWo5RlZ1OVBd1dppEc8keY8U8ZO3pi 4LGgbLnJlH6n/ZsDtx5rWjp+1B9vFX2fd60Yt9dRrR1HEly2BSOPs6/d6wui5thmBiFx HAdFfvoG5ZLXdHy2w5S+6z7nsyXbZVZWviDHo8oW+s12dvxsjR2Ihjx96bdzRo0pimwp 2WpcYSsEcMvVuJRZfHg/eghk4g9c/sPjOAvUMef5vmOnv4VsXfEqvxlaxvObM+LTxBIX rv/UtLdQRT99KOAune0wBNjyB557r5j7t7qcg14ca201AcjIuLunIjt2Cin5eV6mqEhC aLPg== 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=iLAKlM7vIEl+2T+hMKyglJZywZZ0jY8nSjLz9yQaEj8=; fh=xmAeKtysnShNOmkhiJmYkS30uw4Fu2hvBJ7qlIwukxQ=; b=KEk5kl9HAnJPbQeJ2XxmonBP28LrZFbjgO8R5mM86dkFd9h0C+9W5jBkIRmMf1Ib08 a3MU1cgWvaWTJ/bPyzylFySTIHFWTq/ETmChhChOWlkkyWLPlNh/5u+K3ZqNNyjPjlcY Q0Sl5ZGSN2HpJYruAxEcjFWbYXiW/uhuMdXMs/hYRS/56hxAb022VAuybnZaZLr5y/6w B/zDySXxP/eel6i9KqSuoycL2ybO14AKSZxksgBrfvdfeIpgDv8zoDw+ZMXa1t8SHGhH r3YxWWttfwInB4yCID/85FXtemJ5Ql4cctmFujEaZMt2R7dNixVfZPk09s0QgxW0jSgT Iy6g==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@haasn.xyz header.s=mail header.b=sbWfM4TO; 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 f1-20020aa7d841000000b00570241f6321si8387090eds.611.2024.04.24.04.04.15; Wed, 24 Apr 2024 04:04:15 -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=sbWfM4TO; 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 D289A68D40C; Wed, 24 Apr 2024 14:03: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 6EFBB68D3C1 for ; Wed, 24 Apr 2024 14:03:10 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1713956586; bh=QOXEJtu7fdWNk8MxkE6hf7NydiXKEAEviuyBpk6MCTM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=sbWfM4TO9nVH5T9TyLb/OWw/Cy5j2YAymmud7J2NAgIMQM5EU9xLFmZfz5iZxxlzl X+cFfddysLp8/11Gyctzdx9wwA+RFqbw4F3lpIfNO52VF7lhVZg9BUGLOjy9qTL69V AOjJNcR5XsrqwBWthoyFm7oWcLgwFv7QFpWqJH+I= Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id 18294429D1; Wed, 24 Apr 2024 13:03:06 +0200 (CEST) From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Wed, 24 Apr 2024 12:52:00 +0200 Message-ID: <20240424110257.38715-6-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240424110257.38715-1-ffmpeg@haasn.xyz> References: <20240424110257.38715-1-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 5/5] avfilter/scale2ref: deprecate in favor of scale=rw:rh 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: Qdy2zQWdrmfa From: Niklas Haas And remove it from the documentation. --- Changelog | 1 + doc/filters.texi | 73 ------------------------------------------ libavfilter/vf_scale.c | 3 ++ 3 files changed, 4 insertions(+), 73 deletions(-) diff --git a/Changelog b/Changelog index e821e5ac74..e827208439 100644 --- a/Changelog +++ b/Changelog @@ -8,6 +8,7 @@ version : - LC3/LC3plus demuxer and muxer - pad_vaapi, drawbox_vaapi filters - vf_scale supports secondary ref input and framesync options +- vf_scale2ref deprecated version 7.0: diff --git a/doc/filters.texi b/doc/filters.texi index cf884568b0..5198f14f28 100644 --- a/doc/filters.texi +++ b/doc/filters.texi @@ -21590,79 +21590,6 @@ Scale a logo to 1/10th the height of a video, while preserving its display aspec @end example @end itemize -@section scale2ref - -Scale (resize) the input video, based on a reference video. - -See the scale filter for available options, scale2ref supports the same but -uses the reference video instead of the main input as basis. scale2ref also -supports the following additional constants for the @option{w} and -@option{h} options: - -@table @var -@item main_w -@item main_h -The main input video's width and height - -@item main_a -The same as @var{main_w} / @var{main_h} - -@item main_sar -The main input video's sample aspect ratio - -@item main_dar, mdar -The main input video's display aspect ratio. Calculated from -@code{(main_w / main_h) * main_sar}. - -@item main_hsub -@item main_vsub -The main input video's horizontal and vertical chroma subsample values. -For example for the pixel format "yuv422p" @var{hsub} is 2 and @var{vsub} -is 1. - -@item main_n -The (sequential) number of the main input frame, starting from 0. -Only available with @code{eval=frame}. - -@item main_t -The presentation timestamp of the main input frame, expressed as a number of -seconds. Only available with @code{eval=frame}. - -@item main_pos -The position (byte offset) of the frame in the main input stream, or NaN if -this information is unavailable and/or meaningless (for example in case of synthetic video). -Only available with @code{eval=frame}. -@end table - -@subsection Examples - -@itemize -@item -Scale a subtitle stream (b) to match the main video (a) in size before overlaying -@example -'scale2ref[b][a];[a][b]overlay' -@end example - -@item -Scale a logo to 1/10th the height of a video, while preserving its display aspect ratio. -@example -[logo-in][video-in]scale2ref=w=oh*mdar:h=ih/10[logo-out][video-out] -@end example -@end itemize - -@subsection Commands - -This filter supports the following commands: -@table @option -@item width, w -@item height, h -Set the output video dimension expression. -The command accepts the same syntax of the corresponding option. - -If the specified expression is not valid, it is kept at its current -value. -@end table - @section scale2ref_npp Use the NVIDIA Performance Primitives (libnpp) to scale (resize) the input diff --git a/libavfilter/vf_scale.c b/libavfilter/vf_scale.c index f174651333..bc53571c1c 100644 --- a/libavfilter/vf_scale.c +++ b/libavfilter/vf_scale.c @@ -368,6 +368,9 @@ static av_cold int init(AVFilterContext *ctx) int64_t threads; int ret; + if (ctx->filter == &ff_vf_scale2ref) + av_log(ctx, AV_LOG_WARNING, "scale2ref is deprecated, use scale=rw:rh instead\n"); + if (scale->size_str && (scale->w_expr || scale->h_expr)) { av_log(ctx, AV_LOG_ERROR, "Size and width/height expressions cannot be set at the same time.\n");