From patchwork Thu Jun 10 13:25:01 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhao Zhili X-Patchwork-Id: 28193 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a5e:c91a:0:0:0:0:0 with SMTP id z26csp507392iol; Thu, 10 Jun 2021 06:25:40 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxPr4aCTSmIrNtVtj4yCV1Y3ugsaWwU5PCaViuh1Lxf/b8yp2yBEjz16bbvDYagXWPReJ1F X-Received: by 2002:a17:907:2136:: with SMTP id qo22mr4471044ejb.40.1623331540769; Thu, 10 Jun 2021 06:25:40 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1623331540; cv=none; d=google.com; s=arc-20160816; b=E1LX0ULCJFSsMKGA6a8BoNviNM7/WXJaJrEsxFfE4cNKJoF6cgKaq7JnQjf3SiHbxN HL5jkZ0Ec4e+9imBTMw1ht1jN9EgsDSdiggj9nKKdtePGuRX3SOqjCxN6iIGKDbDvXbb 1Hb9IDKON+PvWv1COjvFeqP3k86uB0Z0vLhMRtEUV8at2kPlkQKrFchdjR7YX6P8PFrj R8IYV2+Wexbu5XmxnkqLGIy3GAB7zL95/RkwUntrZWmZRtpHWVrwvpANtDpK/79gNvbv qxLSuXFGiEeGbK1zOPNLZwsSUW114wh5/Ws27CCandZnhg8mJSJt1EndO++tSK9vQOtc BXYA== 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:date:to:from:message-id :dkim-signature:delivered-to; bh=/W91/uX5hikrnH1hFzrwP+yPQeDCom7j5mQH3La+F6M=; b=xT/gBhgpwBfs5RLOsqbr/lmI67lZnGwpnd52j+GWHfSMhkz7etnoHHkHyB29COH2v7 5uUkm/QLH9e1+i7NFgqlwDoPQNnELKCCv2I5jRo9cKTsV/rtKmAzliPpr11F7E8oO6Pf PxrHA3kjquKoe5nyetg/V/9YTiUsvtQBGBTTcM/fD8e7XKipVACWA0AOwmMI0wJlLfAh KgDEYA7XAKtzabUUl3s6bC2D8HiK1cYxsZgZENQOjFeu2Y6pRLVKLHxvznnqJLyjuAfn CENMaI8e8wGbOyUu9rd+aud5ub0Nddlm6g5qoWdAdYd97FjpGa2irI2vFB4mbNWc/POq 1/NA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b=v4hyNhDA; 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=foxmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id m12si2307940edi.558.2021.06.10.06.25.39; Thu, 10 Jun 2021 06:25:40 -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=@foxmail.com header.s=s201512 header.b=v4hyNhDA; 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=foxmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 33C0468069C; Thu, 10 Jun 2021 16:25:35 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from out203-205-221-205.mail.qq.com (out203-205-221-205.mail.qq.com [203.205.221.205]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id B515C6805BE for ; Thu, 10 Jun 2021 16:25:25 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foxmail.com; s=s201512; t=1623331519; bh=+nZ4CKFJJyVFMulyuDX4QMX+sxBhboMfXrY1RLW22aM=; h=From:To:Cc:Subject:Date; b=v4hyNhDArcE/gyXDQy3W7aGJ+ZaR1S3f5WsiJqR21YFi5V2OX1PqVNgO1rxmFQoyl Yb8Xe7xSOGJTmUWvy4/hPjWrs866uygi2WDICmOIK0ayaDM40BsK5JWgvA1QvCohy/ YolKQwEm1/v1KWixtuuI2warLFjojv2wVRtpQ88A= Received: from ZHILIZHAO-MB2.tencent.com ([113.108.77.59]) by newxmesmtplogicsvrszc9.qq.com (NewEsmtp) with SMTP id 65192CB2; Thu, 10 Jun 2021 21:25:17 +0800 X-QQ-mid: xmsmtpt1623331517t6gjfkk6l Message-ID: X-QQ-XMAILINFO: NUY4oUfJpAl4+Ajyr9i+VbWPQsyo4R9VTkq3fbn90meuey9QXLiO9UN21/JJ8e IrpMfXoKmdU1/pM+sw84XsNuKUI63YJcwmsAn2q2rX20A4j9tYWAA+6IEqdg1aF7GSh5q6L5zg23 c3hhr3TQqrf0cLaJ2b2F8CwBZkIlJzLUlVMoX0KLgutbPt4DCBB67b92tsIj0kSVZ60dNLb6Tc0C EsYtTdzSyAiC0bIRdT9SdxlBgrsHse4p3+wd7tTsegY5n3m3UTAmBpWFclINsfIqPAsWm3dI1Zrz BIP7x8AOqMzf9+dYJ47GLj4YubmOE/ZtL4BO5ns4ODeIRdWcy0ZcmyRp87lrwqaibstETMdrLzgQ znV051xklcxufRLLYPJw6LG0Ta/RTufGXqggae8PPMu8kv0UHX/8xBfYEiMMi4PV3k7eipmFvNE8 6PzwpXmNehMTSLeVEsKb88KpIV+SI90+q6jVUWBNVno5Ehgq2pPP0UNnhPraRhWD/sJvh5HvDTaN p0u1jWi33o6f42ZBmm+PvNsqQRaNddMCQPs+tdnsrkO6ti7ElRbirlUucEUhUicX0Y9/soidqIzQ 8MaRknVxXIpyFP06kpmy8dXCdQSJbNh3r8v4avjVdbvhlbykf4eZyRtiWi7/V3/dXDp6NyvhnQz1 WAN9hjchQ1ULpZBQcPDsQ5Yf1u0JCYLMp1boRbpzgpdUWtW9v+BDPdgJ+hWvveMH8tXEAHld33LD UJKewlsXYpUZuMAYifTPc2tR1mBfJu5NUApGKH311C4PUoyMkHspjmwNzlHOjbdhFK26x2ua1gjj peqO5DYr7oTTrgnrwv0Kai3Hltz92f6QdqRosteHLG68/wpNerLmsoO3qP+hUNNLXJujKymuqWgh bZuLj9rzT5 From: Zhao Zhili To: ffmpeg-devel@ffmpeg.org Date: Thu, 10 Jun 2021 21:25:01 +0800 X-OQ-MSGID: <20210610132502.16841-1-quinkblack@foxmail.com> X-Mailer: git-send-email 2.31.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 1/2] avfilter/vf_drawtext: don't assign twice consecutively to the same value 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: Zhao Zhili Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: r5frTX5Y8Ota --- libavfilter/vf_drawtext.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libavfilter/vf_drawtext.c b/libavfilter/vf_drawtext.c index c4c09894e4..f7b9c25e62 100644 --- a/libavfilter/vf_drawtext.c +++ b/libavfilter/vf_drawtext.c @@ -1052,7 +1052,7 @@ static int func_strftime(AVFilterContext *ctx, AVBPrint *bp, if (tag == 'L') localtime_r(&now, &tm); else - tm = *gmtime_r(&now, &tm); + gmtime_r(&now, &tm); av_bprint_strftime(bp, fmt, &tm); return 0; } From patchwork Thu Jun 10 13:25:02 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhao Zhili X-Patchwork-Id: 28192 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a5e:c91a:0:0:0:0:0 with SMTP id z26csp507556iol; Thu, 10 Jun 2021 06:25:53 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwebvjNXGwjPsS1ac5LLCWUxs1vj3utJ8EnngFYsqBsc1l0baNABgj2Jv13lYXE4xzRdlc9 X-Received: by 2002:a17:906:a2d0:: with SMTP id by16mr4523005ejb.37.1623331553275; Thu, 10 Jun 2021 06:25:53 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1623331553; cv=none; d=google.com; s=arc-20160816; b=aEefQvYq5N7rCGlNK96SUZyFgsg/a5YQ3yr4/zReol5k6rn1QoNp+kQkO3kSJKsEnF 5hx2h0WR98riCpiWZ+VHA7moFqKRJQ653ACqsLLqJ3p0icIN6/hH9wPIRWKx4zNIyXoV qZPTrab1uBtzq+LHdvl5RmKC/I672as9WIO8AjW05psLlulJOJCd2FuW7LLHfYxMm7wB VJS9GsIf94EBf1CqWY9iUjkcshqwotXdveR3bzJfI+EqparZuV1jRFpsq83F79ERjCMX r/vigxo6CL7QxAMN/dpaYeI5QknoZxfF+thdnIdzEh6Dpnybsn1a48IN/sTJOdrm68sI wpgA== 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:date :to:from:message-id:dkim-signature:delivered-to; bh=2BMigB+K9US1CMn4eT+tWyoNGQWdL6N3vT58OjZ6wag=; b=ubhnPMZaf/x4045lS1RE2N+L1TEgKFsPxKUq+20wLtOt3+wiO39F0nAbOy84gq6CFi GQJLao0HBMwhbi4z2Hl5C8AtixckW6OBrWMqHassQiql0c01GQfCD1R+Flrdo+/5Xc+E D1OvJbQ7iHUYTSK0UVYmZc8MC+U5ZpS561d58igHt/mnkxWNnmT1Dy6gQdTeozVXeFed j4l3cAexSOWJ2/y3KBNP58aHLgCtFNrono7xFjEq7HRRRW4EkuWyRq43rnpyrrZYorwg mOcGVViQvb4EKz4rK+DU8iaap1MlKAEffnoTiqds3l2u8bT4GnQvWFgbkLYVMNZCV03T Qr7A== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b=ZUX2H+Mg; 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=foxmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id co3si2230744edb.121.2021.06.10.06.25.52; Thu, 10 Jun 2021 06:25:53 -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=@foxmail.com header.s=s201512 header.b=ZUX2H+Mg; 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=foxmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 5FD54687FE1; Thu, 10 Jun 2021 16:25:36 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from out203-205-221-192.mail.qq.com (out203-205-221-192.mail.qq.com [203.205.221.192]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 46D8C680C0F for ; Thu, 10 Jun 2021 16:25:26 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foxmail.com; s=s201512; t=1623331521; bh=HreOzadOoLeOp5L3ka27SP5thH9CnldDonvK/OthM9E=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=ZUX2H+Mg902+Vy9yC+nUFuEE3u+gbp/CmB5tizIH/dnNNkmWyhvbD8oLVOdbxwmke 39LIfQ/HD/HEEOg+02wQeFmuJhdsIroQiUaqtZ7/mXzcqKGibY5eyD35S50030yaGE Sqeo2uGbtnFw/FA5JG07Oeiw8xjSWrHsL0c1wz54= Received: from ZHILIZHAO-MB2.tencent.com ([113.108.77.59]) by newxmesmtplogicsvrszc9.qq.com (NewEsmtp) with SMTP id 65192CB2; Thu, 10 Jun 2021 21:25:17 +0800 X-QQ-mid: xmsmtpt1623331518tdpiwcmzf Message-ID: X-QQ-XMAILINFO: OGn2S7BqG7Pa2BCSFcnhIzxROA3liexQIv4zKi/kcB5/WEIB1+K0LRrwAi1YOX WcWa7Hvg5WWI9IKoeNvAIHVaxAvWoGqma+xiB2ctZyZnKTnjw03S1Hb3oNP1Ha1xCZJrQB5LogJ6 azOBD0m9zh+pamLe+e8ncW5GrX2E1YBvKREcuBcNufvjsgT0Cl1qixXQdaqezlhxItmDnc+y6M4g IqY3OnCCdkHH5gZSCJa/Hxz4kyfjYTzh4YJQHRzWdEe6XXbhk5W7OVWcFLcTRLFT6a4cfFY1uKDp A6q4ngiZPyMvGBpDBnADklCnE8uQ6KunqOBkrcE686tzCXW4QkIeZ03NPYoZsbcuj+VcEaMiX055 8wUuLvO7zOCXZUQPI038lZfoBcY/tx4+QcP9vkxGfdH5SHWtesX9IAUWowRh5Cos6YkjmTEX8l5d uzaMVseOnaQMJg9FVLY44Lv210HoGmCQNuZ5SsW+iOfTlTMegV/fCtY0CkT5XSah6fFM2ei39umD GN3pHeWoQxx7JJgQyK1EiAgp04R/9cXnhlp9nqrJEJgKq3hiIgtUYHA9Ayl3SVIju3RHcKboGf4M UVEl5df/xGtVd5aNnp+KvYqh2FbDD2fLIr7XP5MoGuLmqb9xQtlpr8T/6xKV5gYS8+3Xh5tFAH3p tDxZv/2bDD3vQf1nlyi6Egukcg0SYCtUHWpPYimt7TlVF2XIkKRGMM3pbZoacJywNaZ0SglQR8St sajJy+dTOI73OjE1gMn2mdENkk8Vi9Mj3Do9EM3ByLZSZ9KXO7npmdUiok5bQ8X3ohtTMTYXe9Yw 3WGGngSBF1EtA2FCVFIr8y1Z54PBtyBhs= From: Zhao Zhili To: ffmpeg-devel@ffmpeg.org Date: Thu, 10 Jun 2021 21:25:02 +0800 X-OQ-MSGID: <20210610132502.16841-2-quinkblack@foxmail.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210610132502.16841-1-quinkblack@foxmail.com> References: <20210610132502.16841-1-quinkblack@foxmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 2/2] avfilter/vf_drawtext: add rtctime 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: Zhao Zhili Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: VbteXH86eLfG Compared to gmtime and localtime, rtctime has higher resolution. For example, it can be used to show the end-to-end latency. On the same host, publish a stream by: ./ffmpeg \ -re -f lavfi -i "color=color=blue:size=1280x720:rate=60" \ -c:v libx264 \ -tune zerolatency \ -vf "drawtext=text='push %{rtctime\:hms} pts %{pts\:hms}':x=10:y=(h-th)/2:fontsize=30:box=1:boxcolor=white:boxborderw=30" \ -f flv $url Use ffplay to show the latency: ./ffplay -threads 1 \ -vf "drawtext=text='play %{rtctime\:hms} pts %{pts\:hms}':x=10:y=th:fontsize=30:box=1:boxcolor=white:boxborderw=30,setpts=PTS*4/5" \ "$url" --- doc/filters.texi | 3 +++ libavfilter/version.h | 2 +- libavfilter/vf_drawtext.c | 24 ++++++++++++++++++++---- 3 files changed, 24 insertions(+), 5 deletions(-) diff --git a/doc/filters.texi b/doc/filters.texi index 78faf767cf..b2d4660327 100644 --- a/doc/filters.texi +++ b/doc/filters.texi @@ -10953,6 +10953,9 @@ It can accept an argument: a strftime() format string. The time at which the filter is running, expressed in the local time zone. It can accept an argument: a strftime() format string. +@item rtctime +The time at which the filter is running, can use the same format as @samp{pts}. + @item metadata Frame metadata. Takes one or two arguments. diff --git a/libavfilter/version.h b/libavfilter/version.h index f12bc876ae..5052681653 100644 --- a/libavfilter/version.h +++ b/libavfilter/version.h @@ -31,7 +31,7 @@ #define LIBAVFILTER_VERSION_MAJOR 8 #define LIBAVFILTER_VERSION_MINOR 0 -#define LIBAVFILTER_VERSION_MICRO 101 +#define LIBAVFILTER_VERSION_MICRO 102 #define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \ diff --git a/libavfilter/vf_drawtext.c b/libavfilter/vf_drawtext.c index f7b9c25e62..e20b556a87 100644 --- a/libavfilter/vf_drawtext.c +++ b/libavfilter/vf_drawtext.c @@ -51,6 +51,7 @@ #include "libavutil/opt.h" #include "libavutil/random_seed.h" #include "libavutil/parseutils.h" +#include "libavutil/time.h" #include "libavutil/timecode.h" #include "libavutil/time_internal.h" #include "libavutil/tree.h" @@ -959,12 +960,11 @@ static int func_pict_type(AVFilterContext *ctx, AVBPrint *bp, return 0; } -static int func_pts(AVFilterContext *ctx, AVBPrint *bp, - char *fct, unsigned argc, char **argv, int tag) +static int func_time_common(AVFilterContext *ctx, AVBPrint *bp, + char *fct, unsigned argc, char **argv, int tag, + double pts) { - DrawTextContext *s = ctx->priv; const char *fmt; - double pts = s->var_values[VAR_T]; int ret; fmt = argc >= 1 ? argv[0] : "flt"; @@ -1019,6 +1019,21 @@ static int func_pts(AVFilterContext *ctx, AVBPrint *bp, return 0; } +static int func_pts(AVFilterContext *ctx, AVBPrint *bp, + char *fct, unsigned argc, char **argv, int tag) +{ + DrawTextContext *s = ctx->priv; + double pts = s->var_values[VAR_T]; + return func_time_common(ctx, bp, fct, argc, argv, tag, pts); +} + +static int func_rtctime(AVFilterContext *ctx, AVBPrint *bp, + char *fct, unsigned argc, char **argv, int tag) +{ + double pts = av_gettime() / 1000000.0; + return func_time_common(ctx, bp, fct, argc, argv, tag, pts); +} + static int func_frame_num(AVFilterContext *ctx, AVBPrint *bp, char *fct, unsigned argc, char **argv, int tag) { @@ -1153,6 +1168,7 @@ static const struct drawtext_function { { "pts", 0, 3, 0, func_pts }, { "gmtime", 0, 1, 'G', func_strftime }, { "localtime", 0, 1, 'L', func_strftime }, + { "rtctime", 0, 3, 0, func_rtctime }, { "frame_num", 0, 0, 0, func_frame_num }, { "n", 0, 0, 0, func_frame_num }, { "metadata", 1, 2, 0, func_metadata },