From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 8BAC847664 for ; Tue, 19 Mar 2024 14:07:07 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 8BE0868D3BB; Tue, 19 Mar 2024 16:06:44 +0200 (EET) Received: from mail-pl1-f173.google.com (mail-pl1-f173.google.com [209.85.214.173]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 012F168D27A for ; Tue, 19 Mar 2024 16:06:38 +0200 (EET) Received: by mail-pl1-f173.google.com with SMTP id d9443c01a7336-1dfff641d10so17817325ad.2 for ; Tue, 19 Mar 2024 07:06:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1710857196; x=1711461996; darn=ffmpeg.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=1vtH5jIS6AxGphXHlrlUMiby8SpOdJUFLwdPDdNlKoU=; b=RNps8lIBLLhNrVnRGdIT4g6vRZujtUVOMFDjbHHqSNbAHasxYWdGb1bLnVlMnPQ0Ft 8HGOPxMJKSdvZY8kek/z8eegDQG7pllK5319iHS6Az1ME3oliDkIirzFAXcCRgLGqB/y x1CWGjStrOR3wR9B8vnIhqLS4yF2GJOaj8ig5ROfA4UusNXyX13UOCrr6SqTBtQS1X8o 1tfBiWvDjD14oC2yD2K7ff+dfXt7RqcbjfPFE+CnyYtq4wx5b74INEEUWdlDKQEroBmw X8JqY3GdyhOgXQZs5hkym1W8oAN8AZVWXxS9l0HW06btlmh2fV1AXcFU1kik+gMTbqtM LZ3w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1710857196; x=1711461996; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=1vtH5jIS6AxGphXHlrlUMiby8SpOdJUFLwdPDdNlKoU=; b=AU3vzv5mgMSn/sgaN83FgLYoovET5jJuZ4LIBI8KzpE9Cxo/+gqFTj5KBDBp4kRykK ZMRoh+3ZueXsHNUMp0tyBsuYp4MS0Jes/NH0AczM9ztrHYIVM/yfFRJdEugJc8ZoIICf Mkw+gk4XWzdhICrT8kVocHKZREk6uTaa/uxTi/xgcVfLxP+pXvWepo4ELf51lpx6uQ4D fUZZeD2WRNXYh2ZD8Kpk8zut6m72crieKGqzmQ0TLV/cG2EeryR4h1RWFwtcHZ0RJRjf jvQzdQtAu4q3VxWpOKbV6v/SNKcQ8ZvQsVgErGGoNTQzcWdpQ9ZCJXAqdMcnYnnukocp h1Yw== X-Gm-Message-State: AOJu0YwdbyuP0OXjI8uqJsub0Wl8hHy3cdOEzPHrqntQ4+oAvyLvdxaG SS/H9N60c5aApXvouX3X5UJeuwU5yYQWeg4gUsNNwervTm8IvfhnOqu4q997 X-Google-Smtp-Source: AGHT+IHZQFbIwnAwOpo6XrMuAqKDu4KB6gzpEwXiaN5HvmJMArJODzzBf7C8xlNqyxbwgw3zA8lsBg== X-Received: by 2002:a17:903:22d0:b0:1e0:1e87:c9d8 with SMTP id y16-20020a17090322d000b001e01e87c9d8mr6376621plg.7.1710857195484; Tue, 19 Mar 2024 07:06:35 -0700 (PDT) Received: from localhost.localdomain ([190.194.167.233]) by smtp.gmail.com with ESMTPSA id b11-20020a170902650b00b001d9aa663282sm10397008plk.266.2024.03.19.07.06.34 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 Mar 2024 07:06:34 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Tue, 19 Mar 2024 11:06:36 -0300 Message-ID: <20240319140636.4323-3-jamrial@gmail.com> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240319140636.4323-1-jamrial@gmail.com> References: <20240319140636.4323-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 3/3] fftools/ffmpeg: auto insert enhancement filters when available 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 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: Signed-off-by: James Almer --- fftools/ffmpeg.h | 3 +++ fftools/ffmpeg_demux.c | 4 ++++ fftools/ffmpeg_filter.c | 28 +++++++++++++++++++++++++++- fftools/ffmpeg_opt.c | 3 +++ 4 files changed, 37 insertions(+), 1 deletion(-) diff --git a/fftools/ffmpeg.h b/fftools/ffmpeg.h index 7454089c2d..8d54affc0a 100644 --- a/fftools/ffmpeg.h +++ b/fftools/ffmpeg.h @@ -155,6 +155,7 @@ typedef struct OptionsContext { SpecifierOptList hwaccel_devices; SpecifierOptList hwaccel_output_formats; SpecifierOptList autorotate; + SpecifierOptList autoenhance; /* output options */ StreamMap *stream_maps; @@ -239,6 +240,7 @@ enum IFilterFlags { IFILTER_FLAG_AUTOROTATE = (1 << 0), IFILTER_FLAG_REINIT = (1 << 1), IFILTER_FLAG_CFR = (1 << 2), + IFILTER_FLAG_AUTOENHANCE = (1 << 3), }; typedef struct InputFilterOptions { @@ -369,6 +371,7 @@ typedef struct InputStream { #endif int autorotate; + int autoenhance; int fix_sub_duration; diff --git a/fftools/ffmpeg_demux.c b/fftools/ffmpeg_demux.c index 47312c9fe1..0b4ab3d7ec 100644 --- a/fftools/ffmpeg_demux.c +++ b/fftools/ffmpeg_demux.c @@ -1056,6 +1056,7 @@ int ist_filter_add(InputStream *ist, InputFilter *ifilter, int is_simple, return AVERROR(ENOMEM); opts->flags |= IFILTER_FLAG_AUTOROTATE * !!(ist->autorotate) | + IFILTER_FLAG_AUTOENHANCE * !!(ist->autoenhance) | IFILTER_FLAG_REINIT * !!(ds->reinit_filters); return ds->sch_idx_dec; @@ -1238,6 +1239,9 @@ static int ist_add(const OptionsContext *o, Demuxer *d, AVStream *st) ist->autorotate = 1; MATCH_PER_STREAM_OPT(autorotate, i, ist->autorotate, ic, st); + ist->autoenhance = 1; + MATCH_PER_STREAM_OPT(autoenhance, i, ist->autoenhance, ic, st); + MATCH_PER_STREAM_OPT(codec_tags, str, codec_tag, ic, st); if (codec_tag) { uint32_t tag = strtol(codec_tag, &next, 0); diff --git a/fftools/ffmpeg_filter.c b/fftools/ffmpeg_filter.c index 3d88482d07..c4d900d95b 100644 --- a/fftools/ffmpeg_filter.c +++ b/fftools/ffmpeg_filter.c @@ -18,6 +18,8 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ +#include "config_components.h" + #include #include "ffmpeg.h" @@ -145,6 +147,8 @@ typedef struct InputFilterPriv { int displaymatrix_present; int32_t displaymatrix[9]; + int enhancement_present; + // fallback parameters to use when no input is ever sent struct { AVRational time_base; @@ -1567,6 +1571,15 @@ static int configure_input_video_filter(FilterGraph *fg, AVFilterGraph *graph, desc = av_pix_fmt_desc_get(ifp->format); av_assert0(desc); +#if CONFIG_LCEVC_FILTER + if ((ifp->opts.flags & IFILTER_FLAG_AUTOENHANCE) && + !(desc->flags & AV_PIX_FMT_FLAG_HWACCEL)) { + ret = insert_filter(&last_filter, &pad_idx, "lcevc", NULL); + if (ret < 0) + return ret; + } +#endif + // TODO: insert hwaccel enabled filters like transpose_vaapi into the graph if ((ifp->opts.flags & IFILTER_FLAG_AUTOROTATE) && !(desc->flags & AV_PIX_FMT_FLAG_HWACCEL)) { @@ -1883,6 +1896,10 @@ static int ifilter_parameters_from_frame(InputFilter *ifilter, const AVFrame *fr memcpy(ifp->displaymatrix, sd->data, sizeof(ifp->displaymatrix)); ifp->displaymatrix_present = !!sd; +#if CONFIG_LCEVC_FILTER + ifp->enhancement_present = !!(av_frame_get_side_data(frame, AV_FRAME_DATA_LCEVC)); +#endif + return 0; } @@ -2584,7 +2601,8 @@ enum ReinitReason { VIDEO_CHANGED = (1 << 0), AUDIO_CHANGED = (1 << 1), MATRIX_CHANGED = (1 << 2), - HWACCEL_CHANGED = (1 << 3) + HWACCEL_CHANGED = (1 << 3), + ENHANCEMENT_CHANGED = (1 << 4), }; static const char *unknown_if_null(const char *str) @@ -2625,6 +2643,12 @@ static int send_frame(FilterGraph *fg, FilterGraphThread *fgt, } else if (ifp->displaymatrix_present) need_reinit |= MATRIX_CHANGED; +#if CONFIG_LCEVC_FILTER + if (sd = av_frame_get_side_data(frame, AV_FRAME_DATA_LCEVC)) + if (!ifp->enhancement_present) + need_reinit |= ENHANCEMENT_CHANGED; +#endif + if (!(ifp->opts.flags & IFILTER_FLAG_REINIT) && fgt->graph) need_reinit = 0; @@ -2681,6 +2705,8 @@ static int send_frame(FilterGraph *fg, FilterGraphThread *fgt, av_bprintf(&reason, "display matrix changed, "); if (need_reinit & HWACCEL_CHANGED) av_bprintf(&reason, "hwaccel changed, "); + if (need_reinit & ENHANCEMENT_CHANGED) + av_bprintf(&reason, "enhancement data found, "); if (reason.len > 1) reason.str[reason.len - 2] = '\0'; // remove last comma av_log(fg, AV_LOG_INFO, "Reconfiguring filter graph%s%s\n", reason.len ? " because " : "", reason.str); diff --git a/fftools/ffmpeg_opt.c b/fftools/ffmpeg_opt.c index 4b3f9789ba..b87782806e 100644 --- a/fftools/ffmpeg_opt.c +++ b/fftools/ffmpeg_opt.c @@ -1738,6 +1738,9 @@ const OptionDef options[] = { { "autorotate", OPT_TYPE_BOOL, OPT_PERSTREAM | OPT_EXPERT | OPT_INPUT, { .off = OFFSET(autorotate) }, "automatically insert correct rotate filters" }, + { "autoenhance", OPT_TYPE_BOOL, OPT_PERSTREAM | OPT_EXPERT | OPT_INPUT, + { .off = OFFSET(autoenhance) }, + "automatically insert enhancement filters (LCEVC)" }, { "autoscale", OPT_TYPE_BOOL, OPT_PERSTREAM | OPT_EXPERT | OPT_OUTPUT, { .off = OFFSET(autoscale) }, "automatically insert a scale filter at the end of the filter graph" }, -- 2.44.0 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".