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 ESMTPS id 558BE4D09E for ; Sun, 16 Feb 2025 16:01:47 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id F1E7368BCCD; Sun, 16 Feb 2025 18:01:31 +0200 (EET) Received: from haasn.dev (haasn.dev [78.46.187.166]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id A884168AFF3 for ; Sun, 16 Feb 2025 18:01:23 +0200 (EET) Received: from haasn.dev (unknown [10.30.1.1]) by haasn.dev (Postfix) with ESMTP id 5917C41E59; Sun, 16 Feb 2025 17:01:23 +0100 (CET) From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Sun, 16 Feb 2025 16:58:52 +0100 Message-ID: <20250216155855.450044-2-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.47.0 In-Reply-To: <20250216155855.450044-1-ffmpeg@haasn.xyz> References: <20250216155855.450044-1-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 2/5] avfilter/libplacebo: add deinterlacing options 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 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: From: Niklas Haas These were introduced in libplacebo API version 220. We actually already map the field by default, but deinterlacing was never enabled unless the user explicitly forced it using extra_ops. --- doc/filters.texi | 19 +++++++++++++++++++ libavfilter/vf_libplacebo.c | 17 +++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/doc/filters.texi b/doc/filters.texi index 4cefef6cbc..c7c8a5668e 100644 --- a/doc/filters.texi +++ b/doc/filters.texi @@ -16615,6 +16615,25 @@ Enable sigmoidal compression during upscaling. Reduces ringing slightly. Enabled by default. @end table +@subsubsection Deinterlacing +Deinterlacing is automatically supported when frames are tagged as interlaced, +however frames are not deinterlaced unless a deinterlacing algorithm is chosen. +@table @option +@item deinterlace +The the deinterlacing algorithm to use. +@table @samp +@item weave +No deinterlacing, weave fields together into a single frame. This is the default. +@item bob +Naive bob deinterlacing, simply repeat each field line twice. +@item yadif +Yet another deinterlacing filter. See the @ref{yadif} filter for more details. +@end table + +@item skip_spatial_check +Skip the spatial deinterlacing check when using @code{yadif} deinterlacing. +@end table + @subsubsection Debanding Libplacebo comes with a built-in debanding filter that is good at counteracting many common sources of banding and blocking. Turning this on is highly diff --git a/libavfilter/vf_libplacebo.c b/libavfilter/vf_libplacebo.c index e1c6629f6d..fbbc9d5cb7 100644 --- a/libavfilter/vf_libplacebo.c +++ b/libavfilter/vf_libplacebo.c @@ -49,6 +49,7 @@ static inline AVFrame *pl_get_mapped_avframe(const struct pl_frame *frame) typedef struct pl_options_t { // Backwards compatibility shim of this struct struct pl_render_params params; + struct pl_deinterlace_params deinterlace_params; struct pl_deband_params deband_params; struct pl_sigmoid_params sigmoid_params; struct pl_color_adjustment color_adjustment; @@ -211,6 +212,10 @@ typedef struct LibplaceboContext { int force_dither; int disable_fbos; + /* pl_deinterlace_params */ + int deinterlace; + int skip_spatial_check; + /* pl_deband_params */ int deband; int deband_iterations; @@ -372,6 +377,11 @@ static int update_settings(AVFilterContext *ctx) RET(av_parse_color(color_rgba, s->fillcolor, -1, s)); + opts->deinterlace_params = *pl_deinterlace_params( + .algo = s->deinterlace, + .skip_spatial_check = s->skip_spatial_check, + ); + opts->deband_params = *pl_deband_params( .iterations = s->deband_iterations, .threshold = s->deband_threshold, @@ -436,6 +446,7 @@ static int update_settings(AVFilterContext *ctx) .corner_rounding = s->corner_rounding, #endif + .deinterlace_params = &opts->deinterlace_params, .deband_params = s->deband ? &opts->deband_params : NULL, .sigmoid_params = s->sigmoid ? &opts->sigmoid_params : NULL, .color_adjustment = &opts->color_adjustment, @@ -1358,6 +1369,12 @@ static const AVOption libplacebo_options[] = { { "apply_filmgrain", "Apply film grain metadata", OFFSET(apply_filmgrain), AV_OPT_TYPE_BOOL, {.i64 = 1}, 0, 1, DYNAMIC }, { "apply_dolbyvision", "Apply Dolby Vision metadata", OFFSET(apply_dovi), AV_OPT_TYPE_BOOL, {.i64 = 1}, 0, 1, DYNAMIC }, + { "deinterlace", "Deinterlacing mode", OFFSET(deinterlace), AV_OPT_TYPE_INT, {.i64 = PL_DEINTERLACE_WEAVE}, 0, PL_DEINTERLACE_ALGORITHM_COUNT - 1, DYNAMIC, .unit = "deinterlace" }, + { "weave", "Weave fields together (no-op)", 0, AV_OPT_TYPE_CONST, {.i64 = PL_DEINTERLACE_WEAVE}, 0, 0, STATIC, .unit = "deinterlace" }, + { "bob", "Naive bob deinterlacing", 0, AV_OPT_TYPE_CONST, {.i64 = PL_DEINTERLACE_BOB}, 0, 0, STATIC, .unit = "deinterlace" }, + { "yadif", "Yet another deinterlacing filter", 0, AV_OPT_TYPE_CONST, {.i64 = PL_DEINTERLACE_YADIF}, 0, 0, STATIC, .unit = "deinterlace" }, + { "skip_spatial_check", "Skip yadif spatial check", OFFSET(skip_spatial_check), AV_OPT_TYPE_BOOL, {.i64 = 0}, 0, 1, DYNAMIC }, + { "deband", "Enable debanding", OFFSET(deband), AV_OPT_TYPE_BOOL, {.i64 = 0}, 0, 1, DYNAMIC }, { "deband_iterations", "Deband iterations", OFFSET(deband_iterations), AV_OPT_TYPE_INT, {.i64 = 1}, 0, 16, DYNAMIC }, { "deband_threshold", "Deband threshold", OFFSET(deband_threshold), AV_OPT_TYPE_FLOAT, {.dbl = 4.0}, 0.0, 1024.0, DYNAMIC }, -- 2.47.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".