[FFmpeg-devel] [PATCH v2] lavfi/drawtext: Add localtime_ms for millisecond precision

Thilo Borgmann thilo.borgmann at mail.de
Sun Dec 12 17:27:18 EET 2021



On 11 Dec 2021, at 23:17, Andreas Rheinhardt wrote:

> Thilo Borgmann:
>>
>>
>> On 10 Dec 2021, at 17:46, Michael Niedermayer wrote:
>>
>>> On Fri, Dec 10, 2021 at 12:36:21PM +0100, Thilo Borgmann wrote:
>>>>
>>>>
>>>> On 10 Dec 2021, at 3:47, zhilizhao(赵志立) wrote:
>>>>
>>>>>> On Dec 10, 2021, at 3:11 AM, Thilo Borgmann 
>>>>>> <thilo.borgmann at mail.de>
>>>>>> wrote:
>>>>>>
>>>>>> 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
>>>>>>
>>>>>
>>>>>> +    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);
>>>>>> +    }
>>>>>>
>>>>>
>>>>>
>>>>> How about
>>>>>
>>>>>     av_bprintf(&bp, ".%03d", (int)(unow % 1000000) / 1000);
>>>>
>>>> Makes way too much sense. I need holidays…
>>>>
>>>> Attached v3.
>>>>
>>>> Thanks!
>>>> -Thilo
>>>
>>>>  doc/filters.texi          |    8 ++++++++
>>>>  libavfilter/vf_drawtext.c |   12 ++++++++++--
>>>>  2 files changed, 18 insertions(+), 2 deletions(-)
>>>> 87d34e4106b829d42c5e57c847c28bed08bf3a81 
>>>> v3-0001-lavfi-drawtext-Add-localtime_ms-for-millisecond-p.patch
>>>> From fd34d1434e2243a881c24f6db4cc0db92289f4bb Mon Sep 17 00:00:00 
>>>> 2001
>>>> From: Thilo Borgmann <thilo.borgmann at mail.de>
>>>> Date: Fri, 10 Dec 2021 12:34:23 +0100
>>>> Subject: [PATCH v3] lavfi/drawtext: Add localtime_ms for 
>>>> millisecond
>>>> precision
>>>
>>> Iam missining something here as it doesnt build
>>>
>>> AR    libavdevice/libavdevice.a
>>> CC    libavfilter/vf_drawtext.o
>>> libavfilter/vf_drawtext.c: In function ‘func_strftime’:
>>> libavfilter/vf_drawtext.c:1052:12: error: implicit declaration of
>>> function ‘av_gettime’; did you mean ‘av_get_token’?
>>> [-Werror=implicit-function-declaration]
>>>      unow = av_gettime();
>>>             ^~~~~~~~~~
>>>             av_get_token
>>> libavfilter/vf_drawtext.c:1061:20: warning: passing argument 1 of
>>> ‘av_bprintf’ from incompatible pointer type
>>> [-Wincompatible-pointer-types]
>>>          av_bprintf(&bp, ".%03d", (int)(unow % 1000000) / 
>>> 1000);
>>>                     ^
>>> In file included from libavfilter/vf_drawtext.c:47:0:
>>> ./libavutil/bprint.h:127:6: note: expected ‘AVBPrint * {aka struct
>>> AVBPrint *}’ but argument is of type ‘AVBPrint ** {aka struct 
>>> AVBPrint
>>> **}’
>>>  void av_bprintf(AVBPrint *buf, const char *fmt, ...)
>>> av_printf_format(2, 3);
>>>       ^~~~~~~~~~
>>> cc1: some warnings being treated as errors
>>> ffbuild/common.mak:70: recipe for target 'libavfilter/vf_drawtext.o'
>>> failed
>>> make: *** [libavfilter/vf_drawtext.o] Error 1
>>
>> Works for me on OSX.
>>
>> av_gettime() is in lavu/time.c which gets included via
>> lavu/time_internal.h….
>>
>
> av_gettime() is public and resides in lavu/time.h, not
> lavu/time_internal.h; the latter does not include the former in any 
> way.

Ups, <time.h> was it…


> But compat/os2threads.h and compat/w32pthreads.h include lavu/time.h.
> Maybe you have it from the former? It doesn't work here (Ubuntu 21.10)
> either.

Retested and I got no clue how this appeared to be working for me 
yesterday - sorry.

v4 attached, including lavu/time.h and fixed pointer type warning.

Thanks!
-Thilo
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: v4-0001-lavfi-drawtext-Add-localtime_ms-for-millisecond-p.patch
URL: <https://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20211212/a82c425d/attachment.ksh>


More information about the ffmpeg-devel mailing list