From patchwork Sat Dec 2 14:54:34 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lennart Klebl X-Patchwork-Id: 44866 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:a301:b0:181:818d:5e7f with SMTP id x1csp1775636pzk; Sat, 2 Dec 2023 06:55:11 -0800 (PST) X-Google-Smtp-Source: AGHT+IHCWSRectOf2YzqJILDxjyjISqYALwhIUpHuLMT9TqGZ8z5Z3V+IJRpjbLFfSHfGVF3DQoe X-Received: by 2002:a17:906:7396:b0:a19:a19b:423c with SMTP id f22-20020a170906739600b00a19a19b423cmr1344205ejl.167.1701528911320; Sat, 02 Dec 2023 06:55:11 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1701528911; cv=none; d=google.com; s=arc-20160816; b=rMRhzutvndYHJaDfMlLsRgnWOETOBg9OI0YoCCES3rGCIroBAa7Y7TW0xOFWua8iJl j3K4w2klduxjXcvDCrTZ56MfDxJVAnYTNO9Na3mAkDxMcbZTYR/8oYFsFYsFEZEzPgxx 0aBqQvi/ofWfyZ+9ATSa5LJ3XMVKntttY7FomhONEspm5aR42F/tiE8JGEgy2y4j7EBa ePbF2aCEAbGpZ7cdRbJc6g2WNhgIXsT/WwL+bne78yBpAqplQxNsrE3xxtyQJAWL/b+N oZCamq2wbgZtUz4gsAJA1X3znb4FsNgvYKyz2z0NjxYJeKZCYTnjjA6Jx/LUWpt2OBRm tCtg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:reply-to:list-subscribe:list-help:list-post :list-archive:list-unsubscribe:list-id:precedence:subject :mime-version:user-agent:autocrypt:date:to:from:message-id :delivered-to; bh=2BjC12R5RiaIwXnSdYVvjv24jhmKQzHGtYSx6DAh7SQ=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=LWQcDmgXyZ5+mjWr+Vca+WB5zGHvWURWZvV0J1IoRbeRZClbrmv79XEKrK+iU2M6zI fk4Gr2KDr2McyHinRVsQwfJhSTVuQjFCXuIE0PmW2oe/WJpWJDJDZM0UKW1I70YXtHj/ oX0X4syVlfjuv7ymycZDYSQ6/AHYIMYYVUBTFEgHkSpMibS9vqdkN6xzfbth04NyiUOD pbEyTPsFk/rIBpyyAjfMgpaVL4E7iV7QqTj1OUpyruX0I1/dUVtBOS5F3IKkVaIHt1N9 ca3g/fw+uYeik/8q4LnoeLrBe+pKqLLjX2BB6dwgtDdB56Vg4DPCxHIfcVFRf3KTJl8/ pT6Q== ARC-Authentication-Results: i=1; mx.google.com; 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 c19-20020a170906529300b00992f8116abdsi2818653ejm.480.2023.12.02.06.55.08; Sat, 02 Dec 2023 06:55:11 -0800 (PST) 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; 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 3FFA968CD05; Sat, 2 Dec 2023 16:55:06 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mailout06.t-online.de (mailout06.t-online.de [194.25.134.19]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id C2AB768CAAA for ; Sat, 2 Dec 2023 16:54:58 +0200 (EET) Received: from fwd82.aul.t-online.de (fwd82.aul.t-online.de [10.223.144.108]) by mailout06.t-online.de (Postfix) with SMTP id 4FD83C425 for ; Sat, 2 Dec 2023 15:54:58 +0100 (CET) Received: from [192.168.178.79] ([84.182.237.72]) by fwd82.t-online.de with (TLSv1.3:TLS_AES_256_GCM_SHA384 encrypted) esmtp id 1r9ROT-0ZESWH0; Sat, 2 Dec 2023 15:54:57 +0100 Message-ID: From: Lennart Klebl To: ffmpeg-devel@ffmpeg.org Date: Sat, 02 Dec 2023 15:54:34 +0100 Autocrypt: addr=lennart.klebl@t-online.de; prefer-encrypt=mutual; keydata=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 Smj4HKTOvTQzFn8L5A== User-Agent: Evolution 3.50.2 MIME-Version: 1.0 X-TOI-EXPURGATEID: 150726::1701528897-F67FB954-CE2D29B8/0/0 CLEAN NORMAL X-TOI-MSGID: 37b336c7-7ec5-4016-a6e2-9ef47bcb50a0 Subject: [FFmpeg-devel] [PATCH] avfilter: allow floating point formatting in expr_int_format (vf_drawtext.c) 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: j0Z9gxLrmbdT Since I was trying for quite some time to get proper floating point formatting of positive and negative numbers working with the existing drawtext/expr_int_format implementation, I added the f format specifier that is only applied when used in conjunction with a width. From 14c438a2bcf2ea17a6818ef5cdc6a7ee9ef30184 Mon Sep 17 00:00:00 2001 From: "lennart.klebl@t-online.de" Date: Sat, 2 Dec 2023 15:53:20 +0100 Subject: [PATCH] avfilter: allow floating point formatting in expr_int_format (vf_drawtext.c) --- doc/filters.texi | 12 ++++++++---- libavfilter/vf_drawtext.c | 19 ++++++++++++++----- 2 files changed, 22 insertions(+), 9 deletions(-) diff --git a/doc/filters.texi b/doc/filters.texi index de19d130cc..1b11124434 100644 --- a/doc/filters.texi +++ b/doc/filters.texi @@ -12807,14 +12807,18 @@ the constants @var{text_w} and @var{text_h} will have an undefined value. @item expr_int_format, eif -Evaluate the expression's value and output as formatted integer. +Evaluate the expression's value and output as formatted integer or floating +point number. The first argument is the expression to be evaluated, just as for the @var{expr} function. The second argument specifies the output format. Allowed values are @samp{x}, -@samp{X}, @samp{d} and @samp{u}. They are treated exactly as in the +@samp{X}, @samp{d}, @samp{u}, and @samp{f}. They are treated exactly as in the @code{printf} function. -The third parameter is optional and sets the number of positions taken by the output. -It can be used to add padding with zeros from the left. + +When specifying @samp{f}, the third parameter is required and specifies the +number of decimal places for floating point formatting. Otherwise, the third +parameter is optional and sets the number of positions taken by the output. It +can be used to add padding with zeros from the left. @item gmtime The time at which the filter is running, expressed in UTC. diff --git a/libavfilter/vf_drawtext.c b/libavfilter/vf_drawtext.c index c5477cbff1..be0490bbb3 100644 --- a/libavfilter/vf_drawtext.c +++ b/libavfilter/vf_drawtext.c @@ -1359,6 +1359,7 @@ static int func_eval_expr_int_format(AVFilterContext *ctx, AVBPrint *bp, int ret; unsigned int positions = 0; char fmt_str[30] = "%"; + char fmt_arg = argv[1][0]; /* * argv[0] expression to be converted to `int` @@ -1376,9 +1377,9 @@ static int func_eval_expr_int_format(AVFilterContext *ctx, AVBPrint *bp, return ret; } - if (!strchr("xXdu", argv[1][0])) { + if (!strchr("xXduf", fmt_arg)) { av_log(ctx, AV_LOG_ERROR, "Invalid format '%c' specified," - " allowed values: 'x', 'X', 'd', 'u'\n", argv[1][0]); + " allowed values: 'x', 'X', 'd', 'u', 'f'\n", fmt_arg); return AVERROR(EINVAL); } @@ -1400,14 +1401,22 @@ static int func_eval_expr_int_format(AVFilterContext *ctx, AVBPrint *bp, } #endif + if (fmt_arg == 'f' && argc < 3) fmt_arg = 'd'; + if (argc == 3) - av_strlcatf(fmt_str, sizeof(fmt_str), "0%u", positions); - av_strlcatf(fmt_str, sizeof(fmt_str), "%c", argv[1][0]); + if (fmt_arg == 'f') + av_strlcatf(fmt_str, sizeof(fmt_str), ".%u", positions); + else + av_strlcatf(fmt_str, sizeof(fmt_str), "0%u", positions); + av_strlcatf(fmt_str, sizeof(fmt_str), "%c", fmt_arg); av_log(ctx, AV_LOG_DEBUG, "Formatting value %f (expr '%s') with spec '%s'\n", res, argv[0], fmt_str); - av_bprintf(bp, fmt_str, intval); + if (fmt_arg == 'f') + av_bprintf(bp, fmt_str, res); + else + av_bprintf(bp, fmt_str, intval); return 0; } -- 2.43.0