[vlc-devel] [PATCH 09/10] vlc_tick: add msftime_t to express 100ns time

Rémi Denis-Courmont remi at remlab.net
Sat Jun 23 16:16:35 CEST 2018


Sure. But it means that:
1/ The conversion macros will all be only multiplication, or only division, so they will not cause intermediate overflow. If it makes you feel better, add static_assert in mtime.c.

There are issues in some parts of this patch.

2/ date_t must be used when the conversion is not to/from a multiple or divisor of CLOCK_FREQ. We cannot do magic.

Le 23 juin 2018 07:32:03 GMT+01:00, Steve Lhomme <robux4 at ycbcr.xyz> a écrit :
>On 2018-06-22 9:19 PM, Rémi Denis-Courmont wrote:
>> As I already pointed out, CLOCK_FREQ must remain a multiple of one 
>> million and a divisor of one billion. Too much problems with overflow
>
>> and rounding otherwise.
>
>100,000,000 is one of these.
>
>
>
>>
>> Besides POSIX, ISO and Microsoft all agree there.
>>
>> Le 22 juin 2018 14:28:08 GMT+01:00, Steve Lhomme <robux4 at ycbcr.xyz> a
>
>> écrit :
>>
>>     On 2018-06-22 3:17 PM, Romain Vimont wrote:
>>
>>         On Fri, Jun 22, 2018 at 02:53:26PM +0200, Steve Lhomme wrote:
>>
>>             Such values currently have a better resolution than
>>             vlc_tick_t Also provide conversion macros/functions
>>             to/from vlc_tick_t --- include/vlc_tick.h | 18
>>             ++++++++++++++++++ 1 file changed, 18 insertions(+) diff
>>             --git a/include/vlc_tick.h b/include/vlc_tick.h index
>>             9e7f909e149..6953ba346d4 100644 --- a/include/vlc_tick.h
>>             +++ b/include/vlc_tick.h @@ -138,6 +138,24 @@ static
>>             inline int64_t ns_from_vlc_tick(vlc_tick_t vtk) return
>vtk
>>             * INT64_C(1000000000) / CLOCK_FREQ; } +/** + * Typically
>>             Microsoft time with 100ns resolutions + */ +typedef
>>             int64_t msftime_t; +#define MSFTIME_FROM_VLC_TICK(vtk)
>>             ((msftime_t)((vtk) * (INT64_C(10000000) / CLOCK_FREQ)))
>>             +#define VLC_TICK_FROM_MSFTIME(msft) ((vlc_tick_t)((msft)
>>             / (INT64_C(10000000) / CLOCK_FREQ))) +#define
>>             MSFTIME_FROM_SEC(sec) ((msftime_t)((sec) *
>>             INT64_C(10000000))) /* seconds in msftime_t */ + +static
>>             inline vlc_tick_t vlc_tick_from_msftime(msftime_t t) +{ +
>>             return t * CLOCK_FREQ / INT64_C(10000000); 
>>
>>         The order of operations is not the same as in the macro, so
>in
>>         theory the results (in extreme cases) might be different. If
>>         10000000 is a multiple of CLOCK_FREQ, the macro
>implementation
>>         is always better (less overflows). In practice, this is
>>         probably not important. 
>>
>>
>>     It doesn't overflow because of the current value of CLOCK_FREQ.
>If
>>     CLOCK_FREQ changes (to 100,000,000 for example) then the macro is
>doing
>>     division by 0. The function is correct except it might overflow.
>>
>>     To avoid this I would like the add static asserts in the various
>>     functions added by these patches. But that means moving the code.
>Or
>>     putting the assert somewhere else (with relevant explanation).
>>
>>     We could also do some #if depending on CLOCK_FREQ > divider or
>not and
>>     do the operations the other way around in that case.
>>
>>             +} + +static inline msftime_t
>>             msftime_from_vlc_tick(vlc_tick_t vtk) +{ + return vtk *
>>             INT64_C(10000000) / CLOCK_FREQ; +} +
>>            
>/*****************************************************************************
>>             * MSTRTIME_MAX_SIZE: maximum possible size of mstrtime
>>            
>*****************************************************************************
>>             -- 2.17.0
>>            
>------------------------------------------------------------------------
>>             vlc-devel mailing list To unsubscribe or modify your
>>             subscription options:
>>             https://mailman.videolan.org/listinfo/vlc-devel 
>>
>>        
>------------------------------------------------------------------------
>>         vlc-devel mailing list To unsubscribe or modify your
>>         subscription options:
>>         https://mailman.videolan.org/listinfo/vlc-devel 
>>
>>
>>    
>------------------------------------------------------------------------
>>
>>     vlc-devel mailing list
>>     To unsubscribe or modify your subscription options:
>>     https://mailman.videolan.org/listinfo/vlc-devel
>>
>>
>> -- 
>> Envoyé de mon appareil Android avec Courriel K-9 Mail. Veuillez 
>> excuser ma brièveté.
>>
>>
>> _______________________________________________
>> vlc-devel mailing list
>> To unsubscribe or modify your subscription options:
>> https://mailman.videolan.org/listinfo/vlc-devel
>
>_______________________________________________
>vlc-devel mailing list
>To unsubscribe or modify your subscription options:
>https://mailman.videolan.org/listinfo/vlc-devel

-- 
Envoyé de mon appareil Android avec Courriel K-9 Mail. Veuillez excuser ma brièveté.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.videolan.org/pipermail/vlc-devel/attachments/20180623/2f6718d8/attachment.html>


More information about the vlc-devel mailing list