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