[vlc-devel] [PATCH 08/10] vlc_tick: add helper fonctions to convert from vlc_tick_t from floating point seconds

Steve Lhomme robux4 at ycbcr.xyz
Fri Jun 22 14:53:25 CEST 2018


---
 include/vlc_tick.h | 40 +++++++++++++++++++++++++++++++++++++++-
 1 file changed, 39 insertions(+), 1 deletion(-)

diff --git a/include/vlc_tick.h b/include/vlc_tick.h
index 0cd42824405..9e7f909e149 100644
--- a/include/vlc_tick.h
+++ b/include/vlc_tick.h
@@ -58,16 +58,54 @@ typedef vlc_tick_t mtime_t; /* deprecated, use vlc_tick_t */
 #define NS_FROM_VLC_TICK(vtk)   ((vtk) * (INT64_C(1000000000) / CLOCK_FREQ)) /* vlc_tick_t in nanoseconds */
 
 
+#ifdef __cplusplus
 static inline vlc_tick_t vlc_tick_from_sec(int64_t sec)
 {
-    return sec * CLOCK_FREQ;
+    return CLOCK_FREQ * sec;
+}
+static inline vlc_tick_t vlc_tick_from_sec(int sec)
+{
+    return CLOCK_FREQ * sec;
+}
+static inline vlc_tick_t vlc_tick_from_sec(long sec)
+{
+    return CLOCK_FREQ * sec;
+}
+static inline vlc_tick_t vlc_tick_from_sec(uint32_t sec)
+{
+    return CLOCK_FREQ * sec;
+}
+static inline vlc_tick_t vlc_tick_from_sec(double secf)
+{
+    return (vlc_tick_t)(CLOCK_FREQ * secf); /* TODO use llround ? */
+}
+#else /* !__cplusplus */
+static inline vlc_tick_t vlc_tick_from_seci(int64_t s)
+{
+    return CLOCK_FREQ * s;
+}
+
+static inline vlc_tick_t vlc_tick_from_secf(double secf)
+{
+    return (vlc_tick_t)(CLOCK_FREQ * secf); /* TODO use llround ? */
 }
 
+#define vlc_tick_from_sec(sec) _Generic((sec), \
+        double:  vlc_tick_from_secf(sec), \
+        float:   vlc_tick_from_secf(sec), \
+        default: vlc_tick_from_seci(sec) )
+#endif /* !__cplusplus */
+
 static inline int64_t sec_from_vlc_tick(vlc_tick_t vtk)
 {
     return vtk / CLOCK_FREQ;
 }
 
+static inline double secf_from_vlc_tick(vlc_tick_t vtk)
+{
+    return (double)vtk / (double)CLOCK_FREQ;
+}
+
 static inline vlc_tick_t vlc_tick_from_ms(int64_t ms)
 {
     /* TODO refine if CLOCK_FREQ is not a multiple of 1000 */
-- 
2.17.0



More information about the vlc-devel mailing list