From patchwork Thu Dec 9 19:11:44 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thilo Borgmann X-Patchwork-Id: 32251 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:cd86:0:0:0:0:0 with SMTP id d128csp779123iog; Thu, 9 Dec 2021 11:11:49 -0800 (PST) X-Google-Smtp-Source: ABdhPJzz6sC9yGyuz1MHWddmuANcrvwO683hNoAdjOFFYj8+HAmB5DXA8Tdys8C/LUU7CAVQuTO/ X-Received: by 2002:a05:6402:4387:: with SMTP id o7mr26808968edc.47.1639077109020; Thu, 09 Dec 2021 11:11:49 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1639077109; cv=none; d=google.com; s=arc-20160816; b=i0sOSKKcCTIgkuUC7UFq5jJdR7rGGdSNtu0yxDEQr6rU8imtLiGSyaNSUOFVczLJOc tprWT9JA5VBSw3hXTUrBCEYipRg0eqB/5r57yXGwiZspPQ7+aQTtDlU5YQtvBAKMz1VX 5gaZag/ZRx878YAyjxzRCRWw/I7DwAZ8XhCtxhg1bheXNI/P3lw9dHGFqtKkn8QT+ytW 7S7LYX0TEUbZw8yYGhsyoxxAIOVa4Bd3rzwcizBTWybVpcHVaUmX44brhImHwkefb5fg 1cnACc2Uy9ZoahvdsYA3I2tXiIhIxtxuWn3rQl06S1TYCEURyitfXf4GxONMYCl0O8wG zItA== 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:message-id:date:to:from:dkim-signature:delivered-to; bh=vLPqdIfMVnEivLQsX1DqluetJvbT9npf0YCIz8nBwA4=; b=f97m8VyChK25K2sIDDCBtp4pTMJnV3BMsqO7JpkoesusI1hBng87nsrrPKlt/oqeTG jLlcPuVUpPAljxpsqGFS6Q4IbTV926Y9023ixyiDvt4Z39Klpa/LG+FDR2QGermQNI+s 1qlqSCfcgZKseuqq4AJA4DY4jb1rSv0zehuELYxGNHkJGc3O4dRBLBrL6nGBSgbUtqqh 5uM0IzdxBXKyeKeCWfv6Mcj82PIssGet+mwJvVZPNJJqSNNcK/M2TY6CZ5K6uUxUq7+K khuoF4z7BI23FvnG5oqvMjFExY4JLvzi7a67o6XLF8RWrCi/fIMmDKfwzYxhT4FjbfXd exWA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@mail.de header.s=mailde202009 header.b=c00nUS+j; 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=mail.de Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id s23si978583ejv.608.2021.12.09.11.11.48; Thu, 09 Dec 2021 11:11:49 -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; dkim=neutral (body hash did not verify) header.i=@mail.de header.s=mailde202009 header.b=c00nUS+j; 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=mail.de Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id CB9EB68ADCE; Thu, 9 Dec 2021 21:11:44 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from shout01.mail.de (shout01.mail.de [62.201.172.24]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 27B1C68A44A for ; Thu, 9 Dec 2021 21:11:38 +0200 (EET) Received: from postfix01.mail.de (postfix02.bt.mail.de [10.0.121.126]) by shout01.mail.de (Postfix) with ESMTP id AB50DA30B3 for ; Thu, 9 Dec 2021 20:11:37 +0100 (CET) Received: from smtp04.mail.de (smtp04.bt.mail.de [10.0.121.214]) by postfix01.mail.de (Postfix) with ESMTP id 92F15A03C1 for ; Thu, 9 Dec 2021 20:11:37 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=mail.de; s=mailde202009; t=1639077097; bh=NLd2ykpiofmX1dtoGsLM3zwkQN3cQlaFjiEM16q+bUM=; h=From:To:Subject:Date:From; b=c00nUS+jLQvhzIbP6MQDjLeB0Q8OALNamQd0KLwUq6h3cL5SEpDcWC7mLKS9Ow8/a hQT8WggoRKSMd92MWLqLMq7qvT/hqWtI1xR+82ZXR0YIay5Vfo0ylRtb0ueQsG9FS4 AxW3IenLVUeYJrW8mJF0bEP/SlBtDEdteVE99cFniVQcDAUCnEaeKRUgGVfj662rEa RN8AXKvAoY6BAuUM1b0F5V1QUPTRCjGWq5VChcnCzZRq4JpWMZp9oQ18u4YOEzDS0j xqC+v8R8NgyquV/WZ2K5XqFuwaTVyNSkAO0QwzujhJoLga0R9qPcEQjDobZf/Ra9w8 8exLlip1LekDQ== Received: from [127.0.0.1] (localhost [127.0.0.1]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by smtp04.mail.de (Postfix) with ESMTPSA id 3AEB2C001D for ; Thu, 9 Dec 2021 20:11:37 +0100 (CET) From: "Thilo Borgmann" To: "FFmpeg development discussions and patches" Date: Thu, 09 Dec 2021 20:11:44 +0100 Message-ID: <280498BE-226E-41E2-BE17-DE2D47EAFFC0@mail.de> MIME-Version: 1.0 X-purgate: clean X-purgate: This mail is considered clean (visit http://www.eleven.de for further information) X-purgate-type: clean X-purgate-Ad: Categorized by eleven eXpurgate (R) http://www.eleven.de X-purgate: This mail is considered clean (visit http://www.eleven.de for further information) X-purgate: clean X-purgate-size: 3507 X-purgate-ID: 154282::1639077097-00007C04-AE59FC19/0/0 Subject: [FFmpeg-devel] [PATCH v2] lavfi/drawtext: Add localtime_ms for millisecond precision 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: Qvqt6THT/090 Hi, add %{localtime_ms}, %{gmtime_ms} functions to the drawtext filter. Same as %{localtime}/%{gmtime} but with additional millisecond part. sorry for delay, second version including review remarks: -get timing once -also add gmtime_ms instead of just localtime_ms Thanks, Thilo From 07c940d63df392a592a72dc23fb48f6682284c65 Mon Sep 17 00:00:00 2001 From: Thilo Borgmann Date: Thu, 9 Dec 2021 19:57:18 +0100 Subject: [PATCH v2] lavfi/drawtext: Add localtime_ms for millisecond precision Suggested-By: ffmpeg@fb.com --- doc/filters.texi | 8 ++++++++ libavfilter/vf_drawtext.c | 15 +++++++++++++-- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/doc/filters.texi b/doc/filters.texi index 78faf76..db75632 100644 --- a/doc/filters.texi +++ b/doc/filters.texi @@ -10949,10 +10949,18 @@ It can be used to add padding with zeros from the left. The time at which the filter is running, expressed in UTC. It can accept an argument: a strftime() format string. +@item gmtime_ms +Same as @code{gmtime} but with millisecond precision. +It can accept an argument: a strftime() format string. + @item localtime The time at which the filter is running, expressed in the local time zone. It can accept an argument: a strftime() format string. +@item localtime_ms +Same as @code{localtime} but with millisecond precision. +It can accept an argument: a strftime() format string. + @item metadata Frame metadata. Takes one or two arguments. diff --git a/libavfilter/vf_drawtext.c b/libavfilter/vf_drawtext.c index 382d589..65da1ec 100644 --- a/libavfilter/vf_drawtext.c +++ b/libavfilter/vf_drawtext.c @@ -1045,15 +1045,24 @@ static int func_strftime(AVFilterContext *ctx, AVBPrint *bp, char *fct, unsigned argc, char **argv, int tag) { const char *fmt = argc ? argv[0] : "%Y-%m-%d %H:%M:%S"; + int64_t unow; time_t now; struct tm tm; - time(&now); - if (tag == 'L') + unow = av_gettime(); + now = unow / 1000000; + if (tag == 'L' || tag == 'm') localtime_r(&now, &tm); else tm = *gmtime_r(&now, &tm); av_bprint_strftime(bp, fmt, &tm); + + if (tag == 'M' || tag == 'm') { + char ms[5] = {0}; + int64_t dnow = (unow - ((int64_t)now) * 1000000) / 1000; + snprintf(ms, 5, ".%03d", (int)dnow); + av_bprint_append_data(bp, ms, 4); + } return 0; } @@ -1152,7 +1161,9 @@ static const struct drawtext_function { { "pict_type", 0, 0, 0, func_pict_type }, { "pts", 0, 3, 0, func_pts }, { "gmtime", 0, 1, 'G', func_strftime }, + { "gmtime_ms", 0, 1, 'M', func_strftime }, { "localtime", 0, 1, 'L', func_strftime }, + { "localtime_ms", 0, 1, 'm', func_strftime }, { "frame_num", 0, 0, 0, func_frame_num }, { "n", 0, 0, 0, func_frame_num }, { "metadata", 1, 2, 0, func_metadata },